StreamDivert 是一款用于对系统上的入站和出站网络连接进行中间人攻击或中继的工具。例如,它能够将所有发往 445 端口的入站 SMB 连接中继到另一台服务器,或者仅将来自特定源 IP 地址集合的特定入站 SMB 连接中继到另一台服务器。总而言之,StreamDivert 能够:
StreamDivert 的预编译二进制文件可从此处下载。
如何使用 StreamDivert?以管理员权限运行该工具:
streamdivert.exe config_file [-f] [-v]
配置文件中包含您想要重定向的流条目。示例配置文件如下:
//将来自10.0.1.50的入站TCP连接(端口445,SMB)全部重定向到10.0.1.49的445端口
tcp < 445 10.0.1.50 -> 10.0.1.49 445
//将来自10.0.1.51的入站TCP连接(端口445,SMB)全部重定向到本地的SOCKS服务器
tcp < 445 10.0.1.51 -> socks
//将来自fe80::f477:846a:775d:d37的入站TCP连接(端口445,SMB)全部重定向到fe80::20c:29ff:fe6f:88ff的445端口
tcp < 445 fe80::f477:846a:775d:d37 -> fe80::20c:29ff:fe6f:88ff 445
//将所有入站TCP连接(端口445,SMB)重定向到10.0.1.48的445端口
tcp < 445 0.0.0.0 -> 10.0.1.48 445
//将所有入站UDP连接(端口53,DNS)重定向到10.0.1.49的53端口
udp < 53 0.0.0.0 -> 10.0.1.49 53
//将所有来自10.0.1.50的入站ICMP数据包重定向到10.0.1.49
icmp < 10.0.1.50 -> 10.0.1.49
//将所有到10.0.1.50端口80的出站TCP连接重定向到10.0.1.49的8080端口
tcp > 10.0.1.50 80 -> 10.0.1.49 8080
//将所有发往10.0.1.50端口80的数据包通过接口9发送。如果该接口不存在或未启动,则数据包从默认接口发送。
tcp > 10.0.1.50 80 -> 10.0.1.50 80 interface 9
//强制所有发往10.0.1.50端口80的数据包通过接口9,如果接口不存在或未启动则丢弃数据包。
tcp > 10.0.1.50 80 -> 10.0.1.50 80 force interface 9
//将所有出站UDP连接(端口53,DNS)重定向到10.0.1.49的53端口
udp > 0.0.0.0 53 -> 10.0.1.49 53
当提供 [-f] 标志时,StreamDivert 会修改 Windows 防火墙,为应用程序添加例外规则,以便正确地将入站流量重定向到另一个端口。
[-v] 标志控制日志记录的详细程度。使用时,StreamDivert 将记录重定向的数据包和流的详细信息。
在配置重定向连接时,需要注意避免冲突的重定向流。请看以下示例配置文件:
icmp < 0.0.0.0 -> 10.0.1.50
icmp > 10.0.1.49 -> 10.0.1.48
这两个重定向流会相互冲突,因为第一个重定向流的数据包也会被第二个数据包“重定向器”捕获。通常情况下,只有使用 UDP 和 ICMP 并且使用通配符时才会遇到此类问题。
另外请注意,不支持将 IPv4 重定向到 IPv6 地址,反之亦然(针对 UDP 和 ICMP 流量)。
期望的功能: