Использование альтернативного IP при обращении к url или whois через сокет на PHP

Tckb ваш зхостер предоставляет несколько IP адресов от имени которых вы можете вызывать другие сайты или IP адреса это реашет проблему блокировки от кол-ва обращений. Это является надежной альтернативой использования прокси серверов для многих задач, таких как парсинг, whois запросы или проверка почтовых адресов.

Классическое использование fsockopen для получения whois через обращение на 43 порт не позволяет использовать второй IP выделенный на вашем хостинге. Для этого используйте базовый функционал сокетов, который это позволит сделать.

Данный пример демонстрирует следующие аспекты программирования на PHP: работа с сокетами, .

// Пример получения whois-данных домена

$url='whois.iana.org';
$out='ru';
$rn=($url=='whois.nic.org.mt'?"\n":"\r\n");
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))) {
    socket_bind($sock, '195.12.12.12');
    socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, ['sec' => 10, 'usec' => 0]);
    $str=@socket_connect($sock, $url, 43);
    $errno = socket_last_error($sock);
    if ($str === false || $errno != 0) {
        echo "\n\n" . date("d-m-Y H:i:s") . ' Socket error ' . $url . ' через 195.12.12.12 для ' . $out . ': ' . "\n errno=" . $errno . "\n";
        socket_close($sock);
        return false;
    }
    socket_write($sock, $out . $rn, strlen($out . $rn));
    $str = '';
    while (($input=socket_read($sock, 1024))) $str .=$input;
    socket_close($sock);
}
echo $str;
// Пример отправки http запроса и получения ответа от сайта

$opts = [
    'socket' => [
        'bindto' => '195.12.12.12:0',
    ],
];
$context = stream_context_create($opts);
//$contents = fopen('http://www.example.com', 'r', false, $context);
$fp = stream_socket_client("tcp://htmlweb.ru:80", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    fwrite($fp, "GET /load/is.php HTTP/1.0\r\nHost: htmlweb.ru\r\nAccept: */*\r\nConnection: Close\r\n\r\n");
    while (!feof($fp)) {
        echo fgets($fp, 1024);
    }
    fclose($fp);
}
echo $str;

.