onurtnc/netsentry
GitHub: onurtnc/netsentry
零依赖的 Python 网络流量分析工具,从 PCAP 文件中自动检测 C2 beacon、DNS 隧道、数据泄露等恶意行为并生成优先级报告。
Stars: 0 | Forks: 0
# NetSentry
**在 PCAP 文件中搜索 C2 beacon、DNS 隧道、端口扫描和数据泄露的零依赖网络分析工具。**




无需安装 `scapy`、`dpkt`、`pyshark` 或 Wireshark。PCAP/PCAPNG 解析器,
Ethernet/IP/TCP/UDP/DNS/HTTP/TLS 解析器以及九个探测器完全使用 Python
标准库编写。
## 为什么需要它?
Wireshark 是一款出色的工具,但它无法回答“这次抓包中有恶意行为吗?”这个问题——你需要自己编写过滤器。NetSentry 自动化了这第一步:
提取会话流,执行行为分析,并为您提供**已设置优先级的
发现列表**。之后您再打开 Wireshark 时,就会知道该查看哪个会话流了。
## 检测能力
| 代码 | 发现 | 工作原理 |
|---|---|---|
| `NS-BEACON` | **C2 beacon** | 测量重复连接到同一目标的间隔差异(jitter)。机器生成的 beacon 非常有规律;而正常流量则不然。排除 DNS/NTP 等自然的周期性协议。 |
| `NS-DNSTUN` | **DNS 隧道** | 综合评估子域名长度、Shannon 熵、唯一子域名比例以及 TXT/NULL 查询密度。 |
| `NS-DGA` | **DGA 域名** | 通过高熵 + 低元音比例 + 数字密度检测算法生成的域名。 |
| `NS-PORTSCAN` | **端口扫描** | 来自单一源的大量无响应 SYN。 |
| `NS-SWEEP` | **主机扫描** | 来自单一源向大量不同目标发起的连接尝试。 |
| `NS-EXFIL` | **数据泄露** | 发往单一外部目标的流量体积以及发送/接收字节比。 |
| `NS-BADPORT` | **可疑端口** | 4444 (Metasploit)、1337、31337、6667 (IRC C2)、Tor、矿池端口。 |
| `NS-CLEARAUTH` / `NS-FTPCLEAR` / `NS-TELNET` | **明文凭证** | HTTP `Authorization`、FTP `USER/PASS`、Telnet 会话。 |
| `NS-EXEDL` | **通过 HTTP 下载 exe** | 通过明文 HTTP 请求 `.exe/.dll/.ps1/.hta`。 |
| `NS-BADUA` | **自动化工具流量** | `curl`、`python-requests`、`powershell`、`sqlmap` 等 User-Agent 或缺失 UA。 |
| `NS-BADTLD` | **高风险 TLD** | `.top`、`.xyz`、`.zip`、`duckdns.org`、`ngrok.io` 等目标 (HTTP Host + TLS SNI)。 |
| `NS-ICMPTUN` | **ICMP 隧道** | 超过 128 字节的 ICMP 负载。 |
此外提取的元数据:DNS 查询列表、HTTP 请求、**TLS SNI 域名**、
会话流表、最活跃的通信源。
## 安装说明
```
git clone https://github.com//netsentry.git
cd netsentry
python -m netsentry samples/ornek_trafik.pcap
```
将其添加为命令:`pip install -e .`
## 使用方法
```
# 基础分析
python -m netsentry capture.pcap
# HTML + JSON 报告
python -m netsentry capture.pcapng --html rapor.html --json bulgular.json
# 仅 metadata 输出(可用 grep/awk 处理)
python -m netsentry capture.pcap --dns
python -m netsentry capture.pcap --http
python -m netsentry capture.pcap --flows
# 灵敏度设置
python -m netsentry capture.pcap --beacon-jitter 0.30 --beacon-min-events 4
python -m netsentry capture.pcap --exfil-mb 50
# CI / 自动化
python -m netsentry capture.pcap --fail-on high --quiet
```
### 输出示例
```
==============================================================================
NetSentry - Ag Trafigi Analiz Raporu
==============================================================================
Paket : 1158 Veri: 1.3 MB Akis: 34
Zaman : 2026-07-25 17:20:00 - 2026-07-25 17:33:20 (799.6 sn)
DNS : 66 sorgu HTTP: 2 istek TLS: 26 SNI
Risk : [####################] 100/100 Bulgu: 12
------------------------------------------------------------------------------
[CRITICAL] Duzenli aralikli baglanti (olasi C2 beacon)
10.0.0.23 adresi cdn-telemetry.top:443 hedefine 14 kez, ortalama 60.0
saniye araliklarla baglandi (jitter %0.6).
- aralik ornekleri: 59.7s, 60.3s, 60.0s, 59.5s, 59.9s, 60.4s
- toplam veri: 6.5KB
[CRITICAL] DNS tunelleme / DNS uzerinden veri sizdirma
'datatransfer.xyz' alan adina yapilan sorgular veri tasima deseni gosteriyor:
ortalama alt alan uzunlugu 48 karakter; yuksek entropi (4.59 bit/karakter);
46 farkli alt alan adi / 46 sorgu; 16 adet TXT/NULL sorgusu.
- 23ztub1wgkfatmkmgfk9zpd1o0v934meeeixrybapd89hzr7.tun.datatransfer.xyz
```
## 示例抓包
`samples/ornek_trafik.pcap` **完全是合成的** — 由 `tools/make_sample_pcap.py`
生成,并非来自真实网络。其中包含特意植入的
12 种不同场景(正常的 Web 流量 + 每种探测器的一个示例)。
重新生成:
```
python tools/make_sample_pcap.py
```
为了减小文件大小,大型传输包被**截断**保存
(`tcpdump -s` 行为);由于原始包大小保留在头部中,字节
统计信息依然准确。
## Beacon 检测的工作原理?
```
aralıklar = [t2-t1, t3-t2, ...]
jitter = stdev(aralıklar) / mean(aralıklar)
```
| jitter | 解释 |
|---|---|
| < 0.08 | 几乎是机械般的规律 → **critical** |
| 0.08 - 0.15 | 添加了微弱随机化的 beacon → **high** |
| > 0.15 | 正常的应用程序/人工流量 → 不报告 |
在现实世界中,C2 框架会添加 jitter(例如 Cobalt Strike `%20 jitter`)。
您可以使用 `--beacon-jitter 0.35` 放宽阈值进行更广泛的扫描 —
误报数量会增加,但捕获隐藏 beacon 的几率也会提高。
## 架构
```
netsentry/
├── pcap.py PCAP + PCAPNG okuyucu/yazici (saf struct)
├── decode.py Ethernet/VLAN, IPv4/IPv6, TCP/UDP/ICMP, DNS, HTTP, TLS SNI
├── flows.py Paket -> akis toplama, ic/dis ag ayrimi, istatistik
├── detect.py Dokuz dedektor + Shannon entropi yardimcilari
├── report.py Konsol / JSON / HTML ciktilari
└── cli.py argparse arayuzu
tools/
└── make_sample_pcap.py Sentetik ornek yakalama ureticisi
```
支持的链路类型:Ethernet (1)、RAW IP (101)、Linux cooked (113)、NULL/loopback (0)。
## 测试
```
python tools/make_sample_pcap.py # ornek pcap'i uret
python -m unittest discover -s tests -v
```
测试中还包括像**“正常流量不应被标记为 beacon”**这样的
误报回归测试。
## 路线图
- [ ] JA3/JA3S TLS 指纹
- [ ] TCP 会话流重组(文件提取)
- [ ] Zeek `conn.log` / `dns.log` 导出
- [ ] 实时接口监听模式(需要 root 权限)
- [ ] 与 IOCForge 集成:自动丰富发现的 IP/域名
- [ ] IPv6 扩展头部的完整解析
## 免责声明
这是一款防御性工具。请仅在您有权抓包的网络中使用。
发现结果不是自动判定,而是调查的起点 —— 特别是 beacon 和 DGA
检测具有统计性质,可能会产生误报。
## 许可证
MIT — 见 [LICENSE](LICENSE)。
标签:IP 地址批量处理, LNA, PCAP解析, Python, 威胁发现, 插件系统, 无后门, 网络流量分析, 逆向工具