情况如下,运行 Win 7 Pro SP1(版本 6.1.7601),Windows 防火墙已完全禁用(甚至添加了规则以允许任何内容通过,以防万一它仍然在运行),后台没有运行任何程序(关闭了所有不必要的服务/exe),ipv6 已安装并运行良好,netsh isatap 和 6to4 已启用。Teredo 设置为默认状态。
首先,我可以为 192/8 接口设置一个 netsh v4tov4 portproxy,在这种情况下,portproxy 将正常工作。在两个提升的命令 shell 中,我运行:
REM Admin Shell 1
ncat.exe -l 192.168.2.173 13337
REM Admin Shell 2
netsh interface portproxy add v4tov4 listenport=18080 connectport=13337 connectaddress=192.168.2.173
netsh interface portproxy show all
Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
* 18080 192.168.2.173 13337
ncat 192.168.2.173 18080
[type a message and it will popup in shell 1]
C:\temp>netstat -a -b | grep -E -A1 13337
TCP 192.168.2.173:13337 Windows7_x64:0 LISTENING
[ncat.exe]
端口代理转发和 netcat 按预期工作。
接下来,简单地更改为 localhost(解析为 [::1])或明确使用带有 v4tov4 规则的 127.0.0.1(也尝试过 v6tov4)每次都会失败。
例如以 127.0.0.1 开头
REM Admin Shell 1
ncat.exe -l 127.0.0.1 13337
REM Admin Shell 2
netsh interface portproxy add v4tov4 listenport=18080 connectport=13337 connectaddress=127.0.0.1
netsh interface portproxy show all
Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
* 18080 127.0.0.1 13337
ncat 127.0.0.1 18080
Ncat: No connection could be made because the target machine actively refused it. .
C:\temp>netstat -a -b | grep -E -A1 13337
TCP 127.0.0.1:13337 Windows7_x64:0 LISTENING
[ncat.exe]
最后,删除所有旧的 netsh 规则,并尝试使用 v6tov6,这也是一个彻底的失败:
REM Admin Shell 1
ncat.exe -6 -l [::1] 13337
REM Admin Shell 2
netsh interface portproxy add v6tov6 listenport=18080 connectport=13337 connectaddress=[::1]
netsh interface portproxy show all
Listen on ipv6: Connect to ipv6:
Address Port Address Port
--------------- ---------- --------------- ----------
* 18080 [::1] 13337
ncat -6 [::1] 18080
Ncat: No connection could be made because the target machine actively refused it.
C:\temp>netstat -a -b | grep -E -A1 13337
TCP [::1]:13337 Windows7_x64:0 LISTENING
[ncat.exe]
注意 Windows7_x64 是本地主机,并且界面似乎运行正常。
C:\>ping localhost
Pinging Windows7_x64 [::1] with 32 bytes of data:
Reply from ::1: time<1ms
另外,我还可以直接连接到监听的 netcat 端点并发送数据,没有任何问题:
ncat -6 [::1] 13337
问题肯定出在 netsh portproxy 规则上。
那么这是怎么回事呢?防火墙已完全关闭。shell 已提升。没有其他程序在运行以妨碍操作(没有 AV/IDS)。
我尝试添加各种 v6tov4 和 v4tov6 规则组合,但也没有起到任何作用。MS Message Analyzer 没有帮助,因为即使建立了连接,它也不会拾取本地主机接口。
有任何想法吗?
编辑 2016/10/15 23:58EST: 停止以下六项服务将全面禁用端口代理。这表明其中一项服务与正在发生的事情有关。
sc stop homegrouplistener
sc stop Browser
sc stop lanmanserver
sc stop smb
sc stop iphlpsvc
答案1
这是设计使然。到达环回接口(Windows 上实际上不存在)的数据包只能来自127.0.0.0/8
。同样,您无法将数据包发送到 ,127.0.0.0/8
因为没有到其他位置的路由。这意味着即使流量到达,监听程序也无法响应。
如果你使用代理程序,它会从外部网络获取流量并产生新的环回接口上的流量(反之亦然)。这将起作用。
考虑以下(OS X)nmap示例:
sudo nmap -Pn -p 80 -S 192.168.2.1 -e lo0 127.0.0.1
它将强制(通过 root)将数据包注入环回接口。这可以通过tcpdump -i lo0
在另一个终端上运行来验证。但是,即使在nc
监听时,它也无法找到开放端口。但是,以下命令可以按预期找到监听器:
nmap -p 80 -e lo0 127.0.0.1