![图片[1]-如何高效使用存活IP扫描工具提升网络安全:全方位解析与实战技巧](https://www.zywz6.com/wp-content/uploads/2025/07/d2b5ca33bd20250730172507-1024x587.png)
通过网盘分享的文件:存活IP扫描工具.exe
链接: https://pan.baidu.com/s/13Pw62C5zBxCVGiMJ4FAkjA?pwd=hzhz 提取码: hzhz
import tkinter as tk
from tkinter import ttk, scrolledtext
import threading
import socket
import ipaddress
import queue
import time
class IPScannerGUI:
def __init__(self):
self.root = tk.Tk()
self.root.title("IP资产扫描工具")
self.root.geometry("1000x600")
# 扫描状态
self.scanning = False
self.paused = False
self.scan_queue = queue.Queue()
self.alive_ips = [] # 存储存活IP列表
self._create_widgets()
def _create_widgets(self):
# 主框架
main_frame = ttk.Frame(self.root)
main_frame.pack(fill='both', expand=True, padx=10, pady=10)
left_frame = ttk.Frame(main_frame)
left_frame.pack(side='left', fill='both', expand=True)
right_frame = ttk.Frame(main_frame)
right_frame.pack(side='right', fill='both', expand=True, padx=(10,0))
# IP范围输入框
frame_input = ttk.Frame(left_frame)
frame_input.pack(pady=10, fill='x')
ttk.Label(frame_input, text="起始IP:").pack(side='left')
self.start_ip = ttk.Entry(frame_input, width=20)
self.start_ip.pack(side='left', padx=5)
ttk.Label(frame_input, text="结束IP:").pack(side='left')
self.end_ip = ttk.Entry(frame_input, width=20)
self.end_ip.pack(side='left', padx=5)
# 控制按钮
frame_buttons = ttk.Frame(left_frame)
frame_buttons.pack(pady=5)
self.start_btn = ttk.Button(frame_buttons, text="开始扫描", command=self.start_scan)
self.start_btn.pack(side='left', padx=5)
self.pause_btn = ttk.Button(frame_buttons, text="暂停", command=self.pause_scan, state='disabled')
self.pause_btn.pack(side='left', padx=5)
self.stop_btn = ttk.Button(frame_buttons, text="停止", command=self.stop_scan, state='disabled')
self.stop_btn.pack(side='left', padx=5)
# 日志输出区
ttk.Label(left_frame, text="扫描日志:").pack(anchor='w')
self.log_area = scrolledtext.ScrolledText(left_frame, height=20)
self.log_area.pack(pady=(0,10), fill='both', expand=True)
# 存活IP列表
ttk.Label(right_frame, text="存活IP列表:").pack(anchor='w')
self.alive_ip_list = ttk.Treeview(right_frame, columns=('ip', 'hostname'), show='headings')
self.alive_ip_list.heading('ip', text='IP地址')
self.alive_ip_list.heading('hostname', text='主机名')
self.alive_ip_list.pack(fill='both', expand=True)
def log(self, message):
self.log_area.insert('end', f"{message}\n")
self.log_area.see('end')
def scan_ip(self, ip):
try:
hostname = socket.gethostbyaddr(str(ip))[0]
self.log(f"[在线] {ip} ({hostname})")
# 在UI线程中更新存活IP列表
self.root.after(0, lambda: self.alive_ip_list.insert('', 'end', values=(str(ip), hostname)))
self.alive_ips.append(str(ip))
except:
self.log(f"[离线] {ip}")
def scan_worker(self):
while self.scanning:
if self.paused:
time.sleep(0.1)
continue
try:
ip = self.scan_queue.get_nowait()
self.scan_ip(ip)
except queue.Empty:
self.scanning = False
self.log(f"扫描完成,共发现 {len(self.alive_ips)} 个存活IP")
self.reset_buttons()
break
def start_scan(self):
try:
start = ipaddress.ip_address(self.start_ip.get())
end = ipaddress.ip_address(self.end_ip.get())
if start > end:
self.log("起始IP必须小于结束IP")
return
self.scanning = True
self.paused = False
self.alive_ips = [] # 清空存活IP列表
self.alive_ip_list.delete(*self.alive_ip_list.get_children()) # 清空树形视图
# 清空队列
while not self.scan_queue.empty():
self.scan_queue.get()
# 填充IP队列
current = start
while current <= end:
self.scan_queue.put(current)
current += 1
self.start_btn.config(state='disabled')
self.pause_btn.config(state='normal')
self.stop_btn.config(state='normal')
self.log("开始扫描...")
threading.Thread(target=self.scan_worker, daemon=True).start()
except ValueError:
self.log("请输入有效的IP地址")
def pause_scan(self):
self.paused = not self.paused
self.pause_btn.config(text="继续" if self.paused else "暂停")
self.log("扫描已暂停" if self.paused else "扫描已继续")
def stop_scan(self):
self.scanning = False
self.paused = False
self.reset_buttons()
self.log("扫描已停止")
def reset_buttons(self):
self.start_btn.config(state='normal')
self.pause_btn.config(state='disabled', text="暂停")
self.stop_btn.config(state='disabled')
def run(self):
self.root.mainloop()
if __name__ == "__main__":
app = IPScannerGUI()
app.run()
© 版权声明
THE END









