特定のネットワークインターフェイスへの発信ソケットを作成するにはどうすればよいですか?
-
22-07-2019 - |
質問
それぞれに異なる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
所属していません StackOverflow