Skip to content

cujoai/packet-sender

Repository files navigation

packet-sender

packet-sender is a command line interface for scapy, meant to enable the use of some of the scapy functionality without importing the library. This is achieved by encoding network packets as JSON strings e.g.

'[{"__type__":"Ether","__data__":{"dst":"94:83:c4:27:f0:2e","src":"fc:5c:ee:22:61:7e","type":2048}},{"__type__":"IP","__data__":{"ihl":5,"id":23243,"flags":2,"proto":1,"src":"192.168.8.117","dst":"1.1.1.1"}},{"__type__":"ICMP","__data__":{"id":6,"seq":1,"unused":{"__type__":"bytes","__data__":""}}},{"__type__":"Raw","__data__":{"load":{"__type__":"bytes","__data__":"c9oDZwAAAAB2hw4AAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc="}}}]'

Calling packet-sender in Python

packet-sender can be called by Python code using the subprocess module. Use the json-type-hints package to serialize the input to JSON strings and deserialize the JSON output. To facilitate this use case, packet-sender can encode scapy packet creation commands and pcap files as Python dictionaries for easy editing e.g.

packet-sender encode cmd "Ether(dst='ff:ff:ff:ff:ff:ff', src='6c:c7:ec:24:48:7f')/IP(src='0.0.0.0', dst='255.255.255.255')/UDP(sport=68, dport=67)/BOOTP(xid=RandInt(), flags=32768, chaddr=b'l\xc7\xec$H\x7f')/DHCP(options=[('message-type', 'discover'), ('server_id', '192.168.1.254'), ('hostname', 'Galaxy-S9'), ('vendor_class_id', 'android-dhcp-10'), ('param_req_list', [1, 3, 6, 15, 26, 28, 51, 58, 59, 43]), 'end'])"
[
    {
        '__type__': 'Ether',
        '__data__': {'dst': 'ff:ff:ff:ff:ff:ff', 'src': '6c:c7:ec:24:48:7f'}
    },
    {
        '__type__': 'IP',
        '__data__': {'options': [], 'src': '0.0.0.0', 'dst': '255.255.255.255'}
    },
    {'__type__': 'UDP', '__data__': {'sport': 68, 'dport': 67}},
    {
        '__type__': 'BOOTP',
        '__data__': {
            'xid': {'__type__': 'RandInt'},
            'flags': 32768,
            'chaddr': b'l\xc7\xec\x7f'
        }
    },
    {
        '__type__': 'DHCP',
        '__data__': {
            'options': [
                ('message-type', 'discover'),
                ('server_id', '192.168.1.254'),
                ('hostname', 'Galaxy-S9'),
                ('vendor_class_id', 'android-dhcp-10'),
                ('param_req_list', [1, 3, 6, 15, 26, 28, 51, 58, 59, 43]),
                'end'
            ]
        }
    }
]