@@ -2291,7 +2291,25 @@ pcapngdefaults = BytesIO(base64.b64decode(b'Cg0NChwAAABNPCsaAQAAAP//////////HAAA
22912291= Read a pcap file
22922292pktpcap = rdpcap(pcapfile)
22932293
2294- = Preserve complete captures when the final gzip CRC is invalid
2294+ = Read a pcapng file
2295+ pktpcapng = rdpcap(pcapngfile)
2296+ assert pktpcapng[0].time == 1454163407.666223
2297+
2298+ = Read a pcap file with nanosecond precision
2299+ pktpcapnano = rdpcap(pcapnanofile)
2300+ assert pktpcapnano[0].time == 1454163407.666223049
2301+
2302+ = Read a pcapng file with nanosecond precision and default tsresol
2303+ pktpcapngdefaults = rdpcap(pcapngdefaults)
2304+ assert pktpcapngdefaults[0].time == 1575115986.114775512
2305+ assert Ether in pktpcapngdefaults[0]
2306+
2307+ = Read a pcapng with little-endian SHB
2308+ pktcapng = sniff(offline=scapy_path("/test/pcaps/macos.pcapng.gz"))
2309+ assert len(pktcapng) != 0
2310+
2311+ = Read a pcap - final gzip CRC is invalid
2312+ ~ needs_py38plus
22952313
22962314import gzip
22972315import struct
@@ -2311,22 +2329,24 @@ with open(badgzfile, "wb") as stream:
23112329assert len(rdpcap(badgzfile)) == 1
23122330assert len(rdpcap(BytesIO(goodgzpcap))) == 1
23132331
2314- = Read a pcapng file
2315- pktpcapng = rdpcap(pcapngfile)
2316- assert pktpcapng[0].time == 1454163407.666223
2317-
2318- = Read a pcap file with nanosecond precision
2319- pktpcapnano = rdpcap(pcapnanofile)
2320- assert pktpcapnano[0].time == 1454163407.666223049
2332+ = Read a pcap - gzip capture from a named nonseekable stream
2333+ ~ needs_py38plus
23212334
2322- = Read a pcapng file with nanosecond precision and default tsresol
2323- pktpcapngdefaults = rdpcap(pcapngdefaults)
2324- assert pktpcapngdefaults[0].time == 1575115986.114775512
2325- assert Ether in pktpcapngdefaults[0]
2335+ import gzip
2336+ import os
2337+ import struct
2338+ from unittest.mock import patch
23262339
2327- = Read a pcapng with little-endian SHB
2328- pktcapng = sniff(offline=scapy_path("/test/pcaps/macos.pcapng.gz"))
2329- assert len(pktcapng) != 0
2340+ frame = bytes(Ether(src="00:00:00:00:00:01", dst="00:00:00:00:00:02"))
2341+ capture = struct.pack("<IHHiIII", 0xa1b2c3d4, 2, 4, 0, 0, 0xffff, 1)
2342+ capture += struct.pack("<IIII", 0, 0, len(frame), len(frame)) + frame
2343+ capture = gzip.compress(capture, mtime=0)
2344+ read_fd, write_fd = os.pipe()
2345+ assert os.write(write_fd, capture) == len(capture)
2346+ os.close(write_fd)
2347+ stream = os.fdopen(read_fd, "rb")
2348+ with patch("builtins.open", return_value=stream):
2349+ assert len(rdpcap("capture.pcap.gz")) == 1
23302350
23312351= Write a pcapng
23322352
@@ -5399,21 +5419,3 @@ c2 = CLI2(cli=False)
53995419
54005420assert c1.shares() == 1
54015421assert c2.shares() == 2
5402-
5403- = Read a gzip capture from a named nonseekable stream
5404-
5405- import gzip
5406- import os
5407- import struct
5408- from unittest.mock import patch
5409-
5410- frame = bytes(Ether(src="00:00:00:00:00:01", dst="00:00:00:00:00:02"))
5411- capture = struct.pack("<IHHiIII", 0xa1b2c3d4, 2, 4, 0, 0, 0xffff, 1)
5412- capture += struct.pack("<IIII", 0, 0, len(frame), len(frame)) + frame
5413- capture = gzip.compress(capture, mtime=0)
5414- read_fd, write_fd = os.pipe()
5415- assert os.write(write_fd, capture) == len(capture)
5416- os.close(write_fd)
5417- stream = os.fdopen(read_fd, "rb")
5418- with patch("builtins.open", return_value=stream):
5419- assert len(rdpcap("capture.pcap.gz")) == 1
0 commit comments