Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-03-23 18:08:57

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Perl, obliczanie parametrów IPv6?

Witam

jest sobie taki banalnie prosty przyklad:

Kod:

#!/usr/bin/perl

  use Net::IP;
  my $ip = new Net::IP ('192.168.1.0/24') or die (Net::IP::Error());
  print ("IP  : ".$ip->ip()."\n");
  print ("Sho : ".$ip->short()."\n");
  print ("Bin : ".$ip->binip()."\n");
  print ("Int : ".$ip->intip()."\n");
  print ("Mask: ".$ip->mask()."\n");
  print ("Last: ".$ip->last_ip()."\n");
  print ("Len : ".$ip->prefixlen()."\n");
  print ("Size: ".$ip->size()."\n");
  print ("Type: ".$ip->iptype()."\n");
  print ("Rev:  ".$ip->reverse_ip()."\n");

I pieknie wszystko liczy w IPv4.

Ale kiedy dam mu adres IPv6 - celem osiągnięcia takich samych informacji, sprawa się nieco komplikuje, przy adresie IPv6:

Kod:

#!/usr/bin/perl

  use Net::IP;
  my $ip = new Net::IP ('2001:470:6e:d4::2/64') or die (Net::IP::Error());
  print ("IP  : ".$ip->ip()."\n");
  print ("Sho : ".$ip->short()."\n");
  print ("Bin : ".$ip->binip()."\n");
  print ("Int : ".$ip->intip()."\n");
  print ("Mask: ".$ip->mask()."\n");
  print ("Last: ".$ip->last_ip()."\n");
  print ("Len : ".$ip->prefixlen()."\n");
  print ("Size: ".$ip->size()."\n");
  print ("Type: ".$ip->iptype()."\n");
  print ("Rev:  ".$ip->reverse_ip()."\n");

Daje wynik:

Kod:

./adres
Invalid prefix 00100000000000010000010001110000000000000110111000000000110101000000000000000000000000000000000000000000000000000000000000000010/64 at ./adres line 5.

przestudiowałem cały opis modułu Net::IP, i wszystko wyglada niby prawidłowo, a rezultat niestety jest nieprawidłowy.
I nawet nie wiem,czy to błąd w kodzie, czy moduł perla ma uczulenie na maski IPv6.
Bo kiedy wpiszę sam adres IP Ipv6 bez maski, to też pokazuje prawidłowo,a wykłada się na masce.

Kod:

./adres
IP  : 2001:0470:006e:00d4:0000:0000:0000:0002
Sho : 2001:470:6e:d4::2
Bin : 00100000000000010000010001110000000000000110111000000000110101000000000000000000000000000000000000000000000000000000000000000010
Int : 42540578165301444715705215526870450178
Mask: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Last: 2001:0470:006e:00d4:0000:0000:0000:0002
Len : 128
Size: 1
Type: GLOBAL-UNICAST
Rev:  2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.d.0.0.e.6.0.0.0.7.4.0.1.0.0.2.ip6.arpa.

Sam adres użyty do testów jest całkowicie prawidłowy i działający:

Kod:

sixbone   Link encap:IPv6-in-IPv4  
          inet6 addr: fe80::b2d7:cc51/128 Scope:Link
          inet6 addr: 2001:470:6e:d4::2/64 Scope:Global
          UP POINTOPOINT RUNNING NOARP  MTU:1280  Metric:1
          RX packets:20125 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13422 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:23233366 (22.1 MiB)  TX bytes:1488476 (1.4 MiB)

Jak to poprawić?

Pozdrawiam
;-)

Ostatnio edytowany przez Jacekalex (2012-03-23 18:23:16)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)