在 Windows 上,我需要将一个 IP 地址(例如 10.255.255.255)的所有流量映射到另一个 IP 地址(例如 127.0.0.1)。
我遇到了 netsh interface portproxy 并且尝试过了。
netsh interface portproxy add v4tov4 listenaddress=10.255.255.255 listenport=7073 connectaddress=127.0.0.1 connectport=7071
目标是,如果用户发送任何数据包到,10.255.255.255:7073
就像她将数据包发送到127.0.0.1:7071
netsh interface portproxy show all
Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
10.255.255.255 7073 127.0.0.1 7071
我还添加了 7073 端口的防火墙规则。
netsh advfirewall firewall add rule name="7073 port" protocol=TCP dir=in localport=7073 action=allow
这是在 Windows 11 上。
netstat -na|find "7073" 的结果为空,7071 的结果相同,如下所示
netstat -na|find "7071"
TCP 0.0.0.0:7071 0.0.0.0:0 LISTENING
在我的应用程序中,我首先尝试通过 Postman 将请求发送到 10.255.255.255:7073,但出现超时。同一请求可以成功发送到 127.0.0.1:7071。
如果我通过 telnet 连接到 7073,它就无法连接。
telnet 10.255.255.255 7073
Connecting To 10.255.255.255...Could not open connection to the host, on port 7073: Connect failed
我已检查IP Helper
服务是否也在运行。
我的目的是,如果用户已经可以向 发送请求127.0.0.1:7071
,那么在端口转发之后,他们也可以向 发送请求10.255.255.255:7073
并看到相同的行为。我的应用程序实际上发送的是 HTTP 请求。
请注意,实际上没有服务在监听7073
传入流量。但这就是重点,我希望任何向此端口发送任何内容的人(即使没有人在监听它)都会将流量发送到7071
(有人在监听它)。
关于将一个 IP:port 映射到另一个 IP 以将所有网络流量从源 IP 转发到目标 IP,我的方法正确吗?
如果是,那么这里可能存在什么问题?
谢谢
答案1
该命令的问题在于指定和netsh
的参数时,这些参数用于
listenaddress
connectaddress
一个特定的 IP 地址,而不是地址范围。
因此,您使用的语法10.255.255.255
指定了这个精确的 IP 地址,而不是整个10.*
地址范围。
文档 Netsh 接口 portproxy 命令 - 添加 v4tov4 说:
连接地址
指定IPv4 地址要连接到的计算机。可接受的值是 IP 地址、计算机 NetBIOS 名称或计算机 DNS 名称。如果未指定地址,则默认为本地计算机。
监听地址
指定IPv4 地址要监听的对象。可接受的值是 IP 地址、计算机 NetBIOS 名称或计算机 DNS 名称。如果未指定地址,则默认为本地计算机。
如果您希望重新创建端口代理,则需要先删除使用以下命令创建的端口代理 删除 v4tov4。