rh0_empty.py revision 1.1
1#!/usr/local/bin/python2.7
2# send a ping6 packet with routing header type 0
3# the address list is empty
4# we expect an echo reply, as there are no more hops
5
6import os
7from addr import *
8from scapy.all import *
9
10pid=os.getpid()
11payload="ABCDEFGHIJKLMNOP"
12packet=IPv6(src=SRC_OUT6, dst=DST_IN6)/\
13    IPv6ExtHdrRouting(addresses=[])/\
14    ICMPv6EchoRequest(id=pid, data=payload)
15eth=Ether(src=SRC_MAC, dst=DST_MAC)/packet
16
17if os.fork() == 0:
18	time.sleep(1)
19	sendp(eth, iface=SRC_IF)
20	os._exit(0)
21
22ans=sniff(iface=SRC_IF, timeout=3, filter=
23    "ip6 and dst "+SRC_OUT6+" and icmp6")
24for a in ans:
25	if a and a.type == scapy.layers.dot11.ETHER_TYPES.IPv6 and \
26	    ipv6nh[a.payload.nh] == 'ICMPv6' and \
27	    icmp6types[a.payload.payload.type] == 'Echo Reply':
28		reply=a.payload.payload
29		id=reply.id
30		print "id=%#x" % (id)
31		if id != pid:
32			print "WRONG ECHO REPLY ID"
33			exit(2)
34		data=reply.data
35		print "payload=%s" % (data)
36		if data != payload:
37			print "WRONG PAYLOAD"
38			exit(2)
39		exit(0)
40print "NO ICMP6 ECHO REPLY"
41exit(1)
42