├── .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 | Buy Me A Coffee 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 --------------------------------------------------------------------------------