На php есть функция long2ip для преобразования десятичного формата IP адреса в 4-х байтный.
Есть ли такая функция на perl?
>На php есть функция long2ip для преобразования десятичного формата IP адреса в
>4-х байтный.
>Есть ли такая функция на perl?inet_ntoa
>>На php есть функция long2ip для преобразования десятичного формата IP адреса в
>>4-х байтный.
>>Есть ли такая функция на perl?
>
>inet_ntoaона не пашет
=============
#!/usr/bin/perl
use Socket;
$ip = inet_ntoa (174073896);
print $ip;
================
результат:
Bad arg length for Socket::inet_ntoa, length is 9, should be 4 at ./bill.pl line 3.
>>>На php есть функция long2ip для преобразования десятичного формата IP адреса в
>>>4-х байтный.
>>>Есть ли такая функция на perl?
>>
>>inet_ntoa
>
>она не пашет
>=============
>#!/usr/bin/perl
>use Socket;
>$ip = inet_ntoa (174073896);
>print $ip;
>================
>результат:
>Bad arg length for Socket::inet_ntoa, length is 9, should be 4 at
>./bill.pl line 3.Все работает ...
#!/usr/bin/perl
use Socket;
$ipl = inet_aton("192.168.0.2");
$ip = inet_ntoa ($ipl);
print "$ip\n";
>результат:
>Bad arg length for Socket::inet_ntoa, length is 9, should be 4 at
>./bill.pl line 3.Используйте функцию pack
Для преобразования в числовой формат
(не знаю как его назвать, но его использует mysqld [кстати там есть встроенная возможность преобразования])
встроенных функций нет, но есть:
>$ip = inet_ntoa (174073896);$ip = inet_ntoa(pack("L", 174073896));
sub long2ip {
my($num) = @_;
my(@res, $n);
while (scalar(@res) < 4) {
$n = $num % 1000;
if ($n < 256) {
unshift(@res, $n);
$num = $num / 1000;
} else {
unshift(@res, $num % 100);
$num = $num / 100;
} # if
} # while
return \@res;
} # sub
# =============================================
sub printIP {
my($ip) = @_;
print(join('.', @{$ip}), "\n");
} # sub
# =============================================
# test
printIP(long2ip(174073896));
printIP(long2ip(0));
printIP(long2ip(211));
Всё просто как 5 копеек:sub ip2long {
return unpack("N",inet_aton(shift));
}sub long2ip {
return inet_ntoa(pack("N",shift));
}Используется в моих скриптах, проверено на калькуляторе - великолепно работает :)
p.s. используется к примеру так:
print ip2long("213.18.6.5");