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, 内核驱动, 无后门, 目录遍历, 网络协议, 网络嗅探, 网络工具, 逆向工具, 防御绕过