Skip to content

GDUTMeow/NetSniffer

Repository files navigation

NetSniffer

wakatime

使用说明

Important

本课程设计在 Linux 系统中能够完美运行,但是在 Windows 和 MacOS 的运行能力不保证

在 Linux 上运行的时候,请使用 sudo 运行

前置条件

快速开始

首先 clone 本仓库

$ git clone https://github.com/GDUTMeow/NetSniffer.git

然后进入目录,同步一下轮子

$ cd NetSniffer
$ uv sync

接着带上 sudo 运行即可

$ sudo uv run app.py

运行后会出现网卡列表,选择需要监听的网卡,点击 Start 按钮

Welcome Screen

进入抓包页面,点击上方 Start 按钮即可抓包,左侧会显示当前抓到的列表,双击对应行即可查看此包的内容

Capture Screen

打包可执行文件

首先需要先同步一下开发环境

$ uv sync --extra dev

同步完成后运行 build.sh,或者直接运行

$ pyinstaller --onefile --name NetSniffer --clean -F app.py

打包好的程序会在 ./dist 文件夹内,如果是 Linux 和 MacOS 应该为 NetSniffer,如果是 Windows 则为 NetSniffer.exe

进行开发

目前程序可以拓展的地方在于应用层的解析,应用层的对应模型请放在 /models/application 文件夹内,其中明文解析器放入 plain 文件夹,数据流解析器放入 binary 文件夹,文件名字为对应的协议名字

完成模型封装后,在 /models/applications/__init__.py 中的 SERVICES_PORT_MAPPING 添加对应的服务端口映射和在 SERVICES_FEATURES_MAPPING 中添加对应的服务特征列表映射即可

需求分析

编程实现简单的网络嗅探器——协议分析

已知技术参数和设计要求

  • 利用原始套接字实现简单的网络嗅探器
  • 系统功能
    • 原始套接字与网卡绑定,并接收流经网卡的所有数据包
    • 对数据包进行分析以获得源IP地址和目的IP地址
    • 对数据包进行分析以获得运输层协议类型、源端口号和目的端口号
    • 对数据包进行分析以获得数据包的长度
    • 也可以只分析一种协议,比如IEEE802.3协议、IP协议、TCP协议、或UDP协议等。如果每层协议都分析,可获加分
    • 显示分析结果
  • 开发工具不限,建议使用VC++

设计内容与步骤

  • 学习原始套接字编程的基本机制
  • 学习对数据包进行协议分析的基本方法
  • 设计简单网络嗅探器的基本框架
  • 设计并实现简单的网络嗅探器
  • 课程设计任务说明书

设计工作计划与进度安排

  • 原始套接字编程的基本机制(2h)
  • 对数据包进行协议分析的基本方法(4h)
  • 程序设计以及调试方法(2h)
  • 简单网络嗅探器框架结构设计(4h)
  • 简单网络嗅探器设计与实现(16h)
  • 课程设计说明书(12h)

更新日志

  • 20260520 收尾,修复已选择行时进行重新抓包导致的状态量未清除而爆炸的问题,更新 README,添加开发指引
  • 20260519 在欢迎页面添加了网卡选择功能,以在代码中解绑网卡;引入基于特征码的应用层识别
  • 20260518 玩三角洲去了
  • 20260517 修复了 DNS 无法解析 AAAA 的问题,完成 TUI 部分
  • 20260516 完成了应用层 DNS、FTP、Redis、NTP 的数据解析,完成了解析器的逐层解析功能
  • 20260515 适配 Windows 的端口绑定,完成了网络层、传输层和应用层的 HTTP 数据包格式解析
  • 20260514 初始化项目,添加项目说明书,完成监听器绑定,完成数据链路层的数据包格式解析

About

2025-2026 学年计算机网络课程设计个人留档:实现简单的网络嗅探器(含协议分析)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors