anupamshahi007-dot/CodeAlpha_python-network-packet-sniffer
GitHub: anupamshahi007-dot/CodeAlpha_python-network-packet-sniffer
一个基于 Python 和 Scapy 的教育型网络数据包嗅探与协议分析工具,帮助初学者通过实际抓包理解网络通信原理。
Stars: 0 | Forks: 0
捕获 • 分析 • 学习 • 安全
一个使用 Python、Scapy 和 Raw Sockets 构建的适合初学者的网络安全项目,用于捕获、检查和理解实时网络流量。
## 📚 目录 - [✨ 功能](#-features) - [📖 关于本项目](#-about-the-project) - [📁 项目结构](#-project-structure) - [⚙️ 安装说明](#️-installation) - [🚀 示例](#-examples) - [📦 自定义用法](#-custom-usage) - [📊 理解输出](#-understanding-the-output) - [🌐 理解网络数据包](#-understanding-network-packets) - [🎓 学习要点](#-learning-points) - [🛠️ 故障排除](#-troubleshooting) - [🔮 未来路线图](#-future-roadmap) - [⚖️ 合法与合规使用](#️-legal--ethical-use) - [📄 许可证](#-license) - ## 📖 关于本项目 了解数据如何通过网络传输是网络安全和网络通信中最重要的技能之一。 本项目演示了如何捕获实时数据包、检查多种网络协议,并使用 Python 分析数据包信息。它最初是作为一个教育项目而构建的,旨在通过学习现代计算机网络的工作原理来加强编程技能。 无论您是学生、初学者还是网络安全爱好者,本项目都能为您提供数据包嗅探和协议分析的实际操作经验。 ## ✨ 功能 此数据包嗅探器允许您: - ✅ 实时捕获网络流量 - ✅ 分析数据包结构和内容 - ✅ 按协议、端口或 IP 地址过滤流量 - ✅ 提取有用信息(IP、端口、协议、payload) - ✅ 学习网络协议基础知识 ## 项目结构 ``` packet-sniffer-demo/ ├── packet_sniffer.py # Main sniffer module ├── example_basic.py # Example: Basic capture ├── example_http.py # Example: HTTP/HTTPS traffic ├── example_dns.py # Example: DNS queries ├── example_arp.py # Example: ARP traffic ├── example_specific_ip.py # Example: Specific IP filtering ├── requirements.txt # Python dependencies └── README.md # This file ``` ## 🔮 未来路线图 - [ ] 将捕获的数据包导出为 CSV - [ ] 以 PCAP 格式保存捕获的数据 - [ ] 添加终端仪表板 - [ ] IPv6 数据包支持 - [ ] 实时流量统计 - [ ] 图形用户界面 (GUI) ## 🚀 快速开始 ``` pip install -r requirements.txt python example_basic.py ``` 这就是捕获您的第一批数据包所需的全部操作。 ## 安装说明 ### 前置条件 - Python 3.7+ - 管理员/Root 权限(捕获数据包所需) - Windows、macOS 或 Linux ### 设置 1. **克隆或下载本项目** cd packet-sniffer-demo 2. **安装依赖项** pip install -r requirements.txt 3. **使用适当的权限运行** **Windows(以管理员身份运行命令提示符):** python example_basic.py **Linux/macOS(在终端中使用 sudo):** sudo python example_basic.py ## 理解网络数据包 ### 数据包结构 网络数据包是分层的,遵循 OSI 模型: ``` ┌─────────────────────┐ │ Application Layer │ HTTP, DNS, SMTP, etc. ├─────────────────────┤ │ Transport Layer │ TCP (Transmission Control Protocol) │ │ UDP (User Datagram Protocol) ├─────────────────────┤ │ Internet Layer │ IP (Internet Protocol) ├─────────────────────┤ │ Link Layer │ Ethernet, ARP (Address Resolution Protocol) └─────────────────────┘ ``` ### 关键数据包信息 **IP 层:** - **源 IP (Source IP)**:数据包的来源 - **目的 IP (Destination IP)**:数据包的目的地 - **TTL (生存时间)**:用于防止无限循环的跳数限制 - **协议**:TCP、UDP、ICMP 等 **TCP(面向连接):** - **源端口 (Source Port)**:发起连接的端口 - **目标端口 (Destination Port)**:目标端口 - **标志位 (Flags)**:SYN、ACK、FIN(控制信号) - **序列号 (Sequence Number)**:用于有序交付 - **确认号 (Acknowledgment Number)**:确认接收到的数据 **UDP(无连接):** - **源端口 (Source Port)**:发起连接的端口 - **目标端口 (Destination Port)**:目标端口 - **长度 (Length)**:数据大小 **ICMP(Ping、Traceroute):** - **类型 (Type)**:请求、回复等 - **代码 (Code)**:附加详情 **ARP(地址解析):** - 将 IP 地址映射到 MAC 地址 - 使设备能够在局域网 (LAN) 中相互发现 ## 示例 ### 示例 1:基本数据包嗅探 捕获所有流量的前 10 个数据包: ``` python example_basic.py ``` ### 示例 2:HTTP/HTTPS 流量 捕获 Web 浏览器流量(端口 80、443): ``` python example_http.py ``` ### 示例 3:DNS 查询 监控 DNS 请求(端口 53): ``` python example_dns.py ``` ### 示例 4:ARP 流量 捕获网络发现数据包: ``` python example_arp.py ``` ### 示例 5:特定 IP 监控进出特定 IP 的流量: ``` python example_specific_ip.py ``` ## 自定义用法 ### 创建您自己的嗅探器 ``` from packet_sniffer import create_sniffer # 为 50 个 packets 创建 sniffer sniffer = create_sniffer(packet_count=50) # 使用 TCP filter 开始 sniffing sniffer.start_sniffing(packet_filter="tcp") # 打印摘要 sniffer.print_summary() ``` ### 常见过滤器(BPF 语法) ``` # 所有流量 sniffer.start_sniffing() # 特定协议 sniffer.start_sniffing(packet_filter="tcp") # TCP only sniffer.start_sniffing(packet_filter="udp") # UDP only sniffer.start_sniffing(packet_filter="arp") # ARP only sniffer.start_sniffing(packet_filter="icmp") # ICMP (ping) # 特定端口 sniffer.start_sniffing(packet_filter="port 80") # Port 80 sniffer.start_sniffing(packet_filter="port 443") # Port 443 (HTTPS) # 特定 IP sniffer.start_sniffing(packet_filter="host 8.8.8.8") # To/from 8.8.8.8 sniffer.start_sniffing(packet_filter="src host 192.168.1.1") # From specific IP sniffer.start_sniffing(packet_filter="dst host 8.8.8.8") # To specific IP # 组合 sniffer.start_sniffing(packet_filter="tcp port 80 or tcp port 443") sniffer.start_sniffing(packet_filter="tcp and host 8.8.8.8") sniffer.start_sniffing(packet_filter="udp port 53") # DNS queries ``` ### 指定网络接口 ``` # Linux/Mac:使用以下命令查看接口:ifconfig sniffer.start_sniffing(iface="eth0") # Windows:使用以下命令查看接口:ipconfig sniffer.start_sniffing(iface="Ethernet") ``` ## 理解输出 ### 数据包显示 ``` ====================================================================== Packet #1 | Size: 56 bytes Layers: IP -> ICMP [IP] Source IP: 192.168.1.1 Destination IP: 8.8.8.8 TTL: 64 Protocol: 1 [ICMP] Type: 8 Code: 0 ====================================================================== ``` ### 数据包摘要 ``` ====================================================================== Capture Summary ====================================================================== Total packets captured: 25 Protocol Distribution: IP: 23 TCP: 18 UDP: 5 ``` ## 学习要点 ### 您将学到什么 1. **数据包结构**:数据在网络数据包中是如何组织的 2. **协议**:TCP、UDP、ICMP、ARP 之间的区别 3. **端口号**:如何识别应用程序(HTTP=80、HTTPS=443、DNS=53) 4. **IP 寻址**:源地址和目标地址路由 5. **数据流**:信息如何通过网络流动 6. **过滤**:捕获特定流量的技术 ### 协议参考 | 协议 | 层级 | 用途 | 端口 | |----------|-------|---------|------| | TCP | 传输层 | 可靠的、面向连接 | 可变 | | UDP | 传输层 | 快速、无连接 | 可变 | | ICMP | 网络层 | 诊断 (ping) | 无 | | ARP | 链路层 | IP ↔ MAC 映射 | 无 | | HTTP | 应用层 | Web 浏览 | 80 | | HTTPS | 应用层 | 安全 Web | 443 | | DNS | 应用层 | 域名解析 | 53 | | SSH | 应用层 | 安全 shell | 22 | | FTP | 应用层 | 文件传输 | 21 | | SMTP | 应用层 | 电子邮件 | 25 | ## 故障排除 ### “权限被拒绝”或“访问被拒绝” **Windows:** - 以管理员身份运行命令提示符 - 然后运行您的 Python 脚本 **Linux/macOS:** - 使用 `sudo`:`sudo python example_basic.py` ### “No module named 'scapy'” 安装依赖项: ``` pip install -r requirements.txt ``` ### “未捕获到数据包” - 确保网络正在发生活动 - 尝试使用不同的过滤器 - 检查您的互联网连接 - 使用 `ipconfig` (Windows) 或 `ifconfig` (Mac/Linux) 验证网络接口名称 ### 程序挂起 - 按 `Ctrl+C` 停止 - 数据包捕获将显示摘要 ## 高级主题 ### 数据包分析用例 1. **网络故障排除**:诊断连接问题 2. **安全**:检测可疑的流量模式 3. **性能**:识别缓慢的连接或瓶颈 4. **学习**:了解协议的工作原理 5. **开发**:调试网络代码 ### 后续步骤 - 探索 Scapy 文档:https://scapy.readthedocs.io/ - 了解有关网络协议的更多信息 - 构建自定义分析工具 - 监控特定应用程序 - 根据您的需求创建数据包捕获过滤器 ## 重要说明 ### 法律与道德考量 - ⚠️ **仅对您拥有或有权监控的网络进行流量嗅探** - 仅在您自己的设备上或获得明确授权后进行监控 - 未经授权的网络嗅探可能是非法的 - 用于教育目的和合法的系统管理 ### 性能 - 数据包捕获可能会占用大量 CPU 资源 - 大量的捕获可能会使用大量内存 - 考虑使用过滤器来减少数据量 - 完成后停止捕获 (Ctrl+C) ## 资源 - **Scapy 文档**:https://scapy.readthedocs.io/ - **BPF 过滤器语法**:https://www.tcpdump.org/papers/sniffing-faq.html - **TCP/IP 协议套件**:RFC 标准 (IETF) - **端口号**:https://www.iana.org/assignments/service-names-port-numbers/ ## ⭐ 支持 如果这个项目对您有帮助: - ⭐ 为仓库点个 Star - 🍴 Fork 该项目 - 🐛 通过提交 Issue 来报告 bug - 💡 分享改进的想法 您的支持有助于为每个人改进这个教育项目。 ## 📄 许可证 本项目基于 MIT 许可证授权。 它旨在用于教育目的、合规的安全研究以及计算机网络学习。在捕获或分析网络流量之前,请务必确保您已获得许可。 ## 有疑问? 请参考示例或对其进行修改,以满足您的学习目标!标签:Python, Scapy, 内核驱动, 无后门, 网络协议, 网络安全, 网络流量分析, 逆向工具, 防御绕过, 隐私保护