forked from Ahmed-Soliman96/Networks_Wireshark
/
main.py
134 lines (117 loc) · 4.13 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import QThread, SIGNAL
from scapy.all import*
from scapy.sendrecv import *
import sys
import project
import design
pck = []
pck2 = []
filtr = ''
inface = 'All Network Interfaces'
counter = 0
class snThread(QThread):
def __init__(self, ftr):
QThread.__init__(self)
self.ftr = ftr
def __del__(self):
self.wait()
def snFn(self, ftr):
global pck
global inface
if inface == 'All Network Interfaces':
p = sniff(count=1)
else:
p = sniff(count=1, iface=inface)
pck.append(p[0])
return project.get_info(p[0])
def run(self):
global filtr
while 1:
x = self.snFn(filtr)
self.emit(SIGNAL('add_pct(int)'), 1)
class Sniffer(QtGui.QDialog, design.Ui_Dialog):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
self.btn_start.clicked.connect(self.starter)
self.tbl.cellClicked.connect(self.handleCellClicked)
self.btn_save.setEnabled(False)
self.btn_save.clicked.connect(self.saver)
self.btn_apply.clicked.connect(self.applyer)
ifaces = project.get_interfaces()
self.combo.addItem('All Network Interfaces')
for i in range(len(ifaces)):
self.combo.addItem(ifaces[i])
self.combo.activated[str].connect(self.selector)
def selector(self, text):
global inface
inface = text
def starter(self):
global filtr
self.sn_thread = snThread(filtr)
self.connect(self.sn_thread, SIGNAL("add_pct(int)"), self.printer)
self.sn_thread.start()
self.btn_stop.setEnabled(True)
self.btn_start.setEnabled(False)
self.in_fltr.setEnabled(False)
self.btn_apply.setEnabled(False)
self.btn_save.setEnabled(False)
self.btn_stop.clicked.connect(self.stopper)
def printer(self, pct_text):
global pck
global pck2
global filtr
global counter
todisp = project.get_info(pck[counter])
if (filtr == '' or str(filtr).upper() == str(todisp[3]) or filtr[3:]==str(todisp[1]) or filtr[3:]==str(todisp[2])):
rowPosition = self.tbl.rowCount()
pck2.append(pck[counter])
self.tbl.insertRow(rowPosition)
self.tbl.setItem(rowPosition,0, QtGui.QTableWidgetItem(str(todisp[0])))
self.tbl.setItem(rowPosition,1, QtGui.QTableWidgetItem(str(todisp[1])))
self.tbl.setItem(rowPosition,2, QtGui.QTableWidgetItem(str(todisp[2])))
self.tbl.setItem(rowPosition,3, QtGui.QTableWidgetItem(str(todisp[3])))
self.tbl.setItem(rowPosition,4, QtGui.QTableWidgetItem(str(todisp[4])))
counter += 1
def stopper(self):
self.btn_stop.setEnabled(False)
self.btn_apply.setEnabled(True)
self.btn_start.setEnabled(True)
self.in_fltr.setEnabled(True)
self.btn_save.setEnabled(True)
self.sn_thread.terminate()
def applyer(self):
global filtr
filtr = self.in_fltr.text()
if len(pck) == 0:
return
else:
global pck2
pck2 = []
self.tbl.setRowCount(0)
for i in range (0,len(pck)):
global counter
counter = i
self.printer(0)
def handleCellClicked (self, row, col):
global pck
pcktxt = project.display_packetdata(pck[row])
self.txt.setText(pcktxt)
pckhex = project.get_hexa(pck[row])
self.hexa.setText(pckhex)
def saver(self):
global pck
global pck2
name = QtGui.QFileDialog.getSaveFileName(self, 'Save File')
if len(pck2) == 0:
project.save(pck,str(name))
else:
project.save(pck2,str(name))
def main():
app = QtGui.QApplication(sys.argv)
form = Sniffer()
form.show()
app.exec_()
if __name__ == '__main__':
main()