Jump to content

Скрипт на РНР


Recommended Posts

У кого есть скрипт на РНР, который проверяет IP адрес из сушествующих в списке. Типа выводит есть в текстовом файле в наличии этот айпишник.

Или может кто решал такую задачу с базой данных, это вроде как проверить входит ли айпи в UA-IX или нет. Поделитесь у кого есть.

Link to post
Share on other sites
У кого есть скрипт на РНР, который проверяет IP адрес из сушествующих в списке. Типа выводит есть в текстовом файле в наличии этот айпишник.

Или может кто решал такую задачу с базой данных, это вроде как проверить входит ли айпи в UA-IX или нет. Поделитесь у кого есть.

Perl-скрипт есть на сайте Колокола. В ПХП переделывается при желании за 5 минут.

Link to post
Share on other sites
Там типа не совсем то, у людей есть покрасивей скрипты. Просто делиться не хотят. А как самим надо то просят.

Ну не надо обо всех так плохо думать. Возможно и нету готовых скриптов у здешних резидентов. Я например только сегодня победил наконец окончательно этот долбаный уа-икс (стояла задача нарезать каждому пользователю свою скорость отдельно по внутренней сети (диапазоны ИП), украине (диапазоны ИП), Миру (все оставшееся). При этом из всех списков были исключения, которые должны считаться/нарезаться по другому (например адрес нашего внешнего хостинга в украине считать как внутреннюю сеть, а диапазоны адресов впн-провайдеров как мировой трафик)). Промучался с этой проблемой в общем месяца полтора. Теперь займусь как раз скриптом для сайта, который будет пользователям все это дело проверять, какие адреса куда относятся. Как сделаю, обещаю выложить здесь для жаждущих.

Link to post
Share on other sites
я что-то не совсем понял что требуется проверять и где берутся IP

Если юзер не может определить, приндлежит ли данный адрес какой-либо сети, список которых есть в интете, то надо ему дать скрипт, который бы делал это за него.

 

Пример есть адрес 192.168.253.252

Надо определить, принадлежит ли он сети

192.168.0.0/16

Т.е. сравнивать побайтно, входит ли адрес в диапазон.

 

В принципе, надо бы скрипт написать такой на перле или пхп.

Link to post
Share on other sites
Там типа не совсем то, у людей есть покрасивей скрипты. Просто делиться не хотят. А как самим надо то просят.

Ну не надо обо всех так плохо думать. Возможно и нету готовых скриптов у здешних резидентов. Я например только сегодня победил наконец окончательно этот долбаный уа-икс (стояла задача нарезать каждому пользователю свою скорость отдельно по внутренней сети (диапазоны ИП), украине (диапазоны ИП), Миру (все оставшееся). При этом из всех списков были исключения, которые должны считаться/нарезаться по другому (например адрес нашего внешнего хостинга в украине считать как внутреннюю сеть, а диапазоны адресов впн-провайдеров как мировой трафик)). Промучался с этой проблемой в общем месяца полтора. Теперь займусь как раз скриптом для сайта, который будет пользователям все это дело проверять, какие адреса куда относятся. Как сделаю, обещаю выложить здесь для жаждущих.

Ну вот действительно не все жадные!

Link to post
Share on other sites
я что-то не совсем понял что требуется проверять и где берутся IP

Беруться из списка в файле на провайдере и проверяються. Пользователь вводит в строке сервер а ему в ответ наличие данного адреса в списке, типа есть такой

Link to post
Share on other sites

ну так это же вроде несложно

я только не совсем понял значение цифр 24,16...

тут наверное придется поизвращаться

но очень простое решение выглядит примерно так:

<?php
echo "<form method=post>
IP address <input type=text name=zapros> <input type=submit value=Ok>
</form>";

if (!empty($zapros)){
$file=file("http://www.colocall.net/ua/",r);
$fst_pre=array_search("<PRE>\n",$file);
$lst_pre=array_search("</PRE>\n",$file);
for ($i=$fst_pre-1;$i<$lst_pre;$i++)
{
$ss=strip_tags($file[$i]);
if (strlen($ss)>=7) 
 {
 	$ex=explode(".",$zapros);
 	$z="$ex[0].$ex[1].$ex[2]";
 	if (eregi($z,$ss)) {echo "Сеть подключена к точке обмена трафиком.  $ss<br>"; $o=1;}
 	$i++;
 }
}
if ($o<>1) echo "Звиняйте, але ця мережа не у UA-IX";
}
?>

сохраняется как file.php

Link to post
Share on other sites

