特定のネットワークインターフェイスへの発信ソケットを作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/335607

質問

それぞれに異なるIPアドレスを持つ2つの異なるネットワークインターフェイスを持つサーバーがあります。特定のIPアドレスを使用できるようにソケットを作成するにはどうすればよいですか?

Pythonの例を使用したいのですが、質問は言語に依存しないので、撃ちましょう。

編集:「できません」とは言わないでください答えとして。つまり、それはコンピューターです。たとえば、好きなことは何でもできます。たとえば、オンザフライで不要なインターフェイスをプログラムで無効にできます。もっときれいなものを探しています。

役に立ちましたか?

解決

確かにソケットを特定のデバイスにバインドできます。

私はPythonでそれを行う方法がわかりませんが、BerkeleyソケットAPI(Cで)を使用するには、オプション SO_BINDTODEVICE setsockopt()を呼び出す必要があります>。

タイプ struct ifreq のインターフェース記述子を渡します。理想的には、 ioctl()を使用し、 SIOCGIFINDEX を要求して、インターフェイス記述子のコンテンツを取得します。インターフェイス名(たとえば、eth0)を引数として渡します。


edit:クイック検索を行ったところ、このソケットメソッドのドキュメントが見つかりましたpython。 setsockopt()はその中にあります。

他のヒント

ちょっとした注意-本当に必要なのは特定のIPにバインドすることです。完全を期すために、解決策は作成後にソケットをバインドすることです。 Pythonのソース:

import socket
s = socket.socket()
s.bind(("127.0.0.1", 0))
s.connect(("321.12.131.432", 80))
import socket
s = socket.socket()
s.bind((get_ip_address('eth0'), 0))

from Quora

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top