|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alan Long 2:5030/1082.72 30 Apr 2002 02:59:52 To : Alexander Lozovoi Subject : Пpовеpка пpинадлежит ли IP подсети. -------------------------------------------------------------------------------- * Originally from Alexander Lozovoi (2:5030/1604.604) to All. AL> Hyжно сделать пpовеpкy пpинадлежит ли IP адpес подсети, может AL> кто-то такое твоpил? Смотря как у тебя предоставлена подсетка... Если это пара значений $ip_1 = '192.168.23.0'; $ip_2 = '192.168.23.255'; а требуется проверить принадлежит-ли $ip = '192.168.23.23'; этому диапазону, то: if( aton( $ip ) >= aton( $ip_1 ) and aton( $ip ) <= aton( $ip_2 ) ) { print "принадлежит\n"; } если у тебя предоставлено в виде адреса и сетки: $net = '192.168.23.0'; $mask = '255.255.255.0'' $ip = '192.168.23.23'; то: if( ( aton( $ip ) & aton( $mask ) ) == aton( $net ) ) { print "принадлежит\n"; } Если у тебя сеть задана в виде CIDR: ($net,$mask) = cidr_to_netmask( '192.168.23/24' ); $ip = '192.168.23.23'; то задача сводится к предидущей. Все в принципе упирается в функции преобразования строчек содержащих IP адреса в целые числа над которыми можно производить те или иные действия... Тут есть два пути - либо взять готовое (такой модуль есть, но я не помню его названия, посмотри по CPAN), либо изобретать велосипед, в таком случае простор для творчества огромен. Hачиная от: sub aton($) { # написанно прямо сейчас и возможно сдержит ошибки my $a = shift; my $n = 0; foreach ( split(/\./, $a ) ) { $n = ($n << 8) & $_; } return $n; } До написания своих XS модулей. AL> Alexander -- With best, Ъ-· Ъ Е-ЧLaі\і <alan@x-rays.eu.org> --- timEd/386 1.10+ * Origin: X - Rays Station (2:5030/1082.72) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/4581ccdd4ee0.html, оценка из 5, голосов 10
|