一.个人感悟
通过本次实验, 学习了扫描器设计的基本原理,并动手设计了一个开放端口扫描器.
具体原理:
1.编写前端GUI
2.学习Socket编程, 使用Socket编程的connect方法返回0 为连接成功,实现端口扫描器.
改进的地方: 如果settimeout 设置的太短则扫描不到有些端口, 设置的太长则耗时太长, 后续尝试使用多线程方式, 解决软件卡住问题.
二.运行结果
本机IP扫描结果:
百度地址扫描结果:
三.程序源码
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from StaticUI.singleThreadPortScanner import Ui_MainWindow
import socket
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.bind_button()
self.init_ui()
def init_ui(self):
hostname = socket.gethostname()
self.lineEdit_4.setText(hostname)
ip = socket.gethostbyname(hostname)
self.lineEdit_2.setText(ip)
self.lineEdit.setInputMask('000.000.000.000;')
pass
def bind_button(self):
self.pushButton.clicked.connect(self.start_scan)
pass
def start_scan(self):
ip = self.lineEdit.text()
start_port = self.lineEdit_5.text()
end_port = self.lineEdit_3.text()
host = ip
target_ip = socket.gethostbyname(host)
for port in range(int(start_port), int(end_port)):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(0.1)
result = sock.connect_ex((target_ip, port))
if result == 0:
self.textBrowser.append(target_ip + ":" + str(port) + "is open.")
# print(target_ip, ":", port, "is open.")
self.textBrowser.append("finish!")
pass
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv) # 初始化app
test = MainWindow()
test.show() # 显示窗口
sys.exit(app.exec_())