2017-03-05 8 views
0

localhost(127.0.0.1)で動作するTCPサーバを使用していますが、ループバックインタフェースにSYNパケットを注入してサーバに接続しようとしていますが、それらに答えます。これらのパケットには、私のインターネットアダプタのイーサネットインターフェイスのソースIP(localhost IPではなく)があります。ループバックのローカルホストサーバが受信したSYNに応答しない

私はWiresharkの私のループバックサーバーに行くSYNパケットを見ますが、サーバーはSYN/ACKで応答しません。私は、IPソースが127.0.0.1ではない(192.168.1.24など)ためだと思います。

ブラウザに接続してlocalhostサーバーに接続すると問題なく動作しますが、使用しているソースIPは127.0.0.1で、宛先IPも127.0.0.1です。パケット間の唯一の違いは送信元IPです。

127.0.0.1以外のIPソースアドレスを使用して、ループバックサーバー(localhost)とのTCP接続を確立したいとします。それは可能ですか?

たとえば、192.168.1.24から127.0.0.1までのループバックTCP SYNパケットには、ループバックサーバが応答する必要がありますか?

ありがとうございました!

答えて

0

Npcap Loopback Adapter経由でローカルホストにパケットを送信し、相手方(たとえば、同じマシン上のプロセス)から応答を受け取ることができます。例としてNmapがあり、NmapはNpcap Loopback Adapterを使ってlocalhostのポートをスキャンします。コマンドはnmap -v -A 127.0.0.1です。 Nmapはオープンソースのhereなので、実装に関するコードを見ることができます。 Nmapが複雑すぎると思うなら、Nmapによって出荷されたpingツールhereのソースコードを見ることができます。ローカルホストにpingを実行すると、NpingはNpcap Loopback Adapterも使用します。これは、Windowsが出荷した元のpingとは異なる動作をします。

ローカルアダプターの1つのIPを使用するか、または127.0.0.1を使用するIPは同じである必要があります。 Nmapを実行してテストすることができます。どんなものであれ、127.0.0.1を使うのが最高ですし、Npcapがlocalhostと話すときに推奨します。

だから私はこの問題は依然としてあなた自身の実装に関係していると思います。

0

bind()INADDR_LOOPBACKを使用していますか?その場合は、INADDR_ANYに変更して、それが役立つかどうか確認してください。 man 7 ipも参照してください。

は、(これらのリンクは明らかにLinux固有であり、ご使用のプラットフォームが何かがある場合は、お使いのシステムに適用されるドキュメントを参照してくださいたとえば、あなたがWindows上でなら、多分https://msdn.microsoft.com/en-us/library/windows/desktop/ms737550(v=vs.85).aspxを参照してください。。)

0

私はこの問題を解決しました。あなたの答えをどうもありがとう。

問題は少しばかげていました。私はループバックの範囲になかったIPソースアドレス(ループバックゲートウェイ)を持つループバックサーバー(localhost)とのTCP接続を確立しようとしていました:127.0.0.1、loopback netmask: 255.255.0.0;それは127.0.X.Xの範囲にないIPソースアドレスからのパケットを受け入れません。私がNATを行い、パケットを例えば192.168.1.154から127.0.1.154に変換すると、パケットはサーバによって受信され、サーバ接続を確立することができます。

ありがとうございました!https://github.com/Microsoft/Windows-driver-samples/tree/master/network/ndis/netvmini/6x

ミニポートドライバを作成する罰金だろうとサーバーをバインド:

私は他の仮想ネットワークアダプタにしていないループバックにサーバーをバインドすることをお勧めしすぎているかもしれないと思うが、私はこれを勉強していますそこには、独自のゲートウェイとネットマスクを持っているという利点があり、その層はイーサネットであり、BSDループバックではありません。あなたの意見は私には面白いでしょう。

関連する問題