00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 import wx
00019 import wx.richtext
00020 from objects.logic.common.globalStrings import globalStrings
00021
00022 from objects.storage.sqlite3Impl import sqlite3Impl
00023 from objects.logic.network.packetDecoder import packetDecoder
00024 from array import array
00025 from impacket.ImpactPacket import ImpactPacketException, IP, TCP, UDP, ICMP, IGMP
00026 from objects.logic.utils.timeUtil import timeUtil
00027 from objects.logic.utils.conversionUtil import conversionUtil
00028 from objects.logic.common.logger import logger
00029 import sys
00030 import binascii
00031
00032
00033 def create(parent):
00034 return traceDisplayDialog(parent)
00035
00036 [wxID_TRACEDISPLAYDIALOG, wxID_TRACEDISPLAYDIALOGLISTCTRLPACKETS,
00037 wxID_TRACEDISPLAYDIALOGRICHTEXTCTRLPAYLOADHEX,
00038 wxID_TRACEDISPLAYDIALOGRICHTEXTCTRLPAYLOADTXT,
00039 wxID_TRACEDISPLAYDIALOGSTATICTEXTDATA,
00040 wxID_TRACEDISPLAYDIALOGSTATICTEXTPACKETLIST,
00041 wxID_TRACEDISPLAYDIALOGSTATICTEXTPACKETTEXT,
00042 wxID_TRACEDISPLAYDIALOGSTATICTEXTPROTSTACK,
00043 wxID_TRACEDISPLAYDIALOGTREECTRLPROTSTACK,
00044 ] = [wx.NewId() for _init_ctrls in range(9)]
00045
00046
00047
00048
00049
00050
00051
00052
00053 class traceDisplayDialog(wx.Dialog):
00054 def _init_coll_listCtrlPackets_Columns(self, parent):
00055
00056
00057 parent.InsertColumn(col=0, format=wx.LIST_FORMAT_LEFT, heading='Time',
00058 width=120)
00059 parent.InsertColumn(col=1, format=wx.LIST_FORMAT_LEFT,
00060 heading='source IP', width=90)
00061 parent.InsertColumn(col=2, format=wx.LIST_FORMAT_LEFT,
00062 heading='dest IP', width=90)
00063 parent.InsertColumn(col=3, format=wx.LIST_FORMAT_LEFT,
00064 heading='scr Port', width=60)
00065 parent.InsertColumn(col=4, format=wx.LIST_FORMAT_LEFT,
00066 heading='dst Port', width=60)
00067 parent.InsertColumn(col=5, format=wx.LIST_FORMAT_LEFT,
00068 heading='Protocol', width=80)
00069 parent.InsertColumn(col=6, format=wx.LIST_FORMAT_LEFT, heading='Info',
00070 width=110)
00071
00072 def _init_ctrls(self, prnt):
00073
00074 wx.Dialog.__init__(self, id=wxID_TRACEDISPLAYDIALOG,
00075 name='traceDisplayDialog', parent=prnt, pos=wx.Point(384, 277),
00076 size=wx.Size(669, 709), style=wx.DEFAULT_DIALOG_STYLE,
00077 title='Trace Details ...')
00078 self.SetClientSize(wx.Size(661, 682))
00079 self.SetToolTipString('')
00080 self.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL, False,'Tahoma'))
00081 self.SetForegroundColour(wx.Colour(192, 192, 192))
00082 self.SetIcon(wx.Icon(u'./res/images/ico/eyespy_small.ico',
00083 wx.BITMAP_TYPE_ICO))
00084
00085 self.listCtrlPackets = wx.ListCtrl(id=wxID_TRACEDISPLAYDIALOGLISTCTRLPACKETS,
00086 name='listCtrlPackets', parent=self, pos=wx.Point(8, 32),
00087 size=wx.Size(640, 200), style=wx.LC_REPORT | wx.LC_SINGLE_SEL)
00088 self.listCtrlPackets.SetBackgroundColour(wx.Colour(0, 0, 0))
00089 self.listCtrlPackets.SetTextColour(wx.Colour(192, 192, 192))
00090 self.listCtrlPackets.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL,
00091 False, 'Tahoma'))
00092 self.listCtrlPackets.SetToolTipString('')
00093 self._init_coll_listCtrlPackets_Columns(self.listCtrlPackets)
00094 self.listCtrlPackets.Bind(wx.EVT_LIST_ITEM_DESELECTED,
00095 self.OnListCtrlPacketsListItemDeselected,
00096 id=wxID_TRACEDISPLAYDIALOGLISTCTRLPACKETS)
00097 self.listCtrlPackets.Bind(wx.EVT_LIST_ITEM_SELECTED,
00098 self.OnListCtrlPacketsListItemSelected,
00099 id=wxID_TRACEDISPLAYDIALOGLISTCTRLPACKETS)
00100
00101 self.treeCtrlProtStack = wx.TreeCtrl(id=wxID_TRACEDISPLAYDIALOGTREECTRLPROTSTACK,
00102 name='treeCtrlProtStack', parent=self, pos=wx.Point(8, 264),
00103 size=wx.Size(264, 208), style=wx.TR_DEFAULT_STYLE)
00104 self.treeCtrlProtStack.SetBackgroundColour(wx.Colour(0, 0, 0))
00105 self.treeCtrlProtStack.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL,
00106 wx.NORMAL, False, 'Tahoma'))
00107 self.treeCtrlProtStack.SetToolTipString('')
00108 self.treeCtrlProtStack.SetForegroundColour(wx.Colour(192, 192, 192))
00109 self.treeCtrlProtStack.SetHelpText('')
00110
00111 self.staticTextData = wx.StaticText(id=wxID_TRACEDISPLAYDIALOGSTATICTEXTDATA,
00112 label='Payload (Hexadecimal)', name='staticTextData', parent=self,
00113 pos=wx.Point(280, 240), size=wx.Size(147, 16), style=0)
00114 self.staticTextData.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD,
00115 False, 'Tahoma'))
00116 self.staticTextData.SetForegroundColour(wx.Colour(0, 0, 0))
00117
00118 self.staticTextProtStack = wx.StaticText(id=wxID_TRACEDISPLAYDIALOGSTATICTEXTPROTSTACK,
00119 label='Protocol Stack', name='staticTextProtStack', parent=self,
00120 pos=wx.Point(8, 240), size=wx.Size(94, 16), style=0)
00121 self.staticTextProtStack.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL,
00122 wx.BOLD, False, 'Tahoma'))
00123 self.staticTextProtStack.SetForegroundColour(wx.Colour(0, 0, 0))
00124
00125 self.staticTextPacketList = wx.StaticText(id=wxID_TRACEDISPLAYDIALOGSTATICTEXTPACKETLIST,
00126 label='Packet List', name='staticTextPacketList', parent=self,
00127 pos=wx.Point(8, 8), size=wx.Size(71, 16), style=0)
00128 self.staticTextPacketList.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL,
00129 wx.BOLD, False, 'Tahoma'))
00130 self.staticTextPacketList.SetForegroundColour(wx.Colour(0, 0, 0))
00131
00132 self.richTextCtrlPayloadTxt = wx.richtext.RichTextCtrl(id=wxID_TRACEDISPLAYDIALOGRICHTEXTCTRLPAYLOADTXT,
00133 parent=self, pos=wx.Point(8, 504), size=wx.Size(640, 168),
00134 style=wx.richtext.RE_MULTILINE, value='')
00135 self.richTextCtrlPayloadTxt.SetLabel('text')
00136 self.richTextCtrlPayloadTxt.SetToolTipString('')
00137 self.richTextCtrlPayloadTxt.SetBackgroundColour(wx.Colour(192, 192,192))
00138 self.richTextCtrlPayloadTxt.SetEditable(True)
00139 self.richTextCtrlPayloadTxt.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL,
00140 wx.NORMAL, False, 'Tahoma'))
00141 self.richTextCtrlPayloadTxt.SetForegroundColour(wx.Colour(192, 192,192))
00142
00143 self.richTextCtrlPayloadHex = wx.richtext.RichTextCtrl(id=wxID_TRACEDISPLAYDIALOGRICHTEXTCTRLPAYLOADHEX,
00144 parent=self, pos=wx.Point(280, 264), size=wx.Size(368, 208),
00145 style=wx.richtext.RE_MULTILINE, value='')
00146 self.richTextCtrlPayloadHex.SetEditable(False)
00147 self.richTextCtrlPayloadHex.SetBackgroundColour(wx.Colour(192, 192,192))
00148 self.richTextCtrlPayloadHex.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL,
00149 wx.NORMAL, False, 'Courier'))
00150 self.richTextCtrlPayloadHex.SetLabel('text')
00151 self.richTextCtrlPayloadHex.SetFilename('')
00152 self.richTextCtrlPayloadHex.SetForegroundColour(wx.Colour(192, 192,192))
00153 self.richTextCtrlPayloadHex.SetToolTipString('')
00154
00155 self.staticTextPacketText = wx.StaticText(id=wxID_TRACEDISPLAYDIALOGSTATICTEXTPACKETTEXT,
00156 label='Payload (Text)', name='staticTextPacketText', parent=self,
00157 pos=wx.Point(8, 480), size=wx.Size(95, 16), style=0)
00158 self.staticTextPacketText.SetToolTipString('')
00159 self.staticTextPacketText.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL,
00160 wx.BOLD, False, 'Tahoma'))
00161 self.staticTextPacketText.SetForegroundColour(wx.Colour(0, 0, 0))
00162
00163 def __init__(self, parent, foreignIP, srcPort, dstPort):
00164 self._init_ctrls(parent)
00165
00166 self.packetDict = dict()
00167 storageImpl = sqlite3Impl(globalStrings.traceStoragePath)
00168 storageImpl.open()
00169
00170 try:
00171 resultset = storageImpl.query(foreignIP, srcPort, dstPort)
00172 except Exception, ex:
00173 strErr = "Could not retrieve trace information: %s" % str(ex)
00174 dlg = wx.MessageDialog(None, strErr, 'Error', wx.ICON_ERROR)
00175 result = dlg.ShowModal()
00176 dlg.Destroy()
00177 else:
00178 self.initControlsFromResultSet(resultset)
00179 finally:
00180 storageImpl.close()
00181
00182 del resultset
00183
00184
00185
00186
00187 def initControlsFromResultSet(self, resultset):
00188
00189 packetDec = packetDecoder()
00190
00191 if resultset is not None:
00192 for ts, srcip, dstip, srcprt, dstprt, inetp, xportp, netHdr, xptHdr, payload in resultset:
00193
00194 netHdrArr = array('B', netHdr)
00195 xptHrdArr = array('B', xptHdr)
00196
00197 infoString = self.__getInfo(netHdr, xportp, xptHdr)
00198
00199 protocolString = "%s/%s" % (packetDec.getXportProtocolString(xportp), packetDec.getNetProtocolString(inetp))
00200
00201 index = self.listCtrlPackets.InsertStringItem(sys.maxint, timeUtil.formatDateTime(ts))
00202 self.listCtrlPackets.SetStringItem(index, 1, srcip)
00203 self.listCtrlPackets.SetStringItem(index, 2, dstip)
00204 self.listCtrlPackets.SetStringItem(index, 3, str(srcprt))
00205 self.listCtrlPackets.SetStringItem(index, 4, str(dstprt))
00206 self.listCtrlPackets.SetStringItem(index, 5, protocolString)
00207 self.listCtrlPackets.SetStringItem(index, 6, infoString)
00208
00209
00210 self.packetDict[index] = (srcprt, dstprt, inetp, xportp, netHdr, xptHdr, payload)
00211
00212
00213
00214
00215
00216 def OnListCtrlPacketsListItemDeselected(self, event):
00217 pass
00218
00219
00220
00221
00222
00223 def OnListCtrlPacketsListItemSelected(self, event):
00224
00225 item = event.GetItem()
00226 srcprt, dstprt, inetp, xportp, netHdr, xptHdr, payload = self.packetDict[item.GetId()]
00227
00228 self.displayProtocolStack(inetp, xportp, netHdr, xptHdr)
00229
00230
00231
00232 self.richTextCtrlPayloadTxt.Clear()
00233 self.richTextCtrlPayloadHex.Clear()
00234
00235 if payload is not None:
00236 self.displayPayload(payload)
00237
00238
00239
00240
00241
00242
00243
00244
00245 def displayProtocolStack(self, inetp, xportp, netHdr, xptHdr):
00246 self.treeCtrlProtStack.DeleteAllItems()
00247 packetDec = packetDecoder()
00248
00249
00250 netProtocol = "%s" % packetDec.getNetProtocolString(inetp)
00251 xportProtocol = "%s" % packetDec.getXportProtocolString(xportp)
00252
00253 self.treeFrameRoot = self.treeCtrlProtStack.AddRoot("Ethernet Frame")
00254 self.treeCtrlProtStack.Expand(self.treeFrameRoot)
00255
00256
00257 if netProtocol == "IP":
00258 self.displayIPHeader(netHdr, xportProtocol)
00259 else:
00260 netRoot = self.treeCtrlProtStack.AppendItem(self.treeFrameRoot, "Unknown Network Protocol")
00261
00262
00263 if xportProtocol == "TCP":
00264 self.displayTCPHeader(xptHdr)
00265 elif xportProtocol == "UDP":
00266 self.displayUDPHeader(xptHdr)
00267 elif xportProtocol == "ICMP":
00268 self.displayICMPHeader(xptHdr)
00269 elif xportProtocol == "IGMP":
00270 self.displayIGMPHeader(xptHdr)
00271 else:
00272 xportRoot = self.treeCtrlProtStack.AppendItem(self.treeFrameRoot, "Unknown Transport Protocol")
00273
00274 self.treeCtrlProtStack.Expand(self.treeFrameRoot)
00275
00276
00277
00278
00279
00280 def displayIPHeader(self, netHdr, xportProtocol):
00281
00282 try:
00283 IPHeader = IP(netHdr)
00284 except ImpactPacketException, ex:
00285 logger.log(__name__ + ": Could not display IP packet. (bad IP packet) -- " + str(ex) )
00286 netRoot = self.treeCtrlProtStack.AppendItem(self.treeFrameRoot, "IP Header -- (Could not parse...)")
00287 return
00288
00289
00290 ipv = "IP Version: %d" % IPHeader.get_ip_v()
00291 ihl = "Internet Header Length: %d Bytes" % (IPHeader.get_ip_hl() * 4)
00292 tos = "Type of Service: %d" % IPHeader.get_ip_tos()
00293 totlen = "Total Length: %d" % IPHeader.get_ip_len()
00294 ident = "Identification: %d" % IPHeader.get_ip_id()
00295
00296 if IPHeader.get_ip_df() > 0:
00297 df = 1
00298 else:
00299 df = 0
00300
00301 if IPHeader.get_ip_mf() > 0:
00302 mf = 1
00303 else:
00304 mf = 0
00305
00306 flags = "Flags: (DF:%d, MF:%d)" % (df, mf)
00307 fragoff = "Fragment Offset: %d" % IPHeader.get_ip_off()
00308 ttl = "Time To Live: %d" % IPHeader.get_ip_ttl()
00309 prot = "Protocol: %d (%s)" % (IPHeader.get_ip_p(), xportProtocol)
00310 check = "Checksum: %d" % IPHeader.get_ip_sum()
00311 srcip = "Source IP: %s" % IPHeader.get_ip_src()
00312 dstip = "Dest IP: %s" % IPHeader.get_ip_dst()
00313
00314 IPhdrString = "IP Header -- (%d Bytes)" % (IPHeader.get_ip_hl() * 4)
00315
00316
00317 netRoot = self.treeCtrlProtStack.AppendItem(self.treeFrameRoot, IPhdrString)
00318
00319
00320 self.treeCtrlProtStack.AppendItem(netRoot, ipv)
00321 self.treeCtrlProtStack.AppendItem(netRoot, ihl)
00322 self.treeCtrlProtStack.AppendItem(netRoot, tos)
00323 self.treeCtrlProtStack.AppendItem(netRoot, totlen)
00324 self.treeCtrlProtStack.AppendItem(netRoot, ident)
00325 self.treeCtrlProtStack.AppendItem(netRoot, flags)
00326 self.treeCtrlProtStack.AppendItem(netRoot, fragoff)
00327 self.treeCtrlProtStack.AppendItem(netRoot, ttl)
00328 self.treeCtrlProtStack.AppendItem(netRoot, prot)
00329 self.treeCtrlProtStack.AppendItem(netRoot, check)
00330 self.treeCtrlProtStack.AppendItem(netRoot, srcip)
00331 self.treeCtrlProtStack.AppendItem(netRoot, dstip)
00332 opt = self.treeCtrlProtStack.AppendItem(netRoot, "Options")
00333 self.treeCtrlProtStack.AppendItem(opt, "...")
00334
00335
00336
00337
00338
00339 def displayTCPHeader(self, xptHdr):
00340
00341 try:
00342 TCPHeader = TCP(xptHdr)
00343 except ImpactPacketException, ex:
00344 logger.log(__name__ + ": Could not display TCP packet. (bad TCP packet) -- " + str(ex) )
00345 xportRoot = self.treeCtrlProtStack.AppendItem(self.treeFrameRoot, "TCP Header -- (Could not Parse)")
00346 return
00347
00348 srcPort = "Src Port: %d" % TCPHeader.get_th_sport()
00349 dstPort = "Dst Port: %d" % TCPHeader.get_th_dport()
00350 seq = "Sequence #: %d" % (TCPHeader.get_th_seq() % 4294967296)
00351 ack = "Ack #: %d" % (TCPHeader.get_th_ack() % 4294967296)
00352 hdrSize = "Header Size: %d Bytes" % TCPHeader.get_header_size()
00353
00354
00355 ctlURG = "URG: %d" % TCPHeader.get_URG()
00356 ctlACK = "ACK: %d" % TCPHeader.get_ACK()
00357 ctlPSH = "PSH: %d" % TCPHeader.get_PSH()
00358 ctlRST = "RST: %d" % TCPHeader.get_RST()
00359 ctlSYN = "SYN: %d" % TCPHeader.get_SYN()
00360 ctlFIN = "FIN: %d" % TCPHeader.get_FIN()
00361
00362 window = "Window: %d" % TCPHeader.get_th_win()
00363 checksum = "CheckSum: %d" % TCPHeader.get_th_sum()
00364 urp = "Urgent Prt: %d" % TCPHeader.get_th_urp()
00365
00366 hdrString = "TCP Header -- (%d Bytes)" % TCPHeader.get_header_size()
00367 xportRoot = self.treeCtrlProtStack.AppendItem(self.treeFrameRoot, hdrString)
00368
00369 self.treeCtrlProtStack.AppendItem(xportRoot, srcPort)
00370 self.treeCtrlProtStack.AppendItem(xportRoot, dstPort)
00371 self.treeCtrlProtStack.AppendItem(xportRoot, seq)
00372 self.treeCtrlProtStack.AppendItem(xportRoot, ack)
00373 self.treeCtrlProtStack.AppendItem(xportRoot, hdrSize)
00374 ctrl = self.treeCtrlProtStack.AppendItem(xportRoot, "Control Flags")
00375 self.treeCtrlProtStack.AppendItem(ctrl, ctlURG)
00376 self.treeCtrlProtStack.AppendItem(ctrl, ctlACK)
00377 self.treeCtrlProtStack.AppendItem(ctrl, ctlPSH)
00378 self.treeCtrlProtStack.AppendItem(ctrl, ctlRST)
00379 self.treeCtrlProtStack.AppendItem(ctrl, ctlSYN)
00380 self.treeCtrlProtStack.AppendItem(ctrl, ctlFIN)
00381
00382 self.treeCtrlProtStack.AppendItem(xportRoot, window)
00383 self.treeCtrlProtStack.AppendItem(xportRoot, checksum)
00384 self.treeCtrlProtStack.AppendItem(xportRoot, urp)
00385
00386 opts = self.treeCtrlProtStack.AppendItem(xportRoot, "Options")
00387 if (TCPHeader.get_header_size() > 20):
00388 for opt in TCPHeader.get_options():
00389 stropt = str(opt)
00390 stropt = stropt.replace("\tTCP Option: ", "")
00391 self.treeCtrlProtStack.AppendItem(opts, stropt)
00392 else:
00393 self.treeCtrlProtStack.AppendItem(opts, "None")
00394
00395
00396
00397
00398
00399 def displayUDPHeader(self, xptHdr):
00400
00401 try:
00402 UDPHeader = UDP(xptHdr)
00403 except ImpactPacketException, ex:
00404 logger.log(__name__ + ": Could not display UDP packet. (bad UDP packet) -- " + str(ex) )
00405 xportRoot = self.treeCtrlProtStack.AppendItem(self.treeFrameRoot, "UDP Header -- (Could not Parse)")
00406 return
00407
00408
00409 srcPort = "Src Port: %d" % UDPHeader.get_uh_sport()
00410 dstPort = "Dst Port: %d" % UDPHeader.get_uh_dport()
00411 datagramSize = "Datagram Size: %d Bytes" % UDPHeader.get_uh_ulen()
00412 checksum = "Checksum: %d" % UDPHeader.get_uh_sum()
00413
00414 xportRoot = self.treeCtrlProtStack.AppendItem(self.treeFrameRoot, "UDP Header -- (8 Bytes)")
00415
00416 self.treeCtrlProtStack.AppendItem(xportRoot, srcPort)
00417 self.treeCtrlProtStack.AppendItem(xportRoot, dstPort)
00418 self.treeCtrlProtStack.AppendItem(xportRoot, datagramSize)
00419 self.treeCtrlProtStack.AppendItem(xportRoot, checksum)
00420
00421
00422
00423
00424 def displayICMPHeader(self, xptHdr):
00425 ICMPHeader = ICMP(xptHdr)
00426
00427 type = "Type: %s" % ICMPHeader.get_type_name(ICMPHeader.get_icmp_type())
00428 code = "Code: %s" % ICMPHeader.get_code_name(ICMPHeader.get_icmp_type(), ICMPHeader.get_icmp_code())
00429 checksum = "Checksum: %d" % ICMPHeader.get_icmp_cksum()
00430 id = "ID: %d" % ICMPHeader.get_icmp_id()
00431 sequence = "Sequence: %d" % ICMPHeader.get_icmp_seq()
00432
00433 hdrString = "ICMP Header -- (%d bytes)" % ICMPHeader.get_header_size()
00434
00435 xportRoot = self.treeCtrlProtStack.AppendItem(self.treeFrameRoot, hdrString)
00436
00437 self.treeCtrlProtStack.AppendItem(xportRoot, type)
00438 self.treeCtrlProtStack.AppendItem(xportRoot, code)
00439 self.treeCtrlProtStack.AppendItem(xportRoot, checksum)
00440 self.treeCtrlProtStack.AppendItem(xportRoot, id)
00441 self.treeCtrlProtStack.AppendItem(xportRoot, sequence)
00442
00443
00444
00445
00446 def displayIGMPHeader(self, xptHdr):
00447 IGMPHeader = IGMP(xptHdr)
00448
00449 type = "Type: %s" % IGMPHeader.get_type_name(IGMPHeader.get_igmp_type())
00450 code = "Code: %s" % IGMPHeader.get_igmp_code()
00451 checksum = "Checksum: %d" % IGMPHeader.get_igmp_cksum()
00452 groupAddr = "Group Address: %s" % self.__IPnumToString(IGMPHeader.get_igmp_group())
00453
00454
00455 hdrString = "IGMP Header -- (%d bytes)" % IGMPHeader.get_header_size()
00456
00457 xportRoot = self.treeCtrlProtStack.AppendItem(self.treeFrameRoot, hdrString)
00458
00459 self.treeCtrlProtStack.AppendItem(xportRoot, type)
00460 self.treeCtrlProtStack.AppendItem(xportRoot, code)
00461 self.treeCtrlProtStack.AppendItem(xportRoot, checksum)
00462 self.treeCtrlProtStack.AppendItem(xportRoot, groupAddr)
00463
00464
00465
00466
00467
00468
00469 def __IPnumToString(self, n):
00470 d = 256 * 256 * 256
00471 q = []
00472 while d > 0:
00473 m,n = divmod(n,d)
00474 q.append(str(m))
00475 d = d/256
00476
00477 return '.'.join(q)
00478
00479
00480
00481
00482
00483 def displayPayload(self, payload):
00484 try:
00485 self.richTextCtrlPayloadTxt.WriteText(conversionUtil.removeNonASCIICharaters(payload, "."))
00486 except Exception, ex:
00487 print "could not encode text"
00488
00489 self.richTextCtrlPayloadHex.WriteText(self.__toFormattedHex(payload))
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502 def __toFormattedHex(self, s):
00503 retString = ""
00504
00505 newlineCnt = 0
00506 spaceCnt = 0
00507
00508 lineHdrIdx = 16
00509
00510 for c in s:
00511
00512 if newlineCnt % 16 == 0 and newlineCnt != 0:
00513 retString += "\n"
00514
00515 if newlineCnt % 16 == 0:
00516
00517 hexIdx = hex(lineHdrIdx)
00518 strHdr = "%s" % (hexIdx)
00519 strHdr = strHdr.replace('0x', '')
00520 strHdr = strHdr.rjust(4, "0")
00521
00522 retString += strHdr + " "
00523 lineHdrIdx += 16
00524
00525 newlineCnt += 1
00526 spaceCnt += 1
00527
00528 nextChar = hex(ord(c)).replace('0x', '')
00529 if len(nextChar) == 1:
00530 nextChar = "0" + nextChar
00531 retString += nextChar
00532
00533 if spaceCnt % 8 == 0:
00534 retString += " "
00535 spaceCnt = 0
00536
00537 return retString
00538
00539
00540
00541
00542
00543
00544
00545
00546 def __getInfo(self, netHdr, xportp, xptHdr):
00547
00548 try:
00549 IPHeader = IP(netHdr)
00550 except ImpactPacketException, ex:
00551 logger.log(__name__ + ": Could not get packet info string. (bad IP packet) --" + str(ex) )
00552 return ""
00553
00554 ipPayloadLen = (IPHeader.get_ip_len() - (IPHeader.get_ip_hl() * 4))
00555
00556 packetDec = packetDecoder()
00557
00558
00559 xportProtocol = "%s" % packetDec.getXportProtocolString(xportp)
00560
00561 if xportProtocol == "TCP":
00562 try:
00563 TCPHeader = TCP(xptHdr)
00564 except ImpactPacketException, ex:
00565 logger.log(__name__ + ": Could not get packet info string. (bad TCP packet) -- " + str(ex) )
00566 return ""
00567
00568
00569 tcpHeaderLen = TCPHeader.get_header_size()
00570
00571 payloadLen = ipPayloadLen - tcpHeaderLen
00572
00573
00574 if payloadLen > 0:
00575 return "Data Packet"
00576
00577
00578 ctlACK = TCPHeader.get_ACK()
00579 ctlSYN = TCPHeader.get_SYN()
00580 ctlFIN = TCPHeader.get_FIN()
00581 ctlRST = TCPHeader.get_RST()
00582
00583 if ctlSYN == 1:
00584 return "Handshake (SYN)"
00585
00586 if ctlRST == 1:
00587 return "Handshake (RST)"
00588
00589 if ctlFIN == 1:
00590 return "Handshake (FIN)"
00591
00592 if ctlACK == 1:
00593 return "Handshake (ACK)"
00594
00595
00596
00597 if xportProtocol == "UDP":
00598 return "Data Pakcet"
00599 else:
00600 return ""
00601
00602