
状況は次のとおりです。Win 7 Pro SP1 (バージョン 6.1.7601) を実行しており、Windows ファイアウォールは完全に無効になっています (万が一、まだ動作している場合に備えて、すべてを通過させるルールも追加しました)。バックグラウンドで実行されているプログラムはありません (不要なサービス/exe はすべて強制終了しました)。ipv6 がインストールされ、正常に動作しています。netsh isatap と 6to4 は有効になっています。Teredo はデフォルトの状態に設定されています。
まず、192/8 インターフェイスに netsh v4tov4 ポートプロキシを設定すると、この状況ではポートプロキシは正常に動作します。2 つの管理者特権のコマンド シェルで、次を実行します。
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 ルールにあります。
では、ここで何が起こっているのでしょうか? ファイアウォールは完全にオフになっています。シェルは昇格されています。他には何も実行されておらず、邪魔になるものはありません (AV/IDS はありません)。
v6tov4 ルールと v4tov6 ルールのさまざまな組み合わせを追加してみましたが、それでも何も起こりませんでした。接続が確立されても、MS Message Analyzer は localhost インターフェイスを取得しないため、役に立ちません。
何か案は?
編集 2016/10/15 23:58EST: 次の 6 つのサービスを停止すると、ポートプロキシが全面的に無効になります。これは、これらのサービスのうちの 1 つが、発生している問題に関係していることを示唆しています。
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
ループバック インターフェイスにパケットを強制的に (ルート経由で) 挿入します。これは別の端末で実行することで確認できますtcpdump -i lo0
。ただし、リスニングしているときでもnc
、開いているポートは見つかりません。ただし、次の例では、期待どおりにリスナーが見つかります。
nmap -p 80 -e lo0 127.0.0.1