veervishal-dubey/Argos-NIDS

GitHub: veervishal-dubey/Argos-NIDS

一个用 Python 从底层 raw socket 手写实现的轻量级网络入侵检测系统,当前阶段专注于数据包捕获与多协议逐字节解析。

Stars: 0 | Forks: 0

# Argos-NIDS Argos-NIDS 是一个轻量级且可扩展的网络入侵检测系统(NIDS),旨在从底层理解网络流量,并逐步演变成一个完整的入侵检测解决方案。该项目分多个阶段进行开发,从原始数据包捕获和协议解析开始,随后逐步推进到基于规则的检测、告警生成、流追踪以及报告生成。 ## 项目概述 Argos-NIDS 的目标是构建一个不依赖现有数据包分析框架(如 Scapy 或 PyShark)的入侵检测系统。相反,数据包直接通过 Linux raw sockets 从网络接口捕获,并进行手动解码。 本项目侧重于理解以下内容: - 网络协议内部原理 - Raw socket 编程 - 数据包解析 - 流量分析 - 基于特征的入侵检测 - 网络安全基础 # 开发路线图 | 阶段 | 模块 | 描述 | 状态 | |------|---------|-------------|--------| | **阶段 1** | Packet Sniffer | 捕获原始数据包并解码 Ethernet、ARP、IPv4、IPv6、TCP、UDP 和 ICMP 头。 | ✅ 已完成 | | **阶段 2** | Rule Engine | 对解析后的数据包应用检测规则并识别可疑流量。 | ⏳ 计划中 | | **阶段 3** | Alert System | 为恶意或异常流量生成实时告警。 | ⏳ 计划中 | | **阶段 4** | Flow Tracking | 维护 TCP/UDP 会话并将数据包关联为流。 | ⏳ 计划中 | | **阶段 5** | Logging | 记录告警和流量元数据,以用于分析和审计。 | ⏳ 计划中 | | **阶段 6** | Output & Reporting | 改进控制台输出并生成报告/仪表板。 | ⏳ 计划中 | # 当前进度 | 组件 | 完成度 | 状态 | |------------|-------------:|--------| | Packet Sniffer | 40% | ✅ 已完成 | | Rule Engine | 25% | ⏳ 计划中 | | Alert System | 15% | ⏳ 计划中 | | Flow Tracking | 10% | ⏳ 计划中 | | Logging | 5% | ⏳ 计划中 | | Output & Reporting | 5% | ⏳ 计划中 | # 阶段 1 – Packet Sniffer 第一阶段实现了一个原始的数据包嗅探器,能够直接从 Linux 网络接口捕获实时网络流量。 使用 raw sockets (`AF_PACKET`),该嗅探器捕获每一个 Ethernet 帧并手动解析协议头,无需使用任何第三方数据包分析库。 ## 功能 ### Ethernet II - 源 MAC 地址 - 目标 MAC 地址 - EtherType 检测 ### ARP - 请求 / 响应操作 - 发送方 MAC 地址 - 发送方 IP 地址 - 目标 MAC 地址 - 目标 IP 地址 ### IPv4 - 版本 - 头长度 - 生存时间 (TTL) - 源 IP 地址 - 目标 IP 地址 - 封装协议 ### IPv6 - 源地址 - 目标地址 - 流量类别 - 负载长度 - 下一头部 (Next Header) - 跳数限制 (Hop Limit) ### TCP - 源端口 - 目标端口 - 序列号 - 确认号 - 窗口大小 - TCP 标志 - SYN - ACK - FIN - RST - PSH - URG ### UDP - 源端口 - 目标端口 - 数据报长度 ### ICMP 支持解码常见的 ICMP 消息类型: - 回显请求 - 回显应答 - 目标不可达 - 重定向 - 超时 ``` flowchart TD A[Ethernet Frame] A -->|0x0800| B[IPv4] A -->|0x0806| C[ARP] A -->|0x86DD| D[IPv6] B -->|Protocol 6| E[TCP] B -->|Protocol 17| F[UDP] B -->|Protocol 1| G[ICMP] D -->|Next Header 6| H[TCP] D -->|Next Header 17| I[UDP] ``` ``` flowchart LR A["Ethernet Header
14 Bytes"] B["IP Header
20 Bytes"] C["TCP Header
20 Bytes"] D["Payload
Variable Length"] A --> B --> C --> D ``` # 使用的技术 - Python 3 - Linux Raw Sockets (`AF_PACKET`) - Python `socket` 库 - Python `struct` 模块 # 环境要求 - Linux 操作系统 - Python 3.8+ - Root 权限(raw socket 访问所需) # 安装说明 克隆代码库: ``` git clone https://github.com//Argos-NIDS.git cd Argos-NIDS ``` # 运行 Packet Sniffer 请使用 root 权限执行: ``` sudo python3 packet_sniffer.py ``` 程序当前监听: ``` sampleSocket.bind(("enp0s3", 0)) ``` 如有需要,请将 `enp0s3` 更改为您系统的网络接口。 # 示例输出 ``` Source MAC: 08:00:27:ab:cd:ef Destination MAC: ff:ff:ff:ff:ff:ff EtherType: 2048 Version: 4 Header Length: 5 TTL: 64 Protocol: TCP Source IP Address: 192.168.1.5 Destination IP Address: 142.250.183.110 Source Port: 51124 Destination Port: 443 Sequence Number: 38194512 Acknowledgement Number: 0 Window Size: 64240 Flags: ['SYN'] ``` # 项目结构 ``` Argos-NIDS/ │ ├── packet_sniffer.py ├── README.md └── LICENSE ``` # 工作原理 1. 使用 Linux `AF_PACKET` 接口创建 raw socket。 2. 直接从选定的网络接口捕获 Ethernet 帧。 3. 解析 Ethernet 头。 4. 使用 EtherType 字段识别封装的协议。 5. 解码 IPv4、IPv6 或 ARP 数据包。 6. 解析传输层协议(TCP、UDP、ICMP)。 7. 以易读的格式显示解析后的数据包信息。 # 为什么要开发这个项目? 大多数数据包分析器依赖于强大的第三方库,这些库将协议解析的具体细节隐藏了起来。 而 Argos-NIDS 则是通过手动解码数据包,以深入理解以下内容: - 二进制协议格式 - TCP/IP 网络 - 数据包检查 - 入侵检测原理 - 网络安全工程 这种底层方法也为在未来的阶段中实现自定义检测逻辑提供了灵活的基础。 # 未来改进 数据包嗅探器是整个入侵检测系统的基础。未来的开发将包括: - 基于规则的检测引擎 - 特征匹配 - 端口扫描检测 - SYN flood 检测 - ICMP flood 检测 - 可疑数据包识别 - 状态流追踪 - 告警生成 - 日志文件创建 - JSON/CSV 导出 - 实时仪表板 - 用于自定义规则的配置文件 # 学习成果 本项目展示了以下内容的实际应用: - Raw socket 编程 - Ethernet 帧解析 - IPv4 和 IPv6 头解码 - TCP、UDP、ICMP 和 ARP 解析 - 使用 Python 的 `struct` 模块进行二进制数据解包 - 网络协议分析 - 入侵检测系统的基础 # 免责声明 Argos-NIDS 仅用于教育目的和经过授权的安全测试。 请仅在获得明确许可的系统或网络上监控或检查网络流量。 # 开源许可证 本项目基于 MIT License 授权。 **作者:** Veer Dubey **项目:** Argos-NIDS – 一个模块化的网络入侵检测系统
标签:Python, 入侵检测系统, 原始套接字, 安全数据湖, 数据包解析, 无后门, 网络安全, 网络流量分析, 防御绕过, 隐私保护