# -*- coding: utf-8 -*-
# @Time : 2023/6/9 16:00
# @Author : wangyafeng
# @FileName: main.py.py
# @Software: PyCharm
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import scanport
import threading
import socket
def scan_port(ip, port, timewait, results):
try:
con = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
con.settimeout(int(timewait) / 1000)
conn = con.connect_ex((ip, port))
if conn == 0:
results.append(f'主机:{ip},端口{port}已开放')
con.close()
except:
pass
class Demo(QMainWindow):
def __init__(self):
self.app = QApplication(sys.argv)
super().__init__()
self.ui = scanport.Ui_MainWindow()
self.ui.setupUi(self)
self.init_ui()
def init_ui(self):
self.ui.pushButton.clicked.connect(self.click_pushButton)
self.show()
def click_pushButton(self):
self.ui.pushButton.setText('开始扫描')
ip = self.ui.IP.toPlainText()
startport = self.ui.startport.toPlainText()
endport = self.ui.endport.toPlainText()
timewait = self.ui.textEdit_4.toPlainText()
results = []
threads = []
for port in range(int(startport), int(endport) + int(1)):
t = threading.Thread(target=scan_port, args=(ip, port, timewait, results))
threads.append(t)
t.start()
# for thread in threads:
# thread.join()
for result in results:
self.ui.textBrowser.append(result)
self.ui.pushButton.setText('开始扫描')
if __name__ == '__main__':
e = Demo()
sys.exit(e.app.exec())
基于Qt Designer的代码
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'scanport.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(643, 480)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.IP = QtWidgets.QTextEdit(self.centralwidget)
self.IP.setGeometry(QtCore.QRect(150, 90, 381, 31))
font = QtGui.QFont()
font.setPointSize(16)
self.IP.setFont(font)
self.IP.setAcceptRichText(False)
self.IP.setObjectName("IP")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(110, 100, 41, 16))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(110, 140, 41, 16))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(240, 140, 41, 16))
self.label_3.setObjectName("label_3")
self.startport = QtWidgets.QTextEdit(self.centralwidget)
self.startport.setGeometry(QtCore.QRect(150, 130, 81, 31))
font = QtGui.QFont()
font.setPointSize(12)
self.startport.setFont(font)
self.startport.setAcceptRichText(False)
self.startport.setObjectName("startport")
self.endport = QtWidgets.QTextEdit(self.centralwidget)
self.endport.setGeometry(QtCore.QRect(280, 130, 81, 31))
font = QtGui.QFont()
font.setPointSize(12)
self.endport.setFont(font)
self.endport.setAcceptRichText(False)
self.endport.setObjectName("endport")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(150, 190, 381, 23))
self.pushButton.setObjectName("pushButton")
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(150, 230, 381, 192))
self.textBrowser.setObjectName("textBrowser")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(380, 140, 71, 20))
self.label_4.setObjectName("label_4")
self.textEdit_4 = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_4.setGeometry(QtCore.QRect(450, 130, 81, 31))
font = QtGui.QFont()
font.setPointSize(12)
self.textEdit_4.setFont(font)
self.textEdit_4.setAcceptRichText(False)
self.textEdit_4.setObjectName("textEdit_4")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 643, 23))
self.menubar.setObjectName("menubar")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
MainWindow.setMenuBar(self.menubar)
self.menubar.addAction(self.menu.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.IP.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:16pt; font-weight:400; font-style:normal;\">\n"
"<p align=\"center\" style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
self.label.setText(_translate("MainWindow", "地址:"))
self.label_2.setText(_translate("MainWindow", "端口:"))
self.label_3.setText(_translate("MainWindow", "------"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.label_4.setText(_translate("MainWindow", "等待时长ms:"))
self.menu.setTitle(_translate("MainWindow", "端口检测"))