2

重複の可能性:
プログラムによるパブリック IP の発見

C プログラムから自分のパブリック IP アドレスを知る方法はありますか? 私は DSL モデムを使用しており、Linux オペレーティング システムで作業しています。

インターネット上でサーバー クライアント ソケット プログラムを動作させるには、パブリック IP を知る必要があります。

4

2 に答える 2

1

あなたの質問からは、ルーターの背後にいるかどうかは不明ですが、そうでない場合、これは重複していないと思います。

ルーターの背後にいる場合、ルーターがすでにマシンに転送するように構成されていない限り、ルーターのパブリック IP アドレス知っていてもほとんど役に立ちません。

ルーターの背後にいない場合、問題は単純です。UDP ソケットを作成し、connectローカル以外の IP アドレスに接続してから、ソケットを呼び出しgetsocknameます。結果sockaddr_inには、そのアドレスに送信するために使用されるIPアドレス、つまり「パブリックIPアドレス」が含まれます。8.8.8.8DNS「ルートサーバー」のいずれかと同様に、使用するアドレスを簡単に選択できます。connectパケットを送信する必要はなく (これが、TCP ではなく UDP を使用している理由です)、接続のないソケットだけを送信することを忘れないでください。

于 2012-11-15T01:53:13.810 に答える
0

はい、STUN プロトコルを使用して、STUN サーバーにリクエストの発信元となる IP アドレスを問い合わせることができます。stunserver.org など、使用できるオープンな STUN サーバーがいくつかあります。

于 2012-11-15T01:41:27.283 に答える