├── .gitignore
├── README.md
├── images
├── main-scapy.jpg
└── main.jpg
├── main-scapy.py
├── main.py
└── requirements.txt
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by .ignore support plugin (hsz.mobi)
2 | ### Python template
3 | # Byte-compiled / optimized / DLL files
4 | __pycache__/
5 | *.py[cod]
6 | *$py.class
7 |
8 | # C extensions
9 | *.so
10 |
11 | # Distribution / packaging
12 | .Python
13 | env/
14 | build/
15 | develop-eggs/
16 | dist/
17 | downloads/
18 | eggs/
19 | .eggs/
20 | lib/
21 | lib64/
22 | parts/
23 | sdist/
24 | var/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 |
29 | # PyInstaller
30 | # Usually these files are written by a python script from a template
31 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
32 | *.manifest
33 | *.spec
34 |
35 | # Installer logs
36 | pip-log.txt
37 | pip-delete-this-directory.txt
38 |
39 | # Unit test / coverage reports
40 | htmlcov/
41 | .tox/
42 | .coverage
43 | .coverage.*
44 | .cache
45 | nosetests.xml
46 | coverage.xml
47 | *,cover
48 | .hypothesis/
49 |
50 | # Translations
51 | *.mo
52 | *.pot
53 |
54 | # Django stuff:
55 | *.log
56 | local_settings.py
57 |
58 | # Flask stuff:
59 | instance/
60 | .webassets-cache
61 |
62 | # Scrapy stuff:
63 | .scrapy
64 |
65 | # Sphinx documentation
66 | docs/_build/
67 |
68 | # PyBuilder
69 | target/
70 |
71 | # IPython Notebook
72 | .ipynb_checkpoints
73 |
74 | # pyenv
75 | .python-version
76 |
77 | # celery beat schedule file
78 | celerybeat-schedule
79 |
80 | # dotenv
81 | .env
82 |
83 | # virtualenv
84 | venv/
85 | ENV/
86 |
87 | # Spyder project settings
88 | .spyderproject
89 |
90 | # Rope project settings
91 | .ropeproject
92 | ### VirtualEnv template
93 | # Virtualenv
94 | # http://iamzed.com/2009/05/07/a-primer-on-virtualenv/
95 | .Python
96 | [Bb]in
97 | [Ii]nclude
98 | [Ll]ib
99 | [Ll]ib64
100 | [Ll]ocal
101 | [Ss]cripts
102 | pyvenv.cfg
103 | .venv
104 | pip-selfcheck.json
105 | ### JetBrains template
106 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
107 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
108 |
109 | # User-specific stuff:
110 | .idea/workspace.xml
111 | .idea/tasks.xml
112 | .idea/dictionaries
113 | .idea/vcs.xml
114 | .idea/jsLibraryMappings.xml
115 |
116 | # Sensitive or high-churn files:
117 | .idea/dataSources.ids
118 | .idea/dataSources.xml
119 | .idea/dataSources.local.xml
120 | .idea/sqlDataSources.xml
121 | .idea/dynamic.xml
122 | .idea/uiDesigner.xml
123 |
124 | # Gradle:
125 | .idea/gradle.xml
126 | .idea/libraries
127 |
128 | # Mongo Explorer plugin:
129 | .idea/mongoSettings.xml
130 |
131 | .idea/
132 |
133 | ## File-based project format:
134 | *.iws
135 |
136 | ## Plugin-specific files:
137 |
138 | # IntelliJ
139 | /out/
140 |
141 | # mpeltonen/sbt-idea plugin
142 | .idea_modules/
143 |
144 | # JIRA plugin
145 | atlassian-ide-plugin.xml
146 |
147 | # Crashlytics plugin (for Android Studio and IntelliJ)
148 | com_crashlytics_export_strings.xml
149 | crashlytics.properties
150 | crashlytics-build.properties
151 | fabric.properties
152 |
153 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Network scanner
2 |
3 | > A small project that I wrote on the fly for (IT351) Computer Networks University Course to identify and label the devices in my networks and open ports.
4 |
5 |
6 | # Technical Points
7 | - Built using `python3` and for
8 | - `main.py` file that used `socket` library for TCP Scanning which used three-way handshake (ACK-SYN)
9 | - `main-scapy.main` file that used `scapy` library for ARP Scanning which sends broadcast ARP message
10 | - Built GUI with `PyQt5` library
11 |
12 | ## How to use
13 |
14 | ### Getting started
15 | 1. clone or download the project and `cd` into the project folder
16 | 2. install dependencies
17 | 1. `pip install -r requirements.txt`
18 |
19 | ### How to run
20 | 1. run: `python main.py`, `python main-scapy.py` or from IDE like PyCharm
21 | 2. input network to scan: e.g. `192.168.1.1`
22 |
23 | ***Scanning could take a little while (around 20sec - 2min is normal). In addition, it may have to be run several times to get all devices.***
24 |
25 | ## Demo or What you will get
26 | 1. For running `main.py` file which scanning network using built in library `socket`
27 |
28 |
29 |
30 |
31 |
32 | 2. For running `main-scapy.py` file which scanning network using library `scapy`
33 |
34 |
35 |
36 |
37 |
38 | ## Contributing
39 | This is a very small project that arose out of a quick need. So I keep it as simple as possible. If you are motivated to improve it, you can simply fork the project and make a pull request with your changes.
40 |
41 | ## Show your support
42 |
43 | Give a ⭐️ if you found this project interested and helped you!
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/images/main-scapy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkassm/Network-Scanner/d443d88f8e3d0398f506af92c76536db5d8beb05/images/main-scapy.jpg
--------------------------------------------------------------------------------
/images/main.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkassm/Network-Scanner/d443d88f8e3d0398f506af92c76536db5d8beb05/images/main.jpg
--------------------------------------------------------------------------------
/main-scapy.py:
--------------------------------------------------------------------------------
1 | from PyQt5 import QtCore, QtGui, QtWidgets
2 | import scapy.all as scapy
3 | import time
4 | import sys
5 |
6 | try:
7 | _fromUtf8 = QtCore.QString.fromUtf8
8 | except AttributeError:
9 | def _fromUtf8(s):
10 | return s
11 |
12 | try:
13 | _encoding = QtWidgets.QApplication.UnicodeUTF8
14 |
15 |
16 | def _translate(context, text, disambig):
17 | return QtWidgets.QApplication.translate(context, text, disambig, _encoding)
18 | except AttributeError:
19 | def _translate(context, text, disambig):
20 | return QtWidgets.QApplication.translate(context, text, disambig)
21 |
22 |
23 | class Ui_MainWindow(QtWidgets.QWidget):
24 | def setupUi(self, MainWindow):
25 | MainWindow.setObjectName(_fromUtf8("MainWindow"))
26 | MainWindow.resize(334, 562)
27 | self.centralwidget = QtWidgets.QWidget(MainWindow)
28 | self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
29 | self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
30 | self.tabWidget.setGeometry(QtCore.QRect(10, 0, 321, 541))
31 | self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
32 | self.tab = QtWidgets.QWidget()
33 | self.tab.setObjectName(_fromUtf8("tab"))
34 | self.lineEdit = QtWidgets.QLineEdit(self.tab)
35 | self.lineEdit.setGeometry(QtCore.QRect(70, 40, 171, 31))
36 | self.lineEdit.setText(_fromUtf8(""))
37 | self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
38 | self.label_2 = QtWidgets.QLabel(self.tab)
39 | self.label_2.setGeometry(QtCore.QRect(80, 10, 161, 27))
40 | self.label_2.setObjectName(_fromUtf8("label_2"))
41 | self.toolButton = QtWidgets.QToolButton(self.tab)
42 | self.toolButton.setGeometry(QtCore.QRect(70, 80, 171, 35))
43 | self.toolButton.setObjectName(_fromUtf8("toolButton"))
44 | self.textEdit = QtWidgets.QTextEdit(self.tab)
45 | self.textEdit.setGeometry(QtCore.QRect(10, 130, 291, 351))
46 | self.textEdit.setObjectName(_fromUtf8("textEdit"))
47 | self.tabWidget.addTab(self.tab, _fromUtf8(""))
48 | self.tab_2 = QtWidgets.QWidget()
49 | self.tab_2.setObjectName(_fromUtf8("tab_2"))
50 | self.lineEdit_3 = QtWidgets.QLineEdit(self.tab_2)
51 | self.lineEdit_3.setGeometry(QtCore.QRect(70, 40, 171, 31))
52 | self.lineEdit_3.setText(_fromUtf8(""))
53 | self.lineEdit_3.setObjectName(_fromUtf8("lineEdit_3"))
54 | self.toolButton_3 = QtWidgets.QToolButton(self.tab_2)
55 | self.toolButton_3.setGeometry(QtCore.QRect(70, 160, 171, 35))
56 | self.toolButton_3.setObjectName(_fromUtf8("toolButton_3"))
57 | self.label_4 = QtWidgets.QLabel(self.tab_2)
58 | self.label_4.setGeometry(QtCore.QRect(80, 10, 161, 27))
59 | self.label_4.setObjectName(_fromUtf8("label_4"))
60 | self.lineEdit_5 = QtWidgets.QLineEdit(self.tab_2)
61 | self.lineEdit_5.setGeometry(QtCore.QRect(80, 110, 61, 31))
62 | self.lineEdit_5.setObjectName(_fromUtf8("lineEdit_5"))
63 | self.lineEdit_6 = QtWidgets.QLineEdit(self.tab_2)
64 | self.lineEdit_6.setGeometry(QtCore.QRect(170, 110, 61, 31))
65 | self.lineEdit_6.setObjectName(_fromUtf8("lineEdit_6"))
66 | self.label_5 = QtWidgets.QLabel(self.tab_2)
67 | self.label_5.setGeometry(QtCore.QRect(110, 80, 101, 27))
68 | self.label_5.setObjectName(_fromUtf8("label_5"))
69 | self.label_6 = QtWidgets.QLabel(self.tab_2)
70 | self.label_6.setGeometry(QtCore.QRect(150, 110, 16, 27))
71 | self.label_6.setObjectName(_fromUtf8("label_6"))
72 | self.textEdit_3 = QtWidgets.QTextEdit(self.tab_2)
73 | self.textEdit_3.setGeometry(QtCore.QRect(10, 210, 291, 281))
74 | self.textEdit_3.setObjectName(_fromUtf8("textEdit_3"))
75 | self.tabWidget.addTab(self.tab_2, _fromUtf8(""))
76 | self.label = QtWidgets.QLabel(self.centralwidget)
77 | self.label.setEnabled(True)
78 | self.label.setGeometry(QtCore.QRect(90, 540, 161, 27))
79 | font = QtGui.QFont()
80 | font.setPointSize(6)
81 | self.label.setFont(font)
82 | self.label.setTextFormat(QtCore.Qt.PlainText)
83 | self.label.setScaledContents(False)
84 | self.label.setObjectName(_fromUtf8("label"))
85 | MainWindow.setCentralWidget(self.centralwidget)
86 | self.actionOpen_Result = QtWidgets.QAction(MainWindow)
87 | self.actionOpen_Result.setObjectName(_fromUtf8("actionOpen_Result"))
88 | self.actionSave = QtWidgets.QAction(MainWindow)
89 | self.actionSave.setObjectName(_fromUtf8("actionSave"))
90 | self.actionExit = QtWidgets.QAction(MainWindow)
91 | self.actionExit.setObjectName(_fromUtf8("actionExit"))
92 | self.actionExit_2 = QtWidgets.QAction(MainWindow)
93 | self.actionExit_2.setObjectName(_fromUtf8("actionExit_2"))
94 |
95 | self.retranslateUi(MainWindow)
96 | self.tabWidget.setCurrentIndex(0)
97 |
98 | self.toolButton.clicked.connect(check1)
99 | self.toolButton_3.clicked.connect(check2)
100 | QtCore.QMetaObject.connectSlotsByName(MainWindow)
101 |
102 | def retranslateUi(self, MainWindow):
103 | MainWindow.setWindowTitle(_translate("MainWindow", "Network Scanning Tool v1.0", None))
104 | self.label_2.setText(_translate("MainWindow", "Enter IP Address:", None))
105 | self.toolButton.setText(_translate("MainWindow", "Scan", None))
106 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "IP Scanner", None))
107 | self.toolButton_3.setText(_translate("MainWindow", "Scan", None))
108 | self.label_4.setText(_translate("MainWindow", "Enter IP Address:", None))
109 | self.label_5.setText(_translate("MainWindow", "Port Range:", None))
110 | self.label_6.setText(_translate("MainWindow", "-", None))
111 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Port Scanner", None))
112 | self.label.setText(_translate("MainWindow", "Networks & SpaceCode Team 2021", None))
113 | self.actionOpen_Result.setText(_translate("MainWindow", "Open ", None))
114 | self.actionSave.setText(_translate("MainWindow", "Save", None))
115 | self.actionExit.setText(_translate("MainWindow", "Exit", None))
116 | self.actionExit_2.setText(_translate("MainWindow", "Exit", None))
117 |
118 |
119 | def IP_Address(addr):
120 | ui.textEdit.append('Scanning IP addresses....')
121 | ui.textEdit.repaint() # for update the textEdit immediately not wait to all function to finish
122 |
123 | # Try ARPing the ip address range supplied by the user.
124 | # The arping() method in scapy creates a pakcet with an ARP message
125 | # and sends it to the broadcast mac address ff:ff:ff:ff:ff:ff.
126 | # If a valid ip address range was supplied the program will return
127 | # the list of all results.
128 | ans, unans = scapy.arping(addr)
129 | return ans
130 |
131 |
132 | def check1():
133 | ui.textEdit.clear()
134 | start_time = time.monotonic()
135 | user_IP = ui.lineEdit.text()
136 | x = str(user_IP.split(".")[0]) + "." + str(user_IP.split(".")[1]) + "." + str(user_IP.split(".")[2]) + "."
137 | x = x + '0/24'
138 | ans = IP_Address(x)
139 | ui.textEdit.clear()
140 | for result in ans.res:
141 | printing = ("%s - %s" % (result[0].payload.pdst, result[1].payload.hwsrc))
142 | ui.textEdit.append(printing)
143 | ui.textEdit.append('--------------------------------------------------------')
144 | ui.textEdit.append("Time used: %s seconds" % (time.monotonic() - start_time))
145 |
146 |
147 | def Port(host_IP, frst, last):
148 | ui.textEdit_3.repaint() # for update the textEdit immediately not wait to all function to finish
149 | ui.textEdit_3.clear()
150 | start_time = time.monotonic()
151 | for dport in range(frst, last):
152 | pkt = scapy.IP(dst=host_IP) / scapy.TCP(dport=dport)
153 | ans, unans = scapy.sr(pkt, timeout=1)
154 | if ans:
155 | for send, rcv in ans:
156 | if rcv[scapy.TCP].flags == "SA":
157 | port_s = (' Port %d -> OPEN' % (dport))
158 | ui.textEdit_3.append(port_s)
159 | ui.textEdit_3.append('--------------------------------------------------------')
160 | ui.textEdit_3.append("Time used: %s seconds" % (time.monotonic() - start_time))
161 |
162 |
163 | def check2():
164 | ui.textEdit_3.clear()
165 | user_IP = ui.lineEdit_3.text()
166 | x = str(user_IP.split(".")[0]) + "." + str(user_IP.split(".")[1]) + "." + str(user_IP.split(".")[2]) + "." + str(
167 | user_IP.split(".")[3])
168 | frst_port = int(ui.lineEdit_5.text())
169 | last_port = int(ui.lineEdit_6.text())
170 | ui.textEdit_3.append('Scanning Open Ports.....')
171 | Port(x, frst_port, last_port)
172 |
173 |
174 | if __name__ == "__main__":
175 | app = QtWidgets.QApplication(sys.argv)
176 | ui = Ui_MainWindow()
177 | w = QtWidgets.QMainWindow()
178 | ui.setupUi(w)
179 | w.show()
180 | sys.exit(app.exec_())
181 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | from PyQt5 import QtCore, QtGui, QtWidgets
2 | import socket
3 | import sys
4 | import time
5 |
6 | try:
7 | _fromUtf8 = QtCore.QString.fromUtf8
8 | except AttributeError:
9 | def _fromUtf8(s):
10 | return s
11 |
12 | try:
13 | _encoding = QtWidgets.QApplication.UnicodeUTF8
14 |
15 |
16 | def _translate(context, text, disambig):
17 | return QtWidgets.QApplication.translate(context, text, disambig, _encoding)
18 | except AttributeError:
19 | def _translate(context, text, disambig):
20 | return QtWidgets.QApplication.translate(context, text, disambig)
21 |
22 |
23 | class Ui_MainWindow(QtWidgets.QWidget):
24 | def setupUi(self, MainWindow):
25 | MainWindow.setObjectName(_fromUtf8("MainWindow"))
26 | MainWindow.resize(334, 562)
27 | self.centralwidget = QtWidgets.QWidget(MainWindow)
28 | self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
29 | self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
30 | self.tabWidget.setGeometry(QtCore.QRect(10, 0, 321, 541))
31 | self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
32 | self.tab = QtWidgets.QWidget()
33 | self.tab.setObjectName(_fromUtf8("tab"))
34 | self.lineEdit = QtWidgets.QLineEdit(self.tab)
35 | self.lineEdit.setGeometry(QtCore.QRect(70, 40, 171, 31))
36 | self.lineEdit.setText(_fromUtf8(""))
37 | self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
38 | self.label_2 = QtWidgets.QLabel(self.tab)
39 | self.label_2.setGeometry(QtCore.QRect(80, 10, 161, 27))
40 | self.label_2.setObjectName(_fromUtf8("label_2"))
41 | self.toolButton = QtWidgets.QToolButton(self.tab)
42 | self.toolButton.setGeometry(QtCore.QRect(70, 80, 171, 35))
43 | self.toolButton.setObjectName(_fromUtf8("toolButton"))
44 | self.textEdit = QtWidgets.QTextEdit(self.tab)
45 | self.textEdit.setGeometry(QtCore.QRect(10, 130, 291, 351))
46 | self.textEdit.setObjectName(_fromUtf8("textEdit"))
47 | self.tabWidget.addTab(self.tab, _fromUtf8(""))
48 | self.tab_2 = QtWidgets.QWidget()
49 | self.tab_2.setObjectName(_fromUtf8("tab_2"))
50 | self.lineEdit_3 = QtWidgets.QLineEdit(self.tab_2)
51 | self.lineEdit_3.setGeometry(QtCore.QRect(70, 40, 171, 31))
52 | self.lineEdit_3.setText(_fromUtf8(""))
53 | self.lineEdit_3.setObjectName(_fromUtf8("lineEdit_3"))
54 | self.toolButton_3 = QtWidgets.QToolButton(self.tab_2)
55 | self.toolButton_3.setGeometry(QtCore.QRect(70, 160, 171, 35))
56 | self.toolButton_3.setObjectName(_fromUtf8("toolButton_3"))
57 | self.label_4 = QtWidgets.QLabel(self.tab_2)
58 | self.label_4.setGeometry(QtCore.QRect(80, 10, 161, 27))
59 | self.label_4.setObjectName(_fromUtf8("label_4"))
60 | self.lineEdit_5 = QtWidgets.QLineEdit(self.tab_2)
61 | self.lineEdit_5.setGeometry(QtCore.QRect(80, 110, 61, 31))
62 | self.lineEdit_5.setObjectName(_fromUtf8("lineEdit_5"))
63 | self.lineEdit_6 = QtWidgets.QLineEdit(self.tab_2)
64 | self.lineEdit_6.setGeometry(QtCore.QRect(170, 110, 61, 31))
65 | self.lineEdit_6.setObjectName(_fromUtf8("lineEdit_6"))
66 | self.label_5 = QtWidgets.QLabel(self.tab_2)
67 | self.label_5.setGeometry(QtCore.QRect(110, 80, 101, 27))
68 | self.label_5.setObjectName(_fromUtf8("label_5"))
69 | self.label_6 = QtWidgets.QLabel(self.tab_2)
70 | self.label_6.setGeometry(QtCore.QRect(150, 110, 16, 27))
71 | self.label_6.setObjectName(_fromUtf8("label_6"))
72 | self.textEdit_3 = QtWidgets.QTextEdit(self.tab_2)
73 | self.textEdit_3.setGeometry(QtCore.QRect(10, 210, 291, 281))
74 | self.textEdit_3.setObjectName(_fromUtf8("textEdit_3"))
75 | self.tabWidget.addTab(self.tab_2, _fromUtf8(""))
76 | self.label = QtWidgets.QLabel(self.centralwidget)
77 | self.label.setEnabled(True)
78 | self.label.setGeometry(QtCore.QRect(90, 540, 161, 27))
79 | font = QtGui.QFont()
80 | font.setPointSize(6)
81 | self.label.setFont(font)
82 | self.label.setTextFormat(QtCore.Qt.PlainText)
83 | self.label.setScaledContents(False)
84 | self.label.setObjectName(_fromUtf8("label"))
85 | MainWindow.setCentralWidget(self.centralwidget)
86 | self.actionOpen_Result = QtWidgets.QAction(MainWindow)
87 | self.actionOpen_Result.setObjectName(_fromUtf8("actionOpen_Result"))
88 | self.actionSave = QtWidgets.QAction(MainWindow)
89 | self.actionSave.setObjectName(_fromUtf8("actionSave"))
90 | self.actionExit = QtWidgets.QAction(MainWindow)
91 | self.actionExit.setObjectName(_fromUtf8("actionExit"))
92 | self.actionExit_2 = QtWidgets.QAction(MainWindow)
93 | self.actionExit_2.setObjectName(_fromUtf8("actionExit_2"))
94 |
95 | self.retranslateUi(MainWindow)
96 | self.tabWidget.setCurrentIndex(0)
97 |
98 | self.toolButton.clicked.connect(check1)
99 | self.toolButton_3.clicked.connect(check2)
100 | QtCore.QMetaObject.connectSlotsByName(MainWindow)
101 |
102 | def retranslateUi(self, MainWindow):
103 | MainWindow.setWindowTitle(_translate("MainWindow", "Network Scanning Tool v1.0", None))
104 | self.label_2.setText(_translate("MainWindow", "Enter IP Address:", None))
105 | self.toolButton.setText(_translate("MainWindow", "Scan", None))
106 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "IP Scanner", None))
107 | self.toolButton_3.setText(_translate("MainWindow", "Scan", None))
108 | self.label_4.setText(_translate("MainWindow", "Enter IP Address:", None))
109 | self.label_5.setText(_translate("MainWindow", "Port Range:", None))
110 | self.label_6.setText(_translate("MainWindow", "-", None))
111 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Port Scanner", None))
112 | self.label.setText(_translate("MainWindow", "Networks & SpaceCode Team 2021", None))
113 | self.actionOpen_Result.setText(_translate("MainWindow", "Open ", None))
114 | self.actionSave.setText(_translate("MainWindow", "Save", None))
115 | self.actionExit.setText(_translate("MainWindow", "Exit", None))
116 | self.actionExit_2.setText(_translate("MainWindow", "Exit", None))
117 |
118 |
119 | def IP_Address(addr):
120 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
121 | s.settimeout(0.01)
122 | result = s.connect_ex((addr, 135))
123 | s.close()
124 | return result == 0
125 |
126 |
127 | def check1():
128 | ui.textEdit.clear()
129 | start_time = time.monotonic()
130 | user_IP = ui.lineEdit.text()
131 | x = str(user_IP.split(".")[0]) + "." + str(user_IP.split(".")[1]) + "." + str(user_IP.split(".")[2]) + "."
132 | ui.textEdit.append('Scanning IP Addresses....')
133 | ui.textEdit.repaint() # for update the textEdit immediately not wait to all function to finish
134 | for ip in range(1, 255):
135 | addr = str(x) + str(ip)
136 | if IP_Address(addr):
137 | printing = ("%s - %s" % (addr, socket.getfqdn(addr)))
138 | ui.textEdit.append(printing)
139 | ui.textEdit.append('--------------------------------------------------------')
140 | ui.textEdit.append("Time used: %s seconds" % (time.monotonic() - start_time))
141 |
142 |
143 | def Port(host_IP, frst, last):
144 | ui.textEdit_3.repaint() # for update the textEdit immediately not wait to all function to finish
145 | ui.textEdit_3.clear()
146 | start_time = time.monotonic()
147 | for ports in range(frst, last):
148 | sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
149 | sk.settimeout(0.6)
150 | result = sk.connect_ex((host_IP, ports))
151 | if (result == 0):
152 | port_s = (' Port %d -> OPEN' % (ports))
153 | ui.textEdit_3.append(port_s)
154 | sk.close()
155 | ui.textEdit_3.append('--------------------------------------------------------')
156 | ui.textEdit_3.append("Time used: %s seconds" % (time.monotonic() - start_time))
157 |
158 | def check2():
159 | ui.textEdit_3.clear()
160 | user_IP = ui.lineEdit_3.text()
161 | x = str(user_IP.split(".")[0]) + "." + str(user_IP.split(".")[1]) + "." + str(user_IP.split(".")[2]) + "." + str(
162 | user_IP.split(".")[3])
163 | frst_port = int(ui.lineEdit_5.text())
164 | last_port = int(ui.lineEdit_6.text())
165 | ui.textEdit_3.append('Scanning Open Ports....')
166 | Port(x, frst_port, last_port)
167 |
168 |
169 | if __name__ == "__main__":
170 | app = QtWidgets.QApplication(sys.argv)
171 | ui = Ui_MainWindow()
172 | w = QtWidgets.QMainWindow()
173 | ui.setupUi(w)
174 | w.show()
175 | sys.exit(app.exec_())
176 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | PyQt5==5.15.4
2 | scapy==2.4.4
--------------------------------------------------------------------------------