Coverage for /root/GitHubProjects/impacket/impacket/pcapfile.py : 37%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# Impacket - Collection of Python classes for working with network protocols.
2#
3# SECUREAUTH LABS. Copyright (C) 2018 SecureAuth Corporation. All rights reserved.
4#
5# This software is provided under a slightly modified version
6# of the Apache Software License. See the accompanying LICENSE file
7# for more information.
8#
10from impacket import structure
12O_ETH = 0
13O_IP = 1
14O_ARP = 1
15O_UDP = 2
16O_TCP = 2
17O_ICMP = 2
18O_UDP_DATA = 3
19O_ICMP_DATA = 3
21MAGIC = '"\xD4\xC3\xB2\xA1'
23class PCapFileHeader(structure.Structure):
24 structure = (
25 ('magic', MAGIC),
26 ('versionMajor', '<H=2'),
27 ('versionMinor', '<H=4'),
28 ('GMT2localCorrection', '<l=0'),
29 ('timeAccuracy', '<L=0'),
30 ('maxLength', '<L=0xffff'),
31 ('linkType', '<L=1'),
32 ('packets','*:=[]'),
33 )
35class PCapFilePacket(structure.Structure):
36 structure = (
37 ('tsec', '<L=0'),
38 ('tmsec', '<L=0'),
39 ('savedLength', '<L-data'),
40 ('realLength', '<L-data'),
41 ('data',':'),
42 )
44 def __init__(self, *args, **kargs):
45 structure.Structure.__init__(self, *args, **kargs)
46 self['data'] = b''
48class PcapFile:
49 def __init__(self, fileName = None, mode = 'rb'):
50 if fileName is not None:
51 self.file = open(fileName, mode)
52 self.hdr = None
53 self.wroteHeader = False
55 def reset(self):
56 self.hdr = None
57 self.file.seek(0)
59 def close(self):
60 self.file.close()
62 def fileno(self):
63 return self.file.fileno()
65 def setFile(self, file):
66 self.file = file
68 def setSnapLen(self, snapLen):
69 self.createHeaderOnce()
70 self.hdr['maxLength'] = snapLen
72 def getSnapLen(self):
73 self.readHeaderOnce()
74 return self.hdr['maxLength']
76 def setLinkType(self, linkType):
77 self.createHeaderOnce()
78 self.hdr['linkType'] = linkType
80 def getLinkType(self):
81 self.readHeaderOnce()
82 return self.hdr['linkType']
84 def readHeaderOnce(self):
85 if self.hdr is None:
86 self.hdr = PCapFileHeader.fromFile(self.file)
88 def createHeaderOnce(self):
89 if self.hdr is None:
90 self.hdr = PCapFileHeader()
92 def writeHeaderOnce(self):
93 if not self.wroteHeader:
94 self.wroteHeader = True
95 self.file.seek(0)
96 self.createHeaderOnce()
97 self.file.write(self.hdr.getData())
99 def read(self):
100 self.readHeaderOnce()
101 try:
102 pkt = PCapFilePacket.fromFile(self.file)
103 pkt['data'] = self.file.read(pkt['savedLength'])
104 return pkt
105 except:
106 return None
108 def write(self, pkt):
109 self.writeHeaderOnce()
110 self.file.write(str(pkt))
112 def packets(self):
113 self.reset()
114 while 1:
115 answer = self.read()
116 if answer is None:
117 break
118 yield answer