1
2
3 """Trivial File Transfer Protocol."""
4
5 import struct
6 import dpkt
7
8
9 OP_RRQ = 1
10 OP_WRQ = 2
11 OP_DATA = 3
12 OP_ACK = 4
13 OP_ERR = 5
14
15
16 EUNDEF = 0
17 ENOTFOUND = 1
18 EACCESS = 2
19 ENOSPACE = 3
20 EBADOP = 4
21 EBADID = 5
22 EEXISTS = 6
23 ENOUSER = 7
24
25 -class TFTP(dpkt.Packet):
26 __hdr__ = (('opcode', 'H', 1), )
27
29 dpkt.Packet.unpack(self, buf)
30 if self.opcode in (OP_RRQ, OP_WRQ):
31 l = self.data.split('\x00')
32 self.filename = l[0]
33 self.mode = l[1]
34 self.data = ''
35 elif self.opcode in (OP_DATA, OP_ACK):
36 self.block = struct.unpack('>H', self.data[:2])
37 self.data = self.data[2:]
38 elif self.opcode == OP_ERR:
39 self.errcode = struct.unpack('>H', self.data[:2])
40 self.errmsg = self.data[2:].split('\x00')[0]
41 self.data = ''
42
45
56