I am confused

This commit is contained in:
Nico Schottelius 2019-03-04 17:50:38 +01:00
parent 46b0f16f0d
commit 440782c569
1 changed files with 37 additions and 10 deletions

View File

@ -8,7 +8,7 @@ from p4utils.utils.sswitch_API import SimpleSwitchAPI
from scapy.all import sniff, get_if_list, Ether, get_if_hwaddr, sendp
from scapy.all import IP, Raw, IPv6, TCP, TCP_client
from scapy.all import Ether, sniff, Packet, BitField
from scapy.all import Ether, sniff, Packet, BitField, IntEnumField, ShortField
from scapy.all import ICMPv6ND_NS
import sys
@ -24,12 +24,18 @@ logging.basicConfig()
log = logging.getLogger("main")
cpu_fields = {
1: 'ICMP6_NS',
2: 'ICMP6_GENERAL',
3: 'DEBUG'
}
class CpuHeader(Packet):
name = 'CpuPacket'
fields_desc = [
BitField('task',0,8),
BitField('ingress_port', 0, 16)
IntEnumField('task', 1, cpu_fields ),
ShortField('ingress_port', 0)
]
@ -38,11 +44,8 @@ class L2Controller(object):
# Command line mapping
self.modes = ['base', 'router']
self.task = {
'ICMP6_NS': 1,
'ICMP6_GENERAL': 2,
'DEBUG': 3
}
# Reverse maps the cpu header
self.task = dict(reversed(item) for item in cpu_fields.items())
self.info={}
self.info['ndp_multicast'] = ipaddress.ip_network("ff02::1:ff00:0/104")
@ -227,6 +230,7 @@ class L2Controller(object):
packet = Ether(str(pkg))
self.debug_print_pkg(pkg)
print("p={}".format(pkg.__repr__()))
if packet.type == 0x0800:
pass
@ -235,8 +239,31 @@ class L2Controller(object):
elif packet.type == 0x4242:
print("Special handling needed")
cpu_header = CpuHeader(packet.payload)
print("cpu = {}".format(cpu_header.__repr__()))
print("orig = {}".format(pkg))
print("cpu = {} {}".format(cpu_header.__repr__(), len(cpu_header)))
ether_part = pkg[Ether]
# read from cpu header
ether_part.type = 0x86dd
ether_orig = Ether(src=packet.src, dst=packet.dst, type=0x86dd)
# used to find correct offset = 3
# for i in range(1, 32):
# content_orig = packet.load[i:]
# try:
# orig_packet = ether_orig / IPv6(content_orig)
# print("{}: {}".format(i, orig_packet.__repr__()))
# except Exception as e:
# pass
orig_packet = ether_orig / IPv6(packet.load[3:])
self.debug_print_pkg(orig_packet)
print("o={}".format(orig_packet.__repr__()))
else:
print("Broken pkg: {}".format(pkg.__repr__()))
return