首页 > 编程语言 >Python自制端口扫描器

Python自制端口扫描器

时间:2023-05-09 11:35:14浏览次数:31  
标签:扫描 端口扫描 ip 自制 端口 bt Python Dialog self

自制Python端口扫描器

一、工具介绍

这个Python端口扫描器实现了一个基于 PyQt5 的端口扫描器界面,主要包含以下部分:

1. 使用 `setdefaulttimeout()` 方法设置默认的超时时间为 0.001 秒。
2. 使用 `socket` 模块创建一个套接字,并尝试与指定的端口进行连接。
3. 如果连接成功,则在文本浏览器中显示相应信息;否则,说明该端口没有开放。
4. 创建一个应用程序对象,一个对话框和一个 UI_Dialog 对象,并将其设置为对话框的 UI。
5. 显示对话框并进入事件循环。

其中,`setupUi()` 方法实现了界面的初始化和控件的创建和布局,`retranslateUi()` 方法实现了控件名称的翻译和信号槽的连接,

`portscanner()` 方法实现了具体的端口扫描功能,`start()` 和 `stop()` 方法实现了开始扫描和停止扫描的按钮响应,

`if __name__ == "__main__":` 语句判断该文件是否作为脚本直接运行。

二、设计思路

  1. 导入Python socket库,该库允许我们使用套接字以及客户端和服务器之间的连接;
  2. 定义要扫描的IP地址和端口范围;
  3. 创建一个循环来迭代要扫描的端口号;
  4. 对于每个端口,创建一个套接字并尝试连接到指定的主机和端口;
  5. 如果连接成功,则表示端口处于打开状态,可以将此信息输出到控制台或记录在文件中;
  6. 关闭套接字并继续循环,以便扫描所有指定的端口。

三、工具测试

1.打开命令行,ipconfig查看本机IP为10.0.188.182,输入IP到Dialog里,点击OK!

扫描结果展示在下方文本区内。

2.打开命令行,netstat -ano查看本机IP端口开放情况,发现和扫描结果一致。

由于目前该工具还没有引入线程,所以暂且测试0-6000端口,而不是总共的65536个端口。

但是我也修改了超时时间来提高速度,但是在网络质量不好的情况下会出现疏漏。

四、编程源代码

# 设置文件编码为 utf-8
# -*- coding: utf-8 -*-

from PyQt5 import QtCore,QtWidgets
import socket
import sys

class Ui_Dialog(object):
def setupUi(self, Dialog):
# 设置对话框的名称和大小
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)

# 创建一个单行文本编辑器,用于输入要扫描的 IP 地址
self.lineEdit_ip = QtWidgets.QLineEdit(Dialog)
self.lineEdit_ip.setGeometry(QtCore.QRect(40, 30, 151, 20))
self.lineEdit_ip.setObjectName("lineEdit_ip")

# 创建一个文本浏览器,用于显示扫描结果
self.tb_ip = QtWidgets.QTextBrowser(Dialog)
self.tb_ip.setGeometry(QtCore.QRect(30, 80, 351, 192))
self.tb_ip.setObjectName("tb_ip")

# 创建开始扫描和取消按钮,并设置它们的名称和位置
self.bt_ok = QtWidgets.QPushButton(Dialog)
self.bt_ok.setGeometry(QtCore.QRect(210, 30, 75, 23))
self.bt_ok.setObjectName("bt_ok")
self.bt_cancel = QtWidgets.QPushButton(Dialog)
self.bt_cancel.setGeometry(QtCore.QRect(300, 30, 75, 23))
self.bt_cancel.setObjectName("bt_cancel")

# 将控件名称翻译为指定语言
self.retranslateUi(Dialog)

# 连接信号和槽函数
QtCore.QMetaObject.connectSlotsByName(Dialog)

def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "私人端口扫描器"))
self.bt_ok.setText(_translate("Dialog", "OK"))
self.bt_ok.clicked.connect(self.start)
self.bt_cancel.setText(_translate("Dialog", "Cancel"))
self.bt_cancel.clicked.connect(self.stop)

def portscanner(self, host, port):
try:
# 创建一个套接字,设置地址类型为 IPv4,传输协议为 TCP
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 尝试与目标主机的指定端口进行连接
s.connect((host, port))
# 如果连接成功,则在文本浏览器中显示相应信息
self.tb_ip.append("这个端口开放喽: %d " % port)
# 关闭套接字
s.close()
except:
# 发生异常,说明该端口没有开放
pass

