工具用suricata和wireguard
可以搭建一个本地环境。在主机上安装 WireGuard 作为 VPN 服务端和客户端,同时安装 Suricata 作为入侵检测系统来抓取和分析流量。整个实验的核心思路是:同时抓取物理网卡(看加密的VPN流量)和WireGuard虚拟网卡(看解密后的流量),然后用Wireshark进行对比分析。
桥接模式:将Kali虚拟机的网络设置为桥接模式,使其与Win主机在同一个局域网内。这是最简单的方法,让Suricata监听虚拟机的网卡就能捕获到Win主机发往整个网络的数据包,其中就包括WireGuard的UDP流量
安装WireGuard:从官网下载并安装WireGuard客户端。安装时务必注意,当安装程序弹出第三方安全软件(如TunSafe)的提示时,选择 Decline(拒绝),避免安装不必要的额外软件。
因为网络问题,导致安装程序无法下载它需要的核心组件。
直接安装MSI文件(最推荐)
这相当于安装程序的“离线包”,是绕过在线下载环节最直接有效的方法。
- 下载MSI文件:用浏览器打开官方MSI仓库:
https://download.wireguard.com/windows-client/。这里列出了所有版本,找到最新的wireguard-amd64-{版本号}.msi文件(通常amd64就是64位系统),点击下载。 - 运行安装:下载完成后,直接双击这个
.msi文件,就能像安装普通软件一样开始安装了。- (可选)命令行静默安装:如果你熟悉命令行,可以用
/qn /norestart参数实现静默安装。 - (可选)禁用自启:在企业部署或需要精细控制时,可以通过MSI属性禁止安装后自动启动。
- (可选)命令行静默安装:如果你熟悉命令行,可以用
在 Kali 虚拟机中执行 apt install suricata 时遇到的 Temporary failure resolving 'http.kali.org' 错误,是典型的 DNS 解析失败 问题。这通常意味着虚拟机无法将域名 http.kali.org 转换为 IP 地址。
Kali 默认的 DNS 服务器有时会因为网络环境变化(如切换桥接/NAT模式)失效。
时间太长记错了,我是在Ubuntu上配的suricata
1 | sudo apt update |
1 | E: Could not get lock /var/lib/apt/lists/lock. It is held by process 1640 (packagekitd) |
真服了哪来这么多奇奇怪怪的问题
这个错误是因为系统里的 packagekitd 进程(通常是 GNOME 软件中心的后台服务)正在使用 APT 的锁文件,导致你无法同时运行 apt 命令。这是为了保护包数据库不被多个进程同时修改。
1 | sudo systemctl stop packagekit |
用桥接模式让 Ubuntu 虚拟机与宿主机在同一个局域网内,那么 Ubuntu 的 IP 地址必须与宿主机在同一网段,即 10.163.xxx.xxx,子网掩码 255.255.128.0,网关 10.163.255.254,DNS 可以用网关或公共 DNS。
/etc/netplan/ 下有多个配置文件,且其中存在冲突的网关设置(一个要求 10.163.255.254,另一个要求 192.168.219.2)。Netplan 合并了这些配置,导致断言失败。
1 | sudo netplan apply |
1 | yulian@ubuntu:/etc/netplan$ sudo netplan apply |
systemd-networkd 未运行,导致 netplan 无法应用配置。这可能是因为之前的配置错误导致服务被禁用或崩溃。需要先修复 systemd-networkd 服务。
1 | iface eth0 inet static |
生成密钥对:
1 | cd /etc/wireguard |
创建配置文件 /etc/wireguard/wg0.conf:
1 | sudo nano /etc/wireguard/wg0.conf |
1 | [Interface] |
1 | [Interface] |
1 | ip.src == 127.0.0.1 && ip.dst == 127.0.0.1 && tcp.dstport == 8580 |
1 | TCP 窗口大小几乎不调整 |
1 | 连接行为异常 |
1 | pip install scapy -i https://pypi.tuna.tsinghua.edu.cn/simple |
1 | python pcapng_behavior_analyzer.py 123.pcapng |
| 特征 | 描述要求 | 实际输出情况 | 是否符合 |
|---|---|---|---|
| 高熵持续流 | 负载熵值接近 8.0,且流量持续 | 所有流平均熵值最高仅 6.8(流#29),且标记为“低熵”;无任何流达到 7.5 以上 | 不符合 |
| 非对称流量比 | 上行/下行流量比例显著(>2 或 <0.5) | 存在非对称流(如流#28 比 8.28,流#29 比 13.87) | 部分符合 |
| TCP窗口几乎不调整 | 窗口值变异系数 <0.05 | 多个流窗口变异系数很小(流#6、7、8、15、19 等均 <0.05) | 部分符合 |
| 无固定魔数,依赖行为指纹 | 负载无明显固定字节序列,识别靠行为模式 | 大量流(如流#1、3、6、7、9-12、14、16-18、20-25、28、29)均显示“无固定魔数” | 部分符合 |
| 规律性时间间隔(心跳) | 可选,但常见于此类工具 | 所有流均“否”,未发现规律间隔 | 不符合(非必须) |
1 | 流 #1: 127.0.0.1:7897 <-> 127.0.0.1:62496 |
1 | tcp.flags.syn==1 and tcp.flags.ack==0 |

- 从 3521 到 3546 号包(
94.44到124.38),跨度约 30 秒,共有 26 个包,平均约 0.86 个包/秒,远低于“几十个每秒”。
如果看到相邻 SYN 间隔 < 0.05 秒(即 20 个/秒以上),则可视为高频。
1 | tcp.flags.reset==1 |

大量连接以 RST 结束而不是 FIN → 异常。
Statistics → TCP Stream Graph → Time-Sequence (Stevens)。
正常流应是平滑上升的阶梯;异常流可能出现长时间平坦(无数据传输)后突然跳跃,或频繁的零窗口。

Conversations 统计
- 菜单 Statistics → Conversations,选择 IPv4 或 TCP 标签。
- 找到目标流,查看 Bytes A→B 和 Bytes B→A 两列。
- 计算比值:较大值 / 较小值。若 > 2 或 < 0.5 → 非对称。

用 Wireshark 验证“卡在哪一步”(关键)
你现在应该做的不是盲调,而是抓包。
在 Windows 上开 Wireshark,过滤:
1 | tcp or tls |
Ultrasurf 的本质(决定流量特征)
Ultrasurf 不是简单 HTTP 代理,它本质是:
1 | 加密隧道 + 动态代理网络 + 流量混淆 |
因此它的流量特征一定表现为:
1 | “看起来像 HTTPS,但行为不像正常 HTTPS” |
Previous segment not captured → 丢包
Out-of-Order → 包乱序

网络链路被干扰(核心结论)
常见原因:
1 | 1. 网络限速 / QoS |

1 | 条件一:tls.handshake.type == 1 |
这里有:
1 | TLSv1.3 Client Hello (SNI=www.lamer.com.sg) |
👉 这非常不正常
原因:
1 | Ultrasurf 通常: |
👉 说明它在做“流量伪装”
这正是你后面写 Suricata 规则的切入点
1 | 一、TLS 是什么 |
1 | SNI 是什么 |
1 | 流式传输(Streaming)是什么 |
1 | CDN 是什么 |
1 | 正常 HTTPS(CDN) |
wireshark学习
「单机情况」下,Wireshark直接抓取本机网卡的网络流量;
「交换机情况」下,Wireshark通过端口镜像、ARP欺骗等方式获取局域网中的网络流量。
端口镜像:利用交换机的接口,将局域网的网络流量转发到指定电脑的网卡上。
ARP欺骗:交换机根据MAC地址转发数据,伪装其他终端的MAC地址,从而获取局域网的网络流量。
按 Ctrl + M 也可以实现同样的效果,按两次可以取消标记
不能把“临时源端口”继续交给内核,还指定成 8580。你要做的是显式绑定本地端口:
1 | import socket |
如有错误,多多指教