Вот в том то и дело, нужны не IP проверенные а сети в целом ( типа 212.40.46.0/24 ) Если создать файл с переработанными сетями в отдельные АЙПИ то РНР будет над ним думать по 30 сек. Что не есть ХАРАШО. А юзверь должен ввести не АЙПИ а имя, типа local.com.ua и получить ответ "Сеть подключена к точке обмена трафиком". А если так как написал Foster то я бы и сам давно сделал и радовался.

Link to post
Share on other sites
ну так это же вроде несложно

я только не совсем понял значение цифр 24,16...

тут наверное придется поизвращаться

но очень простое решение выглядит примерно так:

<?php
echo "<form method=post>
IP address <input type=text name=zapros> <input type=submit value=Ok>
</form>";

if (!empty($zapros)){
$file=file("http://www.colocall.net/ua/",r);
$fst_pre=array_search("<PRE>\n",$file);
$lst_pre=array_search("</PRE>\n",$file);
for ($i=$fst_pre-1;$i<$lst_pre;$i++)
{
$ss=strip_tags($file[$i]);
if (strlen($ss)>=7) 
 {
 	$ex=explode(".",$zapros);
 	$z="$ex[0].$ex[1].$ex[2]";
 	if (eregi($z,$ss)) {echo "Сеть подключена к точке обмена трафиком.  $ss<br>"; $o=1;}
 	$i++;
 }
}
if ($o<>1) echo "Звиняйте, але ця мережа не у UA-IX";
}
?>

сохраняется как file.php

/24 - значит 256 адресов, т.е. последний байт.

/16 - * 256*256 - 2 последних байта

 

Алгоритм должен быть приблизительно такой:

Сравнивание побайтно перввых байтов сетей и адреса, потом взависимости от /24, /16 и т.д. проверять, входит ли остальная часть адреса в диапазон сети.

 

Пример:

сеть 123.234.0.0/16

Адреса 123.234.1-255.1-255 входят в диапазон сети.

 

Может в модуль для СТГ это включить? Список украинских сетей для подсчета UA-IX надо локально закачивать для генерации rules.

Link to post
Share on other sites
Что-то не пойму, а чем колаколовский не устраивает??? http://www.colocall.net/ua/ Там ведь єто все отлично работает!

Там это все отлично работает. НО!

 

1. Относительно Колокола. Определяется конкретно UA-IX или нет. Да еще и с обновлением в 5-10 минут, что для домашней сети как правило плохо, потому как слишком точно. Реальна вполне ситуация, когда юзер получит от колокола ответ, что в данный момент адрес украинский, начнет качать, а биллинг сети ему трафик посчитает как мировой, потому что биллинг сети, если он не привязан прямо к BGP будет пользоваться "снимком" этого списка на конкретный момент времени (у меня например на 4 часа ночи). Кроме того есть ряд исключений, которые для Колокола не важны, а для сети/мелкого прова важны. Многие даже крупные провы трафик с адресами впн-провайдеров тарифицируют как мировой, а не как украинский. И обратная ситуация, трафик по реальным адресам внутри сети или провайдеров сети часто надо считать как внутрисетевой, а не Украинский.

2. Юзеры попадаются часто нешарящие. Причем абсолютно. На том же Колоколе введет 10.144.144.49, ему выдаст что это "не Украина", он заходить туда не будет по причине боязни что ему денег насчитает. А это адрес основного файл-сервера нашей сети, трафик с ним считается естественно внутрисетевым. Так что если в сети есть разделение трафика более сложное чем внутренняя сеть / внешняя сеть, то нужно иметь метод проверки адресов. Самый удобный - скрипт на сайте сети или сайте статистики.

Link to post
Share on other sites
Вот в том то и дело, нужны не IP проверенные а сети в целом ( типа 212.40.46.0/24 ) Если создать файл с переработанными сетями в отдельные АЙПИ то РНР будет над ним думать по 30 сек. Что не есть ХАРАШО. А юзверь должен ввести не АЙПИ а имя, типа local.com.ua и получить ответ "Сеть подключена к точке обмена трафиком". А если так как написал Foster то я бы и сам давно сделал и радовался.

