私は2つの質問があります...cの関数で外部IPアドレスを取得
1.)私の外部IPアドレスをc関数で取得することは可能ですか?
2)デバイスは、(構造体のsockaddr_in servAddr付きポート(に); servAddr.sin_addr.s_addr = htonl(INADDR_ANY)聴く場合) 外部IPアドレスがIPアドレスを接続することであろう()別のデバイスからですか?
私は2つの質問があります...cの関数で外部IPアドレスを取得
1.)私の外部IPアドレスをc関数で取得することは可能ですか?
2)デバイスは、(構造体のsockaddr_in servAddr付きポート(に); servAddr.sin_addr.s_addr = htonl(INADDR_ANY)聴く場合) 外部IPアドレスがIPアドレスを接続することであろう()別のデバイスからですか?
私の外部IPアドレスをc関数で取得することはできますか?
これはXY problemです。あなたの質問への短い答えは、 "いいえ"です。
外部IPアドレスを取得しようとしているのは、NATの背後にあり、サーバーを実行したいからです。 port forwardingが何であるかを知っていて、NATボックスに設定できるとすれば、実際にサーバーに接続できるように外部IPアドレスを知る必要があります。
外部IPアドレスを取得するために使用できる公共サービスはいくつかあります。 1つのアイデアは、フリーdynamic dnsを設定することです。別の考え方は、インターネット上のサービスから外部IPを取得することです。
あなたはHTTPを送信する場合http://ip-api.com/jsonにリクエストを取得するには、あなたが解析できるback JSON構造を得ることができます:
A successful request will return, by default, the following:
{
"status": "success",
"country": "COUNTRY",
"countryCode": "COUNTRY CODE",
"region": "REGION CODE",
"regionName": "REGION NAME",
"city": "CITY",
"zip": "ZIP CODE",
"lat": LATITUDE,
"lon": LONGITUDE,
"timezone": "TIME ZONE",
"isp": "ISP NAME",
"org": "ORGANIZATION NAME",
"as": "AS NUMBER/NAME",
"query": "IP ADDRESS USED FOR QUERY"
}
Cは、このための最良の言語ではありません。 Pythonの実装は次のようになります。
import urllib2,json
j=json.load(urllib2.urlopen('http://ip-api.com/json'))
print(j['query'])
あなたは本当にCで手コードこの場合、HTTP GET /ポストを行うための小さなプログラムを書くことにジェリーの優れたpostを見てみたい場合。また、json.orgのC jsonパーサのいくつかを見たいと思うでしょう。
デバイスがポートに)(聞く場合(構造体のsockaddr_in servAddrと; servAddr.sin_addr.s_addr = htonl(INADDR_ANY))外部IPアドレス(接続先のIPアドレスである)別のデバイスから?
はい、他のデバイスがナットボックスの反対側にあり、ポート転送をセットアップしている場合はあります。
システムに複数の「外部IPアドレス」がある場合はどうなりますか?今日の多くのシステムは、複数のインターフェースカードを持つことができます。唯一の信頼できる方法は、既に接続を確立し、接続しているソケット上で 'getsockname'を呼び出して、接続がどのインタフェースIPアドレスを使用しているかを確認することです。また、 'INADDR_ANY'は、どれくらいの数であっても、ローカルまたは外部のすべてのインタフェースをlistenすることを意味します。 –