URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4507
[ Назад ]

Исходное сообщение
"аналог функции long2ip"

Отправлено DenisK , 26-Июл-05 10:32 
На php есть функция long2ip для преобразования десятичного формата IP адреса в 4-х байтный.
Есть ли такая функция на perl?

Содержание

Сообщения в этом обсуждении
"аналог функции long2ip"
Отправлено butcher , 26-Июл-05 10:42 
>На php есть функция long2ip для преобразования десятичного формата IP адреса в
>4-х байтный.
>Есть ли такая функция на perl?

inet_ntoa


"аналог функции long2ip"
Отправлено DenisK , 26-Июл-05 10:57 
>>На 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.


"аналог функции long2ip"
Отправлено Simps , 26-Июл-05 11:04 
>>>На 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";


"аналог функции long2ip"
Отправлено butcher , 26-Июл-05 11:07 
>результат:
>Bad arg length for Socket::inet_ntoa, length is 9, should be 4 at
>./bill.pl line 3.

Используйте функцию pack


"аналог функции long2ip"
Отправлено rWizard , 26-Июл-05 11:10 
Для преобразования в числовой формат
(не знаю как его назвать, но его использует mysqld [кстати там есть встроенная возможность преобразования])
встроенных функций нет, но есть:

https://www.opennet.ru/openforum/vsluhforumID9/4179.html#16


"аналог функции long2ip"
Отправлено chip , 26-Июл-05 18:41 
>$ip = inet_ntoa (174073896);

$ip = inet_ntoa(pack("L", 174073896));


"аналог функции long2ip"
Отправлено ihor , 26-Июл-05 11:25 
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));


"аналог функции long2ip"
Отправлено Виталий email vp7mail.ru , 23-Янв-07 16:20 
Всё просто как 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");