如何高效使用存活IP扫描工具提升网络安全:全方位解析与实战技巧

图片[1]-如何高效使用存活IP扫描工具提升网络安全:全方位解析与实战技巧

通过网盘分享的文件:存活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
喜欢就支持一下吧
点赞548 分享