Windows 上的数据包重定向
Packet Redirection on Windows
由于软件限制,我们目前在所有机器上 运行 windows。
然而,在此范围内,我们需要将进入 IP 和端口的某些数据包重定向到不同的端口(相同的 IP)。我们有软件监听 "Proxy Port".
这可以通过 linux 上的 IPTables 通过执行类似于以下操作来实现:
iptables -t nat -I PREROUTING -p udp -d <DSTIP> --dport <DSTPORT> -m u32 --u32 '0>>22&0x3C@8=0xFFFFFFFF && 0>>22&0x3C@12=0x54536F75 && 0>>22&0x3C@16=0x72636520 && 0>>22&0x3C@20=0x456E6769 && 0>>22&0x3C@24=0x6E652051 && 0>>22&0x3C@28=0x75657279' -j REDIRECT --to-port <REDIRECT PORT>
这在 linux 上非常有效,并且会将某些数据包重定向到我们的代理软件,但是是否可以在 windows 上执行此类操作而无需在前面获得专用机器我们的 windows 台机器?
我正在考虑用 pcap.net 编写一些东西,但我猜这必须直接从 NIC 读取而不是 windows?
来自MSDN:
Netsh is a command-line scripting utility that allows you to, either
locally or remotely, display or modify the network configuration of a
computer that is currently running.
您可以使用以下命令将到达任何端口的连接重定向到另一个本地(或远程)端口:
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
此外,如 this SO post 所述,netsh 是 Windows 上 iptabes 的良好替代品。
命令
netsh interface portproxy ...
进行端口代理但不进行数据包转发。主要区别是
- 性能比 iptables 差很多(f.e。参见 https://plus.google.com/+OlafMonien/posts/fsjUjropYeR)
- 源 IP 地址更改为本地主机(127.0.0.1 或 ::1 取决于 IP 版本),您丢失了原始请求源 IP 地址。
我们一直在使用这种技术进行端口转发,但在这些发现之后,我们不得不在网络防火墙上使用额外的规则来避免使用 netsh。
由于软件限制,我们目前在所有机器上 运行 windows。
然而,在此范围内,我们需要将进入 IP 和端口的某些数据包重定向到不同的端口(相同的 IP)。我们有软件监听 "Proxy Port".
这可以通过 linux 上的 IPTables 通过执行类似于以下操作来实现:
iptables -t nat -I PREROUTING -p udp -d <DSTIP> --dport <DSTPORT> -m u32 --u32 '0>>22&0x3C@8=0xFFFFFFFF && 0>>22&0x3C@12=0x54536F75 && 0>>22&0x3C@16=0x72636520 && 0>>22&0x3C@20=0x456E6769 && 0>>22&0x3C@24=0x6E652051 && 0>>22&0x3C@28=0x75657279' -j REDIRECT --to-port <REDIRECT PORT>
这在 linux 上非常有效,并且会将某些数据包重定向到我们的代理软件,但是是否可以在 windows 上执行此类操作而无需在前面获得专用机器我们的 windows 台机器?
我正在考虑用 pcap.net 编写一些东西,但我猜这必须直接从 NIC 读取而不是 windows?
来自MSDN:
Netsh is a command-line scripting utility that allows you to, either locally or remotely, display or modify the network configuration of a computer that is currently running.
您可以使用以下命令将到达任何端口的连接重定向到另一个本地(或远程)端口:
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
此外,如 this SO post 所述,netsh 是 Windows 上 iptabes 的良好替代品。
命令
netsh interface portproxy ...
进行端口代理但不进行数据包转发。主要区别是
- 性能比 iptables 差很多(f.e。参见 https://plus.google.com/+OlafMonien/posts/fsjUjropYeR)
- 源 IP 地址更改为本地主机(127.0.0.1 或 ::1 取决于 IP 版本),您丢失了原始请求源 IP 地址。
我们一直在使用这种技术进行端口转发,但在这些发现之后,我们不得不在网络防火墙上使用额外的规则来避免使用 netsh。