24

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

私はPythonの例を好みますが、問題は言語にとらわれないので、撃ち落としてください。

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

4

3 に答える 3

15

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

Pythonでそれを行う方法はわかりませんが、バークレーソケットAPI(C)をsetsockopt()使用して、オプションを使用してを呼び出す必要がありますSO_BINDTODEVICE

タイプがタイプのインターフェース記述子を渡しますstruct ifreq。理想的には、を使用し、引数としてインターフェイスの名前(eth0など)を渡してioctl()要求することにより、インターフェイス記述子の内容を取得します。SIOCGIFINDEX


編集:クイック検索を行ったところ、Pythonのソケットメソッドに関するこのドキュメントが見つかりました。setsockopt()それらの中にあります。

于 2008-12-02T22:17:07.187 に答える
15

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

import socket
s = socket.socket()
s.bind(("127.0.0.1", 0))
s.connect(("321.12.131.432", 80))
于 2009-03-20T10:18:53.423 に答える
1
import socket
s = socket.socket()
s.bind((get_ip_address('eth0'), 0))

クオラから

于 2015-08-11T15:51:14.440 に答える