Pritiviraj/Basic-Network-Sniffer-Pritiviraj
GitHub: Pritiviraj/Basic-Network-Sniffer-Pritiviraj
一个基于 Scapy 的轻量级 Python 网络数据包嗅探器,用于实时捕获、解析和展示多协议网络流量,帮助用户理解 TCP/IP 协议栈。
Stars: 1 | Forks: 0
# 🛡️ 基础网络嗅探器 — 实习项目
一个基于 Python 并使用 **Scapy** 构建的网络数据包嗅探器,能够捕获、解析并显示实时网络流量。旨在帮助理解数据如何在网络中流动以及 TCP/IP 协议的基础知识。
## 📁 项目结构
```
network_sniffer/
├── sniffer.py # Main sniffer script
├── requirements.txt # Python dependencies
└── README.md # This file
```
## ⚙️ 设置
### 1. 安装依赖
```
pip install -r requirements.txt
```
### 2. 运行嗅探器
```
# Linux / macOS
sudo python3 sniffer.py
# Windows(以管理员身份运行终端)
python sniffer.py
```
## 🚀 使用示例
```
# 在默认 interface 上捕获无限数量的 packets(verbose mode)
sudo python3 sniffer.py -v
# 仅捕获 50 个 TCP packets
sudo python3 sniffer.py -c 50 -p tcp
# 在特定的 interface 上进行 sniff
sudo python3 sniffer.py -i eth0
# 针对特定主机的流量 Filter
sudo python3 sniffer.py --host 192.168.1.1
# 按 port 进行 Filter(例如,HTTP 流量)
sudo python3 sniffer.py --port 80
# 显示原始 payload bytes
sudo python3 sniffer.py --payload
# 列出可用的 network interfaces
sudo python3 sniffer.py --list-interfaces
# 组合 filters:来自特定主机到 port 443 的 TCP 流量
sudo python3 sniffer.py -p tcp --port 443 --host 8.8.8.8 -v --payload
```
## 🖥️ 输出说明
```
[14:32:01.453] TCP 192.168.1.5:54321 → 142.250.80.46:443 89B
^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^
Proto Source IP:Port → Dest IP:Port Size
```
使用 `-v`(详细模式):
```
MAC aa:bb:cc:dd:ee:ff → 11:22:33:44:55:66 | TTL=64 | Flags=PA | Seq=123 Ack=456
```
使用 `--payload`:
```
Payload [32B]: 47 45 54 20 2f 20 48 54 54 50 | GET / HTTP
```
### 协议颜色图例
| 颜色 | 协议 |
|---------|----------|
| 🟢 绿色 | TCP |
| 🔵 蓝色 | UDP |
| 🟡 黄色 | ICMP |
| 🟣 洋红色 | ARP |
| 🩵 青色 | DNS |
| 🔴 红色 | HTTP |
| ⚪ 白色 | IPv6 |
## 📡 工作原理 — 核心概念
### 分析的层级
```
┌──────────────────────────────────────┐
│ Layer 7 — Application (DNS, HTTP) │
├──────────────────────────────────────┤
│ Layer 4 — Transport (TCP, UDP) │
├──────────────────────────────────────┤
│ Layer 3 — Network (IP, ICMP) │
├──────────────────────────────────────┤
│ Layer 2 — Data Link (Ethernet) │
└──────────────────────────────────────┘
```
### BPF 过滤器 (Berkeley Packet Filter)
过滤器直接传递给 OS 内核以实现高效捕获:
- `tcp` — 仅限 TCP 数据包
- `udp` — 仅限 UDP 数据包
- `host 1.2.3.4` — 仅限去往/来自该 IP 的流量
- `port 80` — 仅限 80 端口上的流量
- 组合使用:`tcp and port 443 and host 8.8.8.8`
### Scapy 核心概念
- `sniff()` — 主捕获函数;`store=False` 可避免内存堆积
- `packet[IP]` — 访问数据包中的特定层
- `packet[TCP].flags` — 读取 TCP 控制标志(SYN, ACK, FIN 等)
- `packet[Raw]` — 访问原始 payload 字节
- `prn=` — 针对每个捕获的数据包调用的回调函数
## ⚠️ 法律与道德声明
## 🎓 你能从本项目中学到什么
| 概念 | 在本项目中的应用 |
|---|---|
| OSI / TCP-IP 模型 | 剖析跨所有 4 层的数据包 |
| IPv4 寻址 | 从 IP 头部解析源/目标 IP |
| TCP 握手 | 观察 SYN, SYN-ACK, ACK 标志 |
| DNS 解析 | 实时查看查询与响应 |
| HTTP | 解析请求方法、主机、路径 |
| BPF 过滤器 | 内核级流量过滤 |
| Socket 编程 | Scapy 使用的底层机制 |
标签:Python, Scapy, 内核驱动, 无后门, 目录遍历, 网络协议, 网络嗅探, 网络工具, 逆向工具, 防御绕过