玩电脑搞网络和监控的朋友难免会使用到一些局域网内的IP扫描软件。我今天也用python编写了一个这样的小软件。现在分享给大家,有大神修改和完善添加功能的请一定要留言分享哦!

主要功能
1. 核心功能
-
IP范围扫描:扫描指定IP范围内的在线主机
-
端口扫描:可选扫描常见服务端口
-
主机信息获取:获取主机名、MAC地址、响应时间
-
多线程扫描:提高扫描效率
-
实时进度显示:显示扫描进度和当前状态
2. 用户界面组件
主窗口布局
python
self.root.title("局域网IP扫描器 by BG8EQB")
self.root.geometry("800x740") # 固定窗口大小
self.root.resizable(False, False) # 禁止调整大小
主要区域
-
网络信息区域:显示本机IP和网络段
-
扫描设置区域:IP范围、超时时间、线程数、端口扫描选项
-
控制按钮:开始/停止扫描、获取网络信息、清空结果
-
进度条:显示扫描进度
-
结果表格:显示扫描结果,支持IP地址排序
-
状态栏:显示当前状态信息
代码结构分析
1. 网络信息获取 (get_network_info)
python
def get_network_info(self):
# 跨平台网络信息获取
if platform.system() == "Windows":
# 使用ipconfig命令
else:
# 使用ifconfig命令
-
自动检测操作系统
-
解析网络配置获取子网掩码
-
计算网络段和默认IP范围
2. 扫描核心逻辑
多线程扫描机制
python
def scan_network(self):
# 创建线程池
for i in range(max_threads):
thread = threading.Thread(target=self.worker, args=(timeout, scan_ports))
thread.start()
工作线程
python
def worker(self, timeout, scan_ports):
while self.scanning and self.scanned_ips < self.total_ips:
# 线程安全的IP分配
with threading.Lock():
ip = self.ips_to_scan[self.scanned_ips]
self.scanned_ips += 1
# 扫描单个IP
result = self.scan_ip(ip, timeout, scan_ports)
3. IP扫描实现 (scan_ip)
python
def scan_ip(self, ip, timeout, scan_ports):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
result = sock.connect_ex((ip, 80)) # 尝试连接80端口
-
使用TCP连接测试主机在线状态
-
测量响应时间
-
可选扫描常见端口
4. 特色功能
IP地址排序
python
def sort_by_ip(self):
# 将IP地址转换为可排序的元组格式
def ip_to_tuple(ip_str):
return tuple(map(int, ip_str.split('.')))
-
点击IP地址列标题进行排序
-
支持升序/降序切换
双击打开网页
python
def on_item_double_click(self, event):
# 尝试用HTTP和HTTPS打开IP地址
for protocol in ["http", "https"]:
url = f"{protocol}://{ip_address}"
webbrowser.open(url)
-
方便快速访问网络设备管理界面
实时计数显示
python
def update_results_title(self):
self.results_frame.config(text=f"扫描结果 ({self.online_hosts_count} 台在线主机)")
技术特点
优点
-
跨平台兼容:支持Windows、Linux、macOS
-
线程安全:使用锁机制保护共享资源
-
用户友好:实时进度显示、状态反馈
-
功能完整:IP扫描、端口扫描、主机信息获取
-
代码结构清晰:模块化设计,易于维护
可改进点
-
扫描准确性:仅使用80端口检测,可能漏掉某些主机
-
建议:增加ICMP ping扫描
-
-
性能优化:线程数固定,可动态调整
-
错误处理:某些网络操作缺乏详细错误信息
-
功能扩展:可添加端口自定义、扫描报告导出等
使用说明
-
启动应用:运行脚本打开GUI界面
-
自动检测:程序自动获取本机网络信息
-
设置参数:
-
调整IP范围(如需)
-
设置超时时间(默认1秒)
-
设置线程数(默认50)
-
选择是否扫描端口
-
-
开始扫描:点击"开始扫描"按钮
-
查看结果:在表格中查看在线主机信息
-
交互操作:
-
双击IP地址尝试网页访问
-
点击IP地址列进行排序
-
这个工具适合网络管理员快速发现局域网内的活跃设备,排查网络问题,或者了解网络拓扑结构。代码质量较高,具有良好的实用性和可扩展性。
1432

被折叠的 条评论
为什么被折叠?



