2017-01-11 8 views
0

クライアントソケットでは、bind()を使用して特定のソースIPアドレスにバインドして、特定のインターフェイスを選択できます。または私はconnect()を直接使用することができますそれはルーティングテーブルに基づいてソースIPを選ぶでしょう。クライアントソケットをipにバインドすることはできますか?

クライアントソケットをIPにバインドすることはできますか?例:私は2つのインタフェースを持っています: eth0:ip0 eth1:ip1

(1)私はクライアントソケットをip2にバインドします。これは実現可能ですか? (2)(1)が実行可能であれば、クライアントソケットがeth0を通してパケットを送信したと仮定します。次に、このクライアントホストにiptablesを設定して、すべての着信パケットをip0(eth0)に転送します。この場合、宛先IPアドレスを持つサーバ側から返されたパケットがip2(このパケットがクライアントホストに到達すると仮定します)です。私のクライアントソケットはパケットを受け取りますか?

ありがとうございます。

答えて

0

私は本当にあなたの質問を理解しますが、ここにはありません:

クライアントソケットの場合、あなたは通常、あなたが使用可能な任意のポートを使用するための最良のインターフェイスを選択するOSとそのルーティングテーブルをしたいです。この場合、INADDR_ANY(0)とポート0にバインドします。あるいは、bindを明示的に呼び出さないでください。 connect()を呼び出すだけで正しいことができます。

特定のインターフェイスを使用してクライアント接続を行う必要がある場合は、ソケットを特定のIPアドレスにバインドします。そして、OSはその後の接続呼出しとそれ以降のすべてのトラフィックにそのインタフェースを使用しようとします。

ソケットをローカルインターフェイスに属していないIPにバインドしようとすると、必ずエラーが発生します。

iptablesの内容が何であるかわかりません。うんざりする

+0

私がしようとするのは、プログラムがネットワークトラフィックジェネレータとして動作することです。私はクライアントホストとサーバーホストとの間にスイッチを持っています。私はクライアントとサーバーの間でトラフィックを送りたいので、これらのトラフィックには複数のクライアントIPサーバーのIPペアが必要です(複数のサブスクライバーとサーバーがある場合をシミュレートします)。例えば。 :クライアントipsの範囲は20.0.0.0〜20.0.0.9、サーバのipsの範囲は21.0.0.0〜21.0.0.9です。 この場合、クライアントホストには10​​個のソケットが必要です。それぞれ20.0.0.0のIPでバインドする必要があります - 20.0.0.9。しかし、私のインターフェースにはもう1つのipsがあります(少なくともそれは勝っていますが、これらのIPはすべて持っています)。 – buddha

+0

iptablesは、linuxのファイアウォールルールを設定するために使用されるlinuxコマンドです。 – buddha

関連する問題