Здравствуйте!
phpbb версии 3.3.11
В связи с умиранием сервиса whois и переходом на RDAP сервис "получить информацию об IP" перестал исправно функционировать..
сервер whois.arin.net по 43 порту выдает одну и туже страницу для всех адресов при запросах..
Как быть? Ждать обновления версии phpbb где будет совершен переход на RDAP ?
Или есть еще нормально функционируешь сервер whois?
В форуме в файле /includes/functions_user.php есть функция user_ipwhois() где можно поменять сервер whois..но он же умер уже?
..
зы..попробовал изменить функцию, получить curlом страницу с whois.ru, так в отдаваемой сервером странице защита против ботов, надо нажать кнопку..т.е. такой вариант не прокатил..
Отправлено спустя 2 часа 24 минуты 38 секунд:
я в общем решил проблему..
согласно топику
https://www.phpbb.com/community/viewtopic.php?t=2660611 предпоследний пост ссылку дал на сервис
https://ipinfo.io/
я переписал в файле /includes/functions_user.php функцию user_ipwhois()
добавив код curl запроса к ресурсу
https://ipinfo.io/ (я коментил строки оригинальной функции частично)
так меня интересует только город и страна, я вырезал регуляркой эти данные в ответе сервиса..
вот как выглядит моя функция сейчас
Код: Выделить всё
function user_ipwhois($ip)
{
if (!filter_var($ip, FILTER_VALIDATE_IP))
{
return '';
}
// IPv4 & IPv6 addresses
//$whois_host = 'whois.arin.net.';
$whois_host = 'whois.ripn.net.';
$ipwhois = '';
/*
if (($fsk = @fsockopen($whois_host, 43)))
{
// CRLF as per RFC3912
// Z to limit the query to all possible flags (whois.arin.net)
fputs($fsk, "z $ip\r\n");
while (!feof($fsk))
{
$ipwhois .= fgets($fsk, 1024);
}
@fclose($fsk);
}
$match = array();
// Test for referrals from $whois_host to other whois databases, roll on rwhois
if (preg_match('#ReferralServer:[\x20]*whois://(.+)#im', $ipwhois, $match))
{
if (strpos($match[1], ':') !== false)
{
$pos = strrpos($match[1], ':');
$server = substr($match[1], 0, $pos);
$port = (int) substr($match[1], $pos + 1);
unset($pos);
}
else
{
$server = $match[1];
$port = 43;
}
$buffer = '';
if (($fsk = @fsockopen($server, $port)))
{
fputs($fsk, "$ip\r\n");
while (!feof($fsk))
{
$buffer .= fgets($fsk, 1024);
}
@fclose($fsk);
}
// Use the result from $whois_host if we don't get any result here
$ipwhois = (empty($buffer)) ? $ipwhois : $buffer;
}
*/
$whoisurl="https://ipinfo.io/$ip";
$ch = curl_init($whoisurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$useragent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 YaBrowser/25.2.0.0 Safari/537.36';
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
$whois_html = curl_exec($ch);
curl_close($ch);
preg_match("/<h2 class\=\"h5\">(.+)<\/h2>/isU",$whois_html,$match);
$ipwhois = $match[1];
//$ipwhois = htmlspecialchars($ipwhois, ENT_COMPAT);
// Magic URL ;)
return trim(make_clickable($ipwhois, false, ''));
}