netarch

Network Archaeology library for Python
git clone https://git.woozle.org/neale/netarch.git

netarch / examples
Neale Pickett  ·  2021-07-02

xmodem.py

 1#! /usr/bin/python3
 2
 3import netarch
 4
 5class XmodemPacket(netarch.Packet):
 6    def parse(self, data):
 7        datastream = netarch.Unpacker(data)
 8        self.opcode = datastream.uint8()
 9        self.payload = datastream.buf
10
11    def opcode_1(self):
12        "Xfer"
13        datastream = netarch.Unpacker(self.payload)
14        self["seq"] = datastream.uint8()
15        self["~seq"] = datastream.uint8()
16
17        assert self["seq"] == 255 - self["~seq"]
18        assert len(datastream.buf) == 0x81
19
20        self["checksum"] = datastream.uint8(pos=-1)
21        self.payload = datastream.buf
22
23    def opcode_4(self):
24        "EOT"
25
26    def opcode_6(self):
27        "ACK"
28
29    def opcode_21(self):
30        "Begin transmission?"
31
32class XmodemSession(netarch.Session):
33    Packet = XmodemPacket
34
35    def process(self, packet):
36        packet.show()
37
38        if packet.opcode == 21:
39            # Open a new file for output
40            self.out = self.open_out("data.bin")
41        elif packet.opcode == 1:
42            self.out.write(bytes(packet.payload))
43
44
45netarch.main(XmodemSession)