我有一个路由器和一个管理型交换机以及几个连接到它们的系统:
- 路由器:192.168.10.200
- PC1:192.168.10.1(某种嵌入式 Linux)
- PC2:192.168.10.35(OpenSuse)
- PC3:192.168.10.31(Win 10 主机)
- PC4:192.168.10.32(Xubuntu 16.04 虚拟机)
除了 PC1(我只能通过触摸显示器进行配置并发送数据)之外,我可以从网络上的所有机器 ping 所有其他机器。
PC1 在端口 47555 上发送 UDP 数据包给 PC2仅有的加上广播ADwin配置数据包(此处的目标 IP 为 192.168.10.255)通过其端口 4710。我可以使用 PC3 上的 Wireshark 拦截来自 PC1 的所有数据包,但出于某种原因,即使使用netsh
(我刚刚发现的一个工具)后,我仍然只能获取ADwin配置数据包(在端口 4710 上)但没有 UDP。
我跑了
netsh interface portproxy add v4tov4 listenaddress=192.168.10.1 listenport=47555 connectaddress=192.168.10.32 connectport=47555
我不确定这是我使用的参数还是我们正在谈论的 UDP 事实,或者两者兼而有之。
遗憾的是,我无法更改iptables
PC2 上的设置。否则,我只能将传入的数据包直接重定向到 VM。
任何想法如何解决这一问题?
答案1
UDP 不是 netsh portproxy 配置支持的协议。默认协议是 TCP,因此您的命令将代理该端口上的 TCP 流量。
关于缺乏 UDP 支持的问题,请参阅WSL repo 中的 github 问题。
如果支持 UDP,运行的命令将如下所示:
netsh interface portproxy add v4tov4 listenaddress=192.168.10.1 listenport=47555 connectaddress=192.168.10.32 connectport=47555 protocol=udp
不幸的是,如果你运行该命令,你会收到有关参数不正确的错误:
PS C:\> netsh interface portproxy add v4tov4 listenaddress=192.168.10.1 listenport=47555 connectaddress=192.168.10.32 connectport=47555 protocol=udp
The parameter is incorrect.
并且,如果将最后一部分更改为protocol=tcp
,您将看到该命令成功建立了 TCP 隧道。
您还可以通过不带参数运行它来判断默认值是 TCP:
PS C:\> netsh interface portproxy add v4tov4
One or more essential parameters were not entered.
Verify the required parameters, and reenter them.
The syntax supplied for this command is not valid. Check help for the correct syntax.
Usage: add v4tov4 [listenport=]<integer>|<servicename>
[connectaddress=]<IPv4 address>|<hostname>
[[connectport=]<integer>|<servicename>]
[[listenaddress=]<IPv4 address>|<hostname>]
[[protocol=]tcp]
Parameters:
Tag Value
listenport - IPv4 port on which to listen.
connectaddress - IPv4 address to which to connect.
connectport - IPv4 port to which to connect.
listenaddress - IPv4 address on which to listen.
protocol - Protocol to use. Currently only TCP is supported.
Remarks: Adds an entry to listen on for IPv4 and proxy connect to via IPv4.
(请注意最后一行:[[protocol=]tcp]
。)