1
2
3 """Transmission Control Protocol."""
4
5 import dpkt
6
7
8 TH_FIN = 0x01
9 TH_SYN = 0x02
10 TH_RST = 0x04
11 TH_PUSH = 0x08
12 TH_ACK = 0x10
13 TH_URG = 0x20
14 TH_ECE = 0x40
15 TH_CWR = 0x80
16
17 TCP_PORT_MAX = 65535
18 TCP_WIN_MAX = 65535
19
20 -class TCP(dpkt.Packet):
21 __hdr__ = (
22 ('sport', 'H', 0xdead),
23 ('dport', 'H', 0),
24 ('seq', 'I', 0xdeadbeefL),
25 ('ack', 'I', 0),
26 ('off_x2', 'B', ((5 << 4) | 0)),
27 ('flags', 'B', TH_SYN),
28 ('win', 'H', TCP_WIN_MAX),
29 ('sum', 'H', 0),
30 ('urp', 'H', 0)
31 )
32 opts = ''
33
36 off = property(_get_off, _set_off)
37
40
43
51
52
53 TCP_OPT_EOL = 0
54 TCP_OPT_NOP = 1
55 TCP_OPT_MSS = 2
56 TCP_OPT_WSCALE = 3
57 TCP_OPT_SACKOK = 4
58 TCP_OPT_SACK = 5
59 TCP_OPT_ECHO = 6
60 TCP_OPT_ECHOREPLY = 7
61 TCP_OPT_TIMESTAMP = 8
62 TCP_OPT_POCONN = 9
63 TCP_OPT_POSVC = 10
64 TCP_OPT_CC = 11
65 TCP_OPT_CCNEW = 12
66 TCP_OPT_CCECHO = 13
67 TCP_OPT_ALTSUM = 14
68 TCP_OPT_ALTSUMDATA = 15
69 TCP_OPT_SKEETER = 16
70 TCP_OPT_BUBBA = 17
71 TCP_OPT_TRAILSUM = 18
72 TCP_OPT_MD5 = 19
73 TCP_OPT_SCPS = 20
74 TCP_OPT_SNACK = 21
75 TCP_OPT_REC = 22
76 TCP_OPT_CORRUPT = 23
77 TCP_OPT_SNAP = 24
78 TCP_OPT_TCPCOMP = 26
79 TCP_OPT_MAX = 27
80
82 """Parse TCP option buffer into a list of (option, data) tuples."""
83 opts = []
84 while buf:
85 o = ord(buf[0])
86 if o > TCP_OPT_NOP:
87 try:
88 l = ord(buf[1])
89 d, buf = buf[2:l], buf[l:]
90 except ValueError:
91
92 opts.append(None)
93 break
94 else:
95 d, buf = '', buf[1:]
96 opts.append((o,d))
97 return opts
98