1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use Net::Frame 1.09; 7use Net::Frame::Simple 1.05; 8use Net::Frame::Layer qw(:subs); 9use Net::Frame::Layer::ETH qw(:consts); 10use Net::Frame::Layer::IPv6 qw(:consts); 11use Net::Frame::Layer::IPv6::Routing; 12use Net::Frame::Layer::ICMPv6 qw(:consts); 13use Net::Frame::Layer::ICMPv6::Echo; 14 15# Get input 16print "What destination [ENTER for default]? "; 17my $dest = <STDIN>; 18chomp $dest; 19print "What hop1 [ENTER for default]? "; 20my $hop1 = <STDIN>; 21chomp $hop1; 22print "What hop2 [ENTER for default]? "; 23my $hop2 = <STDIN>; 24chomp $hop2; 25print "\n"; 26 27# Validate 28$dest = $dest || 'ipv6.google.com'; 29if (!($dest = getHostIpv6Addr($dest))) { return } 30$hop1 = $hop1 || '2001::1'; 31if (!($hop1 = getHostIpv6Addr($hop1))) { return } 32$hop2 = $hop2 || '2001::2'; 33if (!($hop2 = getHostIpv6Addr($hop2))) { return } 34 35# Create layers 36my $ether = Net::Frame::Layer::ETH->new( 37 type=>NF_ETH_TYPE_IPv6 38); 39my $ipv6 = Net::Frame::Layer::IPv6->new( 40 dst => $hop1, 41 nextHeader => NF_IPv6_PROTOCOL_IPv6ROUTING 42); 43my $route = Net::Frame::Layer::IPv6::Routing->new( 44 nextHeader => NF_IPv6_PROTOCOL_ICMPv6, 45 addresses => [ 46 $hop2, $dest 47 ], 48); 49my $icmp = Net::Frame::Layer::ICMPv6->new; 50my $echo = Net::Frame::Layer::ICMPv6::Echo->new( 51 payload=>'echo' 52); 53 54# Create packet 55my $packet = Net::Frame::Simple->new(layers=> 56 [ $ether, $ipv6, $route, $icmp, $echo ] 57); 58 59print $packet->print . "\n"; 60