Comments 22
Жаль только перловиков маловато ;) Да и те, имхо, по старинке работают: ip & mask == subnet :)
UFO just landed and posted this here
Иногда так влом…
Да главное запомнить простенький регексп и всё наладится ;) Это, так сказать, аналог aton()
$addr =~ s/(\d+)\.(\d+)\.(\d+)\.(\d+)/($1
$addr =~ s/(\d+)\.(\d+)\.(\d+)\.(\d+)/($1
блин, парсер — лох :(
$addr =~ s/(\d+)\.(\d+)\.(\d+)\.(\d+)/($1<<24)+($2<<16)+($3<<8)+$4/e;
$addr =~ s/(\d+)\.(\d+)\.(\d+)\.(\d+)/($1<<24)+($2<<16)+($3<<8)+$4/e;
UFO just landed and posted this here
в контексте тегов не бывает последовательности << либо >>, парсер легко это может отслеживать, и нормальные парсеры так и делают, заменяя такие случаи автоматически. Потому я даже как-то не задумываюсь в таких ситуациях. Вот вам пример, что бы вы меньше «умничали» :)
perl -MHTML::Scrubber -e "$html=q[<h1>Simple << test</h1>]; $s=HTML::Scrubber->new( allow=> [] ); print $s->scrub($html);"
Посмотрите результат и убедитесь.
perl -MHTML::Scrubber -e "$html=q[<h1>Simple << test</h1>]; $s=HTML::Scrubber->new( allow=> [] ); print $s->scrub($html);"
Посмотрите результат и убедитесь.
для ип 130.244.255.255 (теле2)
в 32 битной системе такой регэксп будет выдавать
-2097872897
в 32 битной системе такой регэксп будет выдавать
-2097872897
Да ладно :)
Вот пажалста
$ cat 1.pl
#!/usr/bin/perl -w
my $ip = '130.244.255.255';
$ip =~ s/(\d+)\.(\d+)\.(\d+)\.(\d+)/($1<<24)+($2<<16)+($3<<8)+$4/e;
print sprintf("%u, 0x%X\n", $ip, $ip);
$ ./1.pl
2197094399, 0x82F4FFFF
Да и какая разница signed или unsigned число на экране? Биты то установлены в нормальном виде и это главное.
Вот пажалста
$ cat 1.pl
#!/usr/bin/perl -w
my $ip = '130.244.255.255';
$ip =~ s/(\d+)\.(\d+)\.(\d+)\.(\d+)/($1<<24)+($2<<16)+($3<<8)+$4/e;
print sprintf("%u, 0x%X\n", $ip, $ip);
$ ./1.pl
2197094399, 0x82F4FFFF
Да и какая разница signed или unsigned число на экране? Биты то установлены в нормальном виде и это главное.
php-программисты еще ленивее чем делфисты…
который очень эффективно решает данную проблему, метод основан на Patricia Tree.
Вы хотите сказать что оно работает быстрее операции AND? o_O
оно не только быстрее, но еще и удобнее при больших объемах информации.
Ой, молодой человек, негоже врать ;) Вы хотя бы внутрь заглядывали? Тесты писали? Сравнивали? А ведь еще подобные модули, коих валом на CPAN.
Вот вам исходничики, извольте разобраться и протестировать:
cpan.uwinnipeg.ca/htdocs/Net-Patricia/Net/Patricia.pm.html
Посмотрите, какой там оверхед везде, даже на этапе add_string(), не говоря уже про остальное. В функциях использованы те же стандартные функции, например, inet_aton(), применяются те же самые побитовые операции. Но с диким оверхедом.
Откуда в таком случае будет быстрее?
Вот вам исходничики, извольте разобраться и протестировать:
cpan.uwinnipeg.ca/htdocs/Net-Patricia/Net/Patricia.pm.html
Посмотрите, какой там оверхед везде, даже на этапе add_string(), не говоря уже про остальное. В функциях использованы те же стандартные функции, например, inet_aton(), применяются те же самые побитовые операции. Но с диким оверхедом.
Откуда в таком случае будет быстрее?
И в дополнение:
search.cpan.org/search?dist=Net-Netmask
search.cpan.org/search?dist=Net-IP
search.cpan.org/search?dist=Net-IP-Match
search.cpan.org/search?dist=Net-IPv4Addr
search.cpan.org/search?dist=NetAddr-IP
И небольшое обсуждение:
www.opennet.ru/tips/info/206.shtml
Это так, для общего развития :) Это к тому, например, что Patricia отсутствует под Win32, а эти — есть.
search.cpan.org/search?dist=Net-Netmask
search.cpan.org/search?dist=Net-IP
search.cpan.org/search?dist=Net-IP-Match
search.cpan.org/search?dist=Net-IPv4Addr
search.cpan.org/search?dist=NetAddr-IP
И небольшое обсуждение:
www.opennet.ru/tips/info/206.shtml
Это так, для общего развития :) Это к тому, например, что Patricia отсутствует под Win32, а эти — есть.
Извините но операция and выполняется за один такт машинного времени. Операции перевода из строки в inet_addr являются posix функциями. На операции одной проверки оно быть не может. Оно может быть быстрее на стадии поиска относительно другой либы, да и то сомнительно.
дык там внутри и есть скорей всего AND, просто нада ж еще привести записи вида 192.168.0.0/24 к числовой форме и выполнить операции ;)
а как насчет Ipv6?
Sign up to leave a comment.
Проверка вхождения IP адреса в подсеть