* Copying P4D2 Fall 2017 into P4D2 2018 East. * Updated P4D2_2018_East VM. Added vagrant URL workaround, cdrom to VM. Updated to latest commits of BMV2, p4c, PI. Known issue with p4runtime exercise. * Applied patch from @antoninbas in and updated solution
44 lines
1.1 KiB
Python
Executable File
44 lines
1.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
import sys
|
|
import struct
|
|
import os
|
|
|
|
from scapy.all import sniff, sendp, hexdump, get_if_list, get_if_hwaddr
|
|
from scapy.all import Packet, IPOption
|
|
from scapy.all import ShortField, IntField, LongField, BitField, FieldListField, FieldLenField
|
|
from scapy.all import IP, TCP, UDP, Raw
|
|
from scapy.layers.inet import _IPOption_HDR
|
|
from myTunnel_header import MyTunnel
|
|
|
|
def get_if():
|
|
ifs=get_if_list()
|
|
iface=None
|
|
for i in get_if_list():
|
|
if "eth0" in i:
|
|
iface=i
|
|
break;
|
|
if not iface:
|
|
print "Cannot find eth0 interface"
|
|
exit(1)
|
|
return iface
|
|
|
|
def handle_pkt(pkt):
|
|
if MyTunnel in pkt or (TCP in pkt and pkt[TCP].dport == 1234):
|
|
print "got a packet"
|
|
pkt.show2()
|
|
# hexdump(pkt)
|
|
# print "len(pkt) = ", len(pkt)
|
|
sys.stdout.flush()
|
|
|
|
|
|
def main():
|
|
ifaces = filter(lambda i: 'eth' in i, os.listdir('/sys/class/net/'))
|
|
iface = ifaces[0]
|
|
print "sniffing on %s" % iface
|
|
sys.stdout.flush()
|
|
sniff(iface = iface,
|
|
prn = lambda x: handle_pkt(x))
|
|
|
|
if __name__ == '__main__':
|
|
main()
|