#!/usr/bin/env python import argparse import sys import socket import random import struct from scapy.all import sendp, send, hexdump, get_if_list, get_if_hwaddr from scapy.all import Packet, IPOption from scapy.all import Ether, IP, UDP from scapy.all import IntField, FieldListField, FieldLenField, ShortField from scapy.layers.inet import _IPOption_HDR def get_if(): ifs=get_if_list() iface=None # "h1-eth0" 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 class IPOption_MRI(IPOption): name = "MRI" option = 31 fields_desc = [ _IPOption_HDR, FieldLenField("length", None, fmt="B", length_of="swids", adjust=lambda pkt,l:l+4), ShortField("count", 0), FieldListField("swids", [], IntField("", 0), length_from=lambda pkt:pkt.count*4) ] def main(): if len(sys.argv)<3: print 'pass 2 arguments: ""' exit(1) addr = socket.gethostbyname(sys.argv[1]) iface = get_if() pkt = Ether(src=get_if_hwaddr(iface), dst="ff:ff:ff:ff:ff:ff") / IP(dst=addr) / UDP(dport=4321, sport=1234) / sys.argv[2] #pkt = Ether(src=get_if_hwaddr(iface), dst="ff:ff:ff:ff:ff:ff") / IP(dst=addr, options = IPOption_MRI(count=2, swids=[3,4])) / UDP(dport=4321, sport=1234) / sys.argv[2] pkt.show2() #hexdump(pkt) sendp(pkt, iface=iface) if __name__ == '__main__': main()