Несовсем про пхп но все же.

FlaMen

Новичок
Несовсем про пхп но все же.

Есть файл ip список русских сетей http://noc.masterhost.ru/allrunet/runet

вот фрагмент:
----------------
193.110.4.0/23
193.111.10.0/23
-----------------

Как он расшифровывается?
с 193.110.4.0 по 193.110.4.23
с 193.111.10.0 по 193.111.10.23
итд... ?

если так то почему при запросе 193.110.4.1
http://www.webnames.ru/scripts/whois.pl?domain_name=193.110.4.1&x=19&y=8
выдает
inetnum: 193.110.4.0 - 193.110.5.255


Спасибо!
 

SiMM

Новичок
PHP:
$ip = '193.110.4.0';
$n = 23;
echo $ip.' - '.long2ip(ip2long($ip) | ~(0xFFFFFFFF<<(32-$n)));
 

FlaMen

Новичок
SiMM Спасибо...

вопросик
из 193.110.4.0/23
получилось
193.110.4.0 - 193.110.5.255

Мне нужно что бы скрипт определял ip на пренадлежность к списку русских ip.
Брайть файл и конвертировать каждую строку а потом сравнивать получится явно долго...


Если загнать все руские ip в базу mysql по полям

193.110.4.0 - 193.110.5.255

ip1 | ip2 | ip3
193100 | 004000 | 005255

после данный ip разбивать например
193.110.5.255

$ip1='193110';
$ip2=''5255";

и делать поиск
SELECT * FROM tbl_ip WHERE ip1='$ip' and ip2<'$ip2' and ip2>'$ip2'


Как оцениваеш даное решение?
Запросов будет по 100к в сутки. нужно что была минимальаня нагрука...
 

mani13

Новичок
зачем?
чем не нравится:
ip_start = ip2long($ip);
ip_end = ip2long($ip) | ~(0xFFFFFFFF<<(32-$n));


SELECT * FROM tbl_ip WHERE '$someip' BETWEEN ip_start AND ip_end
 

SiMM

Новичок
> Как оцениваеш даное решение?
Отвратительно. В базе хранишь 4х байтный INT, вместо того, чтобы работать с IP работаешь с его представлением в виде целого числа. И никаких ip3 не нужно - достаточно начала и конца диапазона. Похожий подход используется, к примеру, в этой базе этим скриптом
PS: кстати, будь готов к проблемам с signed int - где-то когда-то решал их при помощи приведения к float.
 

confguru

ExAdmin
Команда форума
FlaMen
Я уже сделал :)
сделай папку где имя папки первое цифра IP
в самой папке лежат уже сами файлики где
имя первая цифра IP и вторая цифра IP
внутри файликов сам диапазон
этих IP

ну и есть функция из 10 строчек in_range($ip,$mask)
не знаю как по скорости - вроде никто не жаловался..
 

FlaMen

Новичок
admin мде... ну нафиг, так извращаться :)


П/С никто не подскажет где можно взять диапазон ip Санкт-Питербурга , или это секретная информация?, замучился искать :) [email protected] / icq 67396
В свою очередь могу дать москву, украину.

-~{}~ 22.02.05 22:02:

нашел базу ip
всех городов россии он в формате
начало диапазон | конец | id города
3653633600 3653633663 33
3653633616 3653633623 42

Как обычный ip привети к этому формату ???
 

SelenIT

IT-лунатик :)
[m]ip2long[/m] (внимательно смотреть примечания и примеры)

если база MySQL, можно прямо в ней - INET_ATON()
 
Сверху