重複の可能性:
プログラムによるパブリック IP の発見
C プログラムから自分のパブリック IP アドレスを知る方法はありますか? 私は DSL モデムを使用しており、Linux オペレーティング システムで作業しています。
インターネット上でサーバー クライアント ソケット プログラムを動作させるには、パブリック IP を知る必要があります。
重複の可能性:
プログラムによるパブリック IP の発見
C プログラムから自分のパブリック IP アドレスを知る方法はありますか? 私は DSL モデムを使用しており、Linux オペレーティング システムで作業しています。
インターネット上でサーバー クライアント ソケット プログラムを動作させるには、パブリック IP を知る必要があります。
あなたの質問からは、ルーターの背後にいるかどうかは不明ですが、そうでない場合、これは重複していないと思います。
ルーターの背後にいる場合、ルーターがすでにマシンに転送するように構成されていない限り、ルーターのパブリック IP アドレスを知っていてもほとんど役に立ちません。
ルーターの背後にいない場合、問題は単純です。UDP ソケットを作成し、connect
ローカル以外の IP アドレスに接続してから、ソケットを呼び出しgetsockname
ます。結果sockaddr_in
には、そのアドレスに送信するために使用されるIPアドレス、つまり「パブリックIPアドレス」が含まれます。8.8.8.8
DNS「ルートサーバー」のいずれかと同様に、使用するアドレスを簡単に選択できます。connect
パケットを送信する必要はなく (これが、TCP ではなく UDP を使用している理由です)、接続のないソケットだけを送信することを忘れないでください。
はい、STUN プロトコルを使用して、STUN サーバーにリクエストの発信元となる IP アドレスを問い合わせることができます。stunserver.org など、使用できるオープンな STUN サーバーがいくつかあります。