summaryrefslogtreecommitdiff
path: root/crafted-pkt/make-tcp.py
blob: 508bbb387d4235ae388daf2b53a9ae229e1273a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env python2
# Create a crafted TCP stream with errors
# Usage: make-tcp.py [output.pcap]

import sys
from scapy.all import *

pkts = []
def send(data, flags='A'):
    if pkts:
        last = pkts[-1][TCP]
        seqno = last.seq + len(last.payload)
    else:
        seqno = 100
    tcp = TCP(sport=32323, dport=80, flags=flags, seq=seqno)/data
    pkt = IP(dst='10.0.0.2',src='10.0.0.1') / tcp
    pkts.append(pkt)
    return pkt

# data for one side
lines = [
    'PUT / HTTP/1.1\r\n',       # 1
    'Content-Length: 6\r\n',    # 2
    '\r\n',                     # 3
    '1\n',                      # 4
    '2\n',                      # 5
    '3\n',                      # 6
]
for line in lines:
    send(line)
send('', flags='F')  # FIN

# Errorneous packets
numbers = [
    1,
    1, # Duplicate
    2,
    3,
    5, # out-of-order
    4, # out-of-order
    6,
    0, # FIN (last packet)
]

# normal packets
#numbers = range(1, len(pkts)+1)

pkts2 = [pkts[i-1] for i in numbers]

# Show packets and write to file
for pkt in pkts2:
    print(pkt.summary())
if len(sys.argv) > 1:
    wrpcap(sys.argv[1], pkts2)