基于QT5和scapy的python网络嗅探器

成果展示

代码

main.py

from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QComboBox, QPushButton, QVBoxLayout, QWidget, QTableWidget, QTableWidgetItem, QMessageBox
from PyQt5.QtCore import QThread, pyqtSignal, Qt
from scapy.arch.windows import get_windows_if_list
from scapy.all import *
import threading
import packet_details
import tubiao


class PacketSnifferWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("网络嗅探器")
        self.setGeometry(100, 100, 800, 600)
        self.setup_ui()
        self.packet_count = 0  # 数据包计数器
        self.pcap_packets = []  # 用于保存捕获的数据包

    def setup_ui(self):
        # 创建接口选择下拉菜单
        self.interface_var = QComboBox(self)
        self.interface_var.move(10, 10)

        # 创建表格
        self.table_widget = QTableWidget(self)
        self.table_widget.setGeometry(10, 40, 780, 300)
        self.table_widget.setColumnCount(4)
        self.table_widget.setHorizontalHeaderLabels(["协议类型", "源地址", "目的地址", "长度"])
        self.table_widget.setSelectionBehavior(QTableWidget.SelectRows)
        self.table_widget.cellClicked.connect(self.show_packet_details)

        # 创建详细信息文本编辑框
        self.detail_text_edit = QTextEdit(self)
        self.detail_text_edit.setGeometry(10, 350, 780, 200)

        # 创建按钮
        self.start_button = QPushButton("开始嗅探", self)
        self.start_button.setGeometry(10, 560, 80, 30)
        self.start_button.clicked.connect(self.packet_sniffer)

        self.stop_button = QPushButton("停止嗅探", self)
        self.stop_button.setGeometry(100, 560, 80, 30)
        self.stop_button.clicked.connect(self.stop_sniffing)
        self.stop_button.setEnabled(False)

        self.reset_button = QPushButton("重置", self)
        self.reset_button.setGeometry(190, 560, 80, 30)
        self.reset_button.clicked.connect(self.reset_sniffer)

        self.export_button = QPushButton("导出文件", self)
        self.export_button.setGeometry(280, 560, 80, 30)
        self.export_button.clicked.connect(self.export_file)

        # 添加详细查看按钮
        self.details_button = QPushButton("详细查看", self)
        self.details_button.setGeometry(370, 560, 100, 30)
        self.details_button.clicked.connect(self.open_packet_details)

        # 添加图表按钮
        self.chart_button = QPushButton("统计图表", self)
        self.chart_button.setGeometry(480, 560, 100, 30)
        self.chart_button.clicked.connect(self.show_chart_window)


        # 获取可用的网络接口名称列表
        interfaces = self.get_interface_names()

        # 在下拉菜单中添加接口列表
        self.interface_var.addItems(interfaces)
        self.interface_var.setCurrentIndex(5)  # 默认选择第一个接口

    def get_interface_names(self):
        interfaces = []
        for iface in get_windows_if_list():
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值