web-dev-qa-db-ja.com

Python任意のIPへのソケットバインド?

コードに接続するIPを指定しているときに機能する小さな片面メッセージ送信者がいますが、ソケットが任意のIPからの接続を許可するのに問題があります。問題のある行は次のとおりです。

mySocket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
mySocket.bind ( ( '', 2727 ) )

''はlocalhost用であり、手動でIPを入力しても機能します。例:'192.168.1.106'しかし、どうすればそれをすべての人に公開したままにできますか?または、これに間違った接続タイプを使用していますか?

27
Trent

使用可能なすべてのIPv4アドレスにバインドする場合は、0.0.0.0をIPアドレスとして指定します。ルーターの背後にいて、LANで使用できるだけでなく、インターネットにアクセスできるようにする場合は、LANの外側のユーザーがサービスにアクセスできるように、ポート転送ルールを設定する必要があります。

0.0.0.0の詳細については、次のServerFaultの質問を参照してください。 https://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0 -and-127-0-0-1

36
Polynomial

''にバインドすると、'0.0.0.0'と同じ効果があり、IPv6への移行が容易になります。

OSによっては、socket.AF_INET6ソケットを開くと、IPv4およびIPv6がリッスンされます。

12
glglgl

0.0.0.0にバインドすると、ルーティングできるIPv4アドレスからの接続を受け入れることができます。