def start(self):
# 获取要扫描的 IP 地址
ip = self.lineEdit_ip.text()
# 设置超时时间为 0.001 秒
socket.setdefaulttimeout(0.001)
# 对 0~6000 端口进行扫描
for p in range(0, 6000):
self.portscanner(ip,p)
# 显示扫描结束信息
self.tb_ip.append("扫描结束啦------ByeBye")

def stop(self):
# 退出程序
sys.exit()

if __name__ == "__main__":
# 创建一个应用程序对象
app = QtWidgets.QApplication(sys.argv)
# 创建一个对话框
form = QtWidgets.QDialog()
# 创建 Ui_Dialog 对象,并将其设置为 form 的 UI
ui = Ui_Dialog()
ui.setupUi(form)
# 显示对话框
form.show()
# 运行应用程序,进入事件循环
sys.exit(app.exec_())

 

标签:扫描,端口扫描,ip,自制,端口,bt,Python,Dialog,self
From: https://www.cnblogs.com/nuist7bloger/p/17384372.html

相关文章

  • python对时间戳数据进行可视化
    python对时间戳数据进行可视化步骤1:加载模块&读取数据importpandasaspdimportosimportmatplotlib.pyplotaspltimporttimeimportdatetimeplt.rcParams['font.sans-serif']=['SimHei']#设置字体为simhei显示中文plt.rcParams['axes.unicode_minus']......
  • 【configparser】Python解析配置文件的模块使用总结
    简介configparser是Pyhton标准库中用来解析配置文件的模块,并且内置方法和字典非常接近。Python2.x中名为ConfigParser,3.x已更名小写,并加入了一些新功能。调用importconfigparserconfig=configparser.ConfigParser()config.read("config.ini")常用方法#获取所用......
  • python相关的一些小便条
    1.关于 Nomodulenamed'PIL' 如果是报错这个,不能直接pipinstallPIL,需要装下面的pipinstallpillow 2.关于Nomodulenamed'qcloud_cos'这个是腾讯云存储的组件pipinstall-Ucos-python-sdk-v53.关于文件命名如果文件命名跟命令冲突,会有可能......
  • python与go的对接
    python与go的对接在项目中遇到的问题,go写的程序需要被python调用,要将项目打包成.so文件首先要确保gobuild能编译出可执行文件,再打包成.so文件,因为原理与gobuild是一样的编译用测试项目来记录解决过程测试环境:windows64源码目录结构:---test|___Add___add.go|___......
  • python 小技巧, 列表生成式比 filter(lambda x:x>=0,data) 快, iteritems()方法,
    题目经timeit测试列表生成式比filter(lambdax:x>=0,data)快python2的dict的iteritems()方法,pyhton3可以看看有没有......
  • Python_16 session、cookie 鉴权
    一、查缺补漏1.pprint https://www.cnblogs.com/yjybupt/p/10669988.html https://www.cnblogs.com/wongbingming/p/12854618.html 2.鉴权: http://testingpai.com/article/1621929988356 3.importjson json.du......
  • Python爬虫零基础教学第二天
    Python爬虫高级开发/大数据抓取/从入门到精通/商业项目实战(2)开始时间2023-05-08 21:26:37结束时间2023-05-08 23:08:20一、调试模式的介绍 鼠标右键,在出现的选项中找到检查进入调试模式,或者按键盘上的f12键进入调试模式。  二、Cookie使用cookie进行会话保持 ......
  • 在 Python 中将 Tqdm 与 Asyncio 结合使用
    动动发财的小手,点个赞吧!简介困扰在Python中使用并发编程来提高效率对于数据科学家来说并不罕见。在后台观察各种子进程或并发线程以保持我的计算或IO绑定任务的顺序总是令人满意的。但是还有一点困扰我的是,当我在后台并发处理成百上千个文件或者执行成百上千个进程时,我总......
  • Python - 并发模型
    importitertoolsimporttimefromthreadingimportThread,Eventdefspin(msg:str,done:Event)->None:forcharinitertools.cycle(r'\|/-'):#1status=f'\r{char}{msg}'#2print(status,end=''......
  • python14:递归函数
    概念:在一个函数内部不调用其他函数,而是自己本身的话,这个函数就是递归函数。优点:看起来简单缺点:容易导致栈溢出,占内存。例子:defjiecheng(n):#result=1#foriteminrange(1,n+1):#result*=item#pass#returnresult##print('结果为:{}'.form......