Python实现的IP端口扫描工具类示例
本文分享一个基于Python的IP端口扫描工具类,适用于服务器上线后的端口安全检查及局域网内医疗器械等黑盒设备的数据对接。通过多线程快速探测0-65535端口状态,解决未知端口传输问题。文中提供了完整代码、运行逻辑说明及针对线程数限制的优化建议,帮助开发者高效获取设备开放端口信息。
本文介绍一个使用Python编写的IP端口扫描工具类,旨在为读者提供参考与实用价值。
此前因服务器频繁遭受攻击,上线后相关人员常因匆忙下班而遗漏关闭某些端口,导致服务器曾被攻破并造成严重损失。
近期在进行医疗器械对接至SAAS平台的项目中,部分仪器通过网线进行数据传输,且依赖特定端口号进行交互。由于缺乏说明书,国内相关开发资料稀缺,仪器对开发者而言如同黑盒。为高效获取数据,笔者利用之前编写的端口扫描工具,连接局域网后一键识别开放端口,直接建立连接获取数据,大幅提升了工作效率。
鉴于该工具的实用价值,特此分享。
目前该工具主要应用于以下场景:
1. 服务器上线后的安全扫描:快速确认哪些端口需要开放,哪些应当关闭。
2. 未知端口的数据传输探测:当确定对方通过端口传输但不知具体端口号时,可通过扫描定位。相比蓝牙,端口传输数据量大且速度快,能充分利用手机支持的带宽。
3. 个人设备端口安全检查:用户可通过系统设置查看IP,或使用命令行工具如ifconfig获取IP后,扫描手机开放的端口。
需要注意的是,不同电脑CPU性能各异,最大可创建线程数存在差异。若线程创建过多导致报错,可适当减少每次扫描的端口数量,分段执行,或延长sleep休眠时间,以确保能完整扫描0-65536范围内的端口。
# -*- coding:utf8 -*-
import socket, time, thread
import os
from time import sleep
socket.setdefaulttimeout(1)
def socket_port(ip,port):
try:
if port>=65535:
return
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result=s.connect_ex((ip,port))
if result==0:
lock.acquire()
print ip,u':',port,u'端口开放'
lock.release()
s.close()
except Exception,e:
pass
def ip_scan(ip):
"""
输入IP,扫描IP的0-65534端口情况
"""
try:
print u'开始扫描 %s' % ip
start_time=time.time()
for j in range(0,660):
for i in range(j*100,100*(j+1)):
thread.start_new_thread(socket_port,(ip,int(i)))
sleep(0.1)#休眠 防止线程创建的过多报错(can not create new start thread)
print u'扫描端口完成,总共用时 :%.2f' %(time.time()-start_time)
except Exception,e :
print u'扫描ip出错'
if __name__=='__main__':
lock=thread.allocate_lock()
ip_scan('192.168.3.37')
以下是工具的运行结果展示。

如需了解更多Python相关知识,可参考本站专题:《Python Socket编程技巧总结》、《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。
希望本文所述内容能对广大Python程序设计者有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