ну так сделай, или сформулируй нормально :(

я для примера взял с сайта колоколла, чтоб не париться

а так можно в файл это все скачать и курочить как угодно

 

если тебе нужно чтоб имя вводил добавь еще одну строчку:

вместо:

if (!empty($zapros)){
$file=file("http://www.colocall.net/ua/",r);
$fst_pre=array_search("<PRE>\n",$file);

такое:

if (!empty($zapros)){
$zapros=gethostbyname($zapros);
$file=file("http://www.colocall.net/ua/",r);
$fst_pre=array_search("<PRE>\n",$file);

 

 

/24 - значит 256 адресов, т.е. последний байт.

/16 - * 256*256 - 2 последних байта

 

Алгоритм должен быть приблизительно такой:

Сравнивание побайтно перввых байтов сетей и адреса, потом взависимости от /24, /16 и т.д. проверять, входит ли остальная часть адреса в диапазон сети.

а как насчет остальных цифирек? ну там например 12,19,21...

Link to post
Share on other sites
а как насчет остальных цифирек? ну там например 12,19,21...

Это все, не помню, как называется, кажется адресная логика или булева математика.

Тут нужно материал почитать на эту тему, чтоб понимать, что к чему.

Link to post
Share on other sites
Теперь займусь как раз скриптом для сайта, который будет пользователям все это дело проверять, какие адреса куда относятся. Как сделаю, обещаю выложить здесь для жаждущих.

В общем пока я раскачивался писать скрипт, у меня тут местный талант нашелся и все сделал :(. Так что качайте и пользуйтесь...

Link to post
Share on other sites

что-то у меня вот такая трабла:

 

Server error!
The server encountered an internal error and was unable to complete your request. 
Error message: 
Premature end of script headers: ipzones.cgi 
If you think this is a server error, please contact the webmaster 

Link to post
Share on other sites
что-то у меня вот такая трабла:

 

Server error!
The server encountered an internal error and was unable to complete your request. 
Error message: 
Premature end of script headers: ipzones.cgi 
If you think this is a server error, please contact the webmaster 

Народ! Во-первых, данный продукт не мой. Там есть координаты автора. Во-вторых, я надеялся что данный скрипт НУЖЕН людям, которые в состоянии самостоятельно разобраться почему выдается данная СТАНДАРТНАЯ для юниксов ошибка. В третьих, у меня скрипт прекрасно уже полдня работает, так что он однозначно работоспособен. То, что его инсталляция не рассчитана "на дурака", ну так и скрипт специфический... Сам автор спокойно программит под виндой, проверяет там же. При переносе на юникс делается вполне стандартный набор операций.

Link to post
Share on other sites
Вот только всеже хотелось на чистом РНР, не CGI.

"- И кофе в постель, пожалуйста!" :(

 

С такими "пожеланиями" я бы советовал взять в руки червонец, найти ближайшего веб-мастера, и он переделает за 10-15 минут имеющееся, в то, что хочется.

Link to post
Share on other sites
Народ! Во-первых, данный продукт не мой. Там есть координаты автора. Во-вторых, я надеялся что данный скрипт НУЖЕН людям, которые в состоянии самостоятельно разобраться почему выдается данная СТАНДАРТНАЯ для юниксов ошибка. В третьих, у меня скрипт прекрасно уже полдня работает, так что он однозначно работоспособен. То, что его инсталляция не рассчитана "на дурака", ну так и скрипт специфический... Сам автор спокойно программит под виндой, проверяет там же. При переносе на юникс делается вполне стандартный набор операций.

Простите. И обращался я не конкретно к Вам.

 

А зачем тогда нужен форум? Зачем тогда общение?

Если вы продвинуты во многом, не стоит обижать других. Не хотите помочь - не отвечайте. Попросту промолчите.

 

Возможно Вы таким родились? Или когда вы чему-то учились Вы не просили помощи? Тогда вопрос - что Вы делаете тут?

 

П.С. Не нада посылать на Яндекс, Гугл и т.п.

Link to post
Share on other sites
а как насчет остальных цифирек? ну там например 12,19,21...

Маска по новым правилам пишется побитовая, т.е. адрес можно представить не в байтном виде а в битном, 0/1

Т.е. 10.0.0.0/8 это

0000 1010 0000 0000 0000 0000 0000 0000

Это 8 бит ^ Это диапазон сети, т.е то что изменяется.

Если 12, то отсчитываем первых 12 бит

0000 0001 0000 0000 0000 0000 0000 0000

Это 12 бит ------^

Если 32 это 0 бит, т.е. один адрес

Link to post
Share on other sites
П.С. Не нада посылать на Яндекс, Гугл и т.п.

Если в сети есть необходимый тебе материал, то яндекс с гуглем тебе его сразу выдадут. Т.е. кто-то уже потратил свое время на то, чтобы решить твою проблему. Так зачем просить кого то тратить свое время ЕЩЁ РАЗ, когда для тебя уже все есть прямо сейчас?

Link to post
Share on other sites

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

А если не охота, то искать того, кто это сделает за тебя. Не важно на каких условиях...Но на шару много раз никто делать не будет.

Конфа для того, чтобы сдвинутся с места, когда ну стал и не знаешь что делать, совет кто даст, решение подскажет. А все делать за кого-то, это уже работа....

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...