/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
IP til decimal
Fra : Flemming Hansen


Dato : 30-07-03 22:25

Hejsa,

Jeg fik at vide at IP numre også kan udtrykkes som decimal tal. Findes der
en perl funktion der kan gøre det?



 
 
Lars Kim Lund (30-07-2003)
Kommentar
Fra : Lars Kim Lund


Dato : 30-07-03 23:30

"Flemming Hansen" <dsl34257@vip.cybercity.dk> wrote:

>Jeg fik at vide at IP numre også kan udtrykkes som decimal tal. Findes der
>en perl funktion der kan gøre det?

Det er der sikkert - men ellers er det ingen videnskab at lave en selv
hvis man kan matematikken bag.

Tænk på at hver oktet er 8 bit. 2^8 = 256. Så handler det blot om at
gange ud og lægge sammen

dec_ip = okt1 * 256^0 + okt2 * 256^1 + okt3 * 256^2 + okt4 * 256^3

eller måske mere forståeligt:

dec_ip = okt1 * 2^0 + okt2 * 2^8 + okt3 * 2^16 + okt4 * 2^24

--
Lars Kim Lund
http://www.net-faq.dk/

Flemming Frandsen (31-07-2003)
Kommentar
Fra : Flemming Frandsen


Dato : 31-07-03 10:16

Lars Kim Lund wrote:
> dec_ip = okt1 * 2^0 + okt2 * 2^8 + okt3 * 2^16 + okt4 * 2^24

Så skal det lige siges at ^ betyder xor i perl, så når du skriver om fra
pseudokode til perl så er den operator du skal bruge **.

I perl vil koden nok ligne det her:

my ($o1,$o2,$o3,$o4) = split /\./, $ip;

my $decip =
$o1 * 2**0 +
$o2 * 2**8 +
$o3 * 2**16 +
$o4 * 2**24;

Jeg har ikke testet det og det kan godt ske at rækkefølgen af bytes er
omvendt.

--
Regards Flemming Frandsen - http://dion.swamp.dk
PartyTicket.Net co founder & Yet Another Perl Hacker


Andreas Plesner Jaco~ (31-07-2003)
Kommentar
Fra : Andreas Plesner Jaco~


Dato : 31-07-03 11:21

In article <r85Wa.41985$Kb2.1821438@news010.worldonline.dk>, Flemming Frandsen wrote:

> $o1 * 2**0 +
> $o2 * 2**8 +
> $o3 * 2**16 +
> $o4 * 2**24;

Eller shiftleft:

($o1 << 24) + ($o2 << 16) + ($o3 << 8) + $o4;

> Jeg har ikke testet det og det kan godt ske at rækkefølgen af bytes er
> omvendt.

Yep - rækkefølgen er omvendt. Du kan nemt teste det ved at tage
outputtet fra din funktion og kaste det efter ping eller et andet
program der laver en inet_aton:

$ ping 3560325122
PING 3560325122 (212.54.64.2): 56 data bytes

--
Andreas Plesner Jacobsen | The world will end in 5 minutes. Please log out.

Lars Kim Lund (31-07-2003)
Kommentar
Fra : Lars Kim Lund


Dato : 31-07-03 17:10

Andreas Plesner Jacobsen <apj@daarligstil.dk> wrote:

>Eller shiftleft:
>
>($o1 << 24) + ($o2 << 16) + ($o3 << 8) + $o4;

Ah - det minder mig om gode gamle dage med saftevand, chokolade og
assembler-programmering.

Ikke at jeg nogen sinde blev ret god til det, men jeg kan da huske jeg
syntes det var ret skægt at lave matematiske operationer ved at shifte
bits.

FUT til mere relevant gruppe.

--
Lars Kim Lund
http://www.net-faq.dk/

Morten Guldager (31-07-2003)
Kommentar
Fra : Morten Guldager


Dato : 31-07-03 17:32

Wed, 30 Jul 2003 at 21:24 GMT Flemming Hansen wrote
>
> Jeg fik at vide at IP numre også kan udtrykkes som decimal tal. Findes der
> en perl funktion der kan gøre det?

Jeg gør normalt sådan her:

sub IPtoINT
{
return unpack 'N', pack 'C4', split /\./, $_[0];
}


/Morten

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste