2

ダースのIPアドレスが関連付けられているLinuxサーバーで実行されているPythonスクリプトがあります。PythonのsocketserverライブラリからTCPSServerを実装し、すべてのネットワークインターフェイスでリッスンさせました。

いくつかのデバイスがこのサーバーに接続するため、宛先のIPアドレス(クライアントのIPアドレスではなく、クライアントが接続していると見なすサーバーのIPアドレス)を何らかの方法でキャプチャできる必要があります。現在、クライアント接続を受信でき、クライアントIPを確認できますが、宛先IPを取得する方法がわかりません。

誰かがsocketserverクラスで宛先IPをキャプチャする方法を知っていますか?複数のインターフェースを聞くことができれば、どのインターフェースがヒットしたかを知る方法があるように思われます。

これは最終的に複数のサーバーにインストールされ、それぞれのサーバーのネットワークインターフェイスの数は不明です。ただし、これはLinuxベースのシステムにのみ存在することを私たちは知っています。したがって、これを行うためのOS固有の方法があれば、私もそれで問題ありません。

4

1 に答える 1

1

socketオブジェクトがある場合は、それを使用socket.getsockname()して、バインドされているIPアドレスを取得できます。したがって、次のようなものがあります。

# IPv4
client = listening_socket.accept()
(ipv4,port) = client.getsockname()

# IPv6
client = listening_socket.accept()
(address, port, flow_info, scope_id) = client.getsockname()

ただし、すべてのインターフェイスにバインドされたマルチホームサーバーでテストしたことはありsocketません。IPv40.0.0.0または同等のIPv6が返される可能性がありますが、私が知っている限りでは、それほど有用ではありません。

于 2013-02-04T21:02:42.287 に答える