summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2018-07-12 18:06:54 +0200
committerPeter Wu <peter@lekensteyn.nl>2018-07-12 18:06:54 +0200
commit76be49af00f2895d8a4de43219a24cf0abd77e55 (patch)
tree29d38b2d7547fff0b3bee3d10715c4cba2c164ae
parent4ecf9d858b49e76d8a9c29df01ce1bd523ae6704 (diff)
downloadwireshark-notes-76be49af00f2895d8a4de43219a24cf0abd77e55.tar.gz
crafted-pkt/retransmit-overlap.py: test for bug 13523
Used for crafting the capture in https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=13523#c1
-rwxr-xr-xcrafted-pkt/retransmit-overlap.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/crafted-pkt/retransmit-overlap.py b/crafted-pkt/retransmit-overlap.py
new file mode 100755
index 0000000..31fcfc5
--- /dev/null
+++ b/crafted-pkt/retransmit-overlap.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+import argparse
+
+from scapy.all import *
+
+parser = argparse.ArgumentParser()
+parser.add_argument("-w", dest="output_file", required=True,
+ help="Output pcap file")
+args = parser.parse_args()
+
+
+pkttime = 0
+
+
+def tcp(data=b'', datalen=0, seq=None, rexmit=False):
+ assert len(data) == datalen
+ global pkttime
+ relseq = seq
+ seq += 4096
+ ip = IP(src='10.0.0.2', dst='10.0.0.1')
+ pkt = ip/TCP(flags='A', sport=32323, dport=25, ack=1024, seq=seq)/data
+ if rexmit:
+ pkttime += .1
+ else:
+ pkttime += .01
+ pkt.time = pkttime
+ return pkt
+
+
+pkts = [
+ tcp(seq=0, data=b'DATA\r\n', datalen=6),
+ tcp(seq=6, data=b'To: <root@example.com>\r\n\r\n', datalen=26),
+ tcp(seq=32, data=b'1:segment that is fully rexmit.\n', datalen=32),
+ tcp(seq=32, data=b'1:segment that is fully rexmit.\n'+b'2', datalen=33, rexmit=True),
+ tcp(seq=64, data=b'2:first char (2) part of rexmit\n', datalen=32, rexmit=True),
+ tcp(seq=96, data=b"3:line that isn't retransmitted\n", datalen=32),
+ tcp(seq=128, data=b"4:retransmission after this:XYZ\n", datalen=32),
+ tcp(seq=160-4, data=b"XYZ\n"+b"5:new part after retransmission\n", datalen=4+32, rexmit=True),
+ tcp(seq=192, data=b"6:FINAL LINE, NOT RETRANSMITTED\n", datalen=32),
+ tcp(seq=224, data=b'\r\n.\r\n', datalen=5),
+]
+
+wrpcap(args.output_file, pkts)