|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 26 Mar 2002 17:34:56 To : Stephen V Avdeyev Subject : Re: IP и маски -------------------------------------------------------------------------------- Stephen V Avdeyev wrote: > Добрый день/вечер, Proext! > > Tuesday March 19 2002 12:10, PROext wrote to All: > > P> Есть адрес в формате address/masklen, например: > P> 195.230.128.0/19 > > P> Как наиболее быстро определить, попадает ли мой адрес (например, > P> 195.230.131.18) в эту область? > > > sub isinnetwork () { Согласно данному прототипу эта функция не имеет параметров. > my ($an_ip, $a_net) = @_; А тут выясняется, что имеет. И даже два. Как же ее вызывали? Конечно через ж..., ой, то есть через &. > if ($a_net !~ /\//) { > return ($an_ip eq $a_net); В принципе решение жизнеспособно... Hо, 127.0.0.1, скажем, не будет равен 127.000.000.001. А должен бы. Да и отсутствие указанной маски для сети стоит расценивать скорее как принадлежность к умолчальной подсети (A, B или С, в зависимости от адреса сети). > } > my ($n_addr, $sfx) = split /\//, $a_net; > $sfx = 32 unless defined $sfx; А откуда возьмется undefined-то, если соответствие regexp-у уже прошло? > my $imask = 0xFFFFFFFF ^ ((1 << (32 - $sfx)) -1); > my $p_ip = unpack('N',pack('C4', split /\./,$an_ip)); > my $p_net = unpack('N',pack('C4', split /\./,$n_addr)); > return ($p_ip & $imask) == ($p_net & $imask); > } Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/528479e187cd.html, оценка из 5, голосов 10
|