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# SECUREAUTH LABS. Copyright 2018 SecureAuth Corporation. All rights reserved.
2#
3# This software is provided under under a slightly modified version
4# of the Apache Software License. See the accompanying LICENSE file
5# for more information.
6#
8from impacket import structure
10O_ETH = 0
11O_IP = 1
12O_ARP = 1
13O_UDP = 2
14O_TCP = 2
15O_ICMP = 2
16O_UDP_DATA = 3
17O_ICMP_DATA = 3
19MAGIC = '"\xD4\xC3\xB2\xA1'
21class PCapFileHeader(structure.Structure):
22 structure = (
23 ('magic', MAGIC),
24 ('versionMajor', '<H=2'),
25 ('versionMinor', '<H=4'),
26 ('GMT2localCorrection', '<l=0'),
27 ('timeAccuracy', '<L=0'),
28 ('maxLength', '<L=0xffff'),
29 ('linkType', '<L=1'),
30 ('packets','*:=[]'),
31 )
33class PCapFilePacket(structure.Structure):
34 structure = (
35 ('tsec', '<L=0'),
36 ('tmsec', '<L=0'),
37 ('savedLength', '<L-data'),
38 ('realLength', '<L-data'),
39 ('data',':'),
40 )
42 def __init__(self, *args, **kargs):
43 structure.Structure.__init__(self, *args, **kargs)
44 self['data'] = b''
46class PcapFile:
47 def __init__(self, fileName = None, mode = 'rb'):
48 if fileName is not None:
49 self.file = open(fileName, mode)
50 self.hdr = None
51 self.wroteHeader = False
53 def reset(self):
54 self.hdr = None
55 self.file.seek(0)
57 def close(self):
58 self.file.close()
60 def fileno(self):
61 return self.file.fileno()
63 def setFile(self, file):
64 self.file = file
66 def setSnapLen(self, snapLen):
67 self.createHeaderOnce()
68 self.hdr['maxLength'] = snapLen
70 def getSnapLen(self):
71 self.readHeaderOnce()
72 return self.hdr['maxLength']
74 def setLinkType(self, linkType):
75 self.createHeaderOnce()
76 self.hdr['linkType'] = linkType
78 def getLinkType(self):
79 self.readHeaderOnce()
80 return self.hdr['linkType']
82 def readHeaderOnce(self):
83 if self.hdr is None:
84 self.hdr = PCapFileHeader.fromFile(self.file)
86 def createHeaderOnce(self):
87 if self.hdr is None:
88 self.hdr = PCapFileHeader()
90 def writeHeaderOnce(self):
91 if not self.wroteHeader:
92 self.wroteHeader = True
93 self.file.seek(0)
94 self.createHeaderOnce()
95 self.file.write(self.hdr.getData())
97 def read(self):
98 self.readHeaderOnce()
99 try:
100 pkt = PCapFilePacket.fromFile(self.file)
101 pkt['data'] = self.file.read(pkt['savedLength'])
102 return pkt
103 except:
104 return None
106 def write(self, pkt):
107 self.writeHeaderOnce()
108 self.file.write(str(pkt))
110 def packets(self):
111 self.reset()
112 while 1:
113 answer = self.read()
114 if answer is None:
115 break
116 yield answer