IPv6

You are currently browsing the archive for the IPv6 category.

Håller på att kika lite på perl som jag inte kodat så mycket i tidigare. Skrev då ett script som expanderar en ipv6-adress som ju kan ha en variabel mängd 0:or, t.ex. är både ::1 och 0000:0000:0000:0000:0000:0000:0000:0001 en helt ok ipv6-adress som båda expanderar till samma sak.

#!/usr/bin/env perl
use strict;
use warnings;
sub count_groups { # See hown many groups we have
        die "Too many arguments for subroutine" if @_ < 1;
        die "Too few arguments for subroutine" if @_ > 1;
        my $address = shift;
        # Make sure we have just enough double colons and count them if it is all right
        my $colon_no =  () = $address =~ /::/g;
        die "Invalid ipv6 address" if $colon_no > 1;
        my $no =  1;
        $no += () = $address =~ /:/g;
        return $no;
}
# If we have one occurence of :: replace with correct amount of zeros and colons
sub expand_void {
        die "Too many arguments for subroutine" if @_ < 1;
        die "Too few arguments for subroutine" if @_ > 1;
        my $address = shift;
        my $no_colons = 8 - count_groups($address);
        my $insert = "0000:0000";
        for (my $i = 0; $i < $no_colons - 1; $i++) {
                $insert = $insert . ":0000"
        }
        $address =~ s/::/:$insert:/g;
        return $address;
}
# Fix a single group and padd with zeros
sub fix_group {
        die "Too many arguments for subroutine" if @_ < 1;
        die "Too few arguments for subroutine" if @_ > 1;
        my $group = shift;
        my $len = length($group);
        die "Group has too many digits" if $len > 4;
        while ($len < 4) {
                $group = "0$group";
                $len++;
        }
        # Make sure it is a valid hexnumber
        die "Group is not a hex number" if $group !~ /^[0-9a-fA-F]+$/;
        return $group;
}
# Loop all groups and fix them with fix_group
sub fix_groups {
        die "Too many arguments for subroutine" if @_ < 1;
        die "Too few arguments for subroutine" if @_ > 1;
        my $a = shift;
        my @groups = split(/:/, $a);
        my $address = "";
        foreach my $group (@groups) {
                $group = fix_group($group);
                $address = "$address$group:";
        }
        $address =~ s/:+$//;
        return $address;
}
# Now put it together
# Loop through stdin
while (<>) {
        chomp; # Remove newline
        my $addr = $_; # Store address
        if (count_groups($addr) != 8) {
                $addr = expand_void($addr);
        }
        $addr = fix_groups($addr);
        # Double check that we have enough groups one last time
        die "Not a valid ipv6 address" if count_groups($addr) != 8;
        # Lower case is preffered for ipv6 adresses
        print lc "$addr\n";
}
exit 0;

Kan användas t.ex. så här för att expandera dina egna ipv6-adresser: ip a | awk '/inet6/ {print $2}' |sed 's_/.*__' | ./address.pl

eller för att t.ex. bygga reverse pointers: echo [adress] | ./address.pl |rev |sed 's/://g'| sed 's/\(.\)/\1./g' | sed 's/$/ip6.arpa. IN PTR/'

Jag har roat mig med att utöva konsumentpåtryckning för att få lite action på IPv6 i Södertälje stadsnät:

-------- Original Message --------
Subject: IPv6 i Södertälje Stadsnät
Date: Sun, 27 Mar 2011 10:54:49 +0200
From: Micke Nordin
To: info@telge.se
Hej,
jag har varit i kontakt med min bredbandsleverantör Bahnhof angående
IPv6 och fått till svar att de inte har möjlighet att leverera IPv6 i
Södertälje Stadsnät på grund av att infrastrukturen saknas på eran sida.
Jag undrar därför hur tidsplanen för införande av IPv6 ser ut hos er och
hur ni jobbar med att kunna levera infrastruktur för IPv6.
/Micke Nordin

Ironiskt nog fick jag ett autosvar med en passande subjectrad:

-------- Original Message --------
Subject: Frånvaro: IPv6 i Södertälje Stadsnät
Date: Sun, 27 Mar 2011 10:55:34 +0200
From: Info (Telge) <info@telge.se>
To: Micke Nordin

Innan jag skickade mejl kollade jag givetvis runt på deras sajt efter information:

 

Jag tror att det dröjer innan det dyker upp IPv6 i Södertälje stadsnät…

 

Edit, nu har jag fått svar:

Nej Micke,
Vi har stöd för ipv6 i vår infrastruktur, men har inte produktiferat ipv6 för leverans i dagsläget. Hur och när vi kommer att göra detta tillsammans med våra tjänsteleverantörer finns idag ingen tidplan för. Det är tjänsteleverantörerna som bestämmer den tidpunkt de vill leverera ipv6 i Södertälje Stadsnät. Jag förmodar att det inte kommer att ta alltför lång tid då tilldelning ipaddreserna i ipv4 är slut på global nivå.
Mvh
Per

Som sagt, det dröjer nog, även om de sista /8-blocken nu delats ut.

Switch to our mobile site

Page optimized by WP Minify WordPress Plugin