通过c函数获取外部IP地址

时间:2016-07-21 22:47:59

标签: c networking

我有两个问题......

1.)是否可以使用c函数获取外部IP地址?

2.如果设备是listen()到一个端口(使用struct sockaddr_in servAddr; servAddr.sin_addr.s_addr = htonl(INADDR_ANY);) 外部IP地址是否是从另一个设备连接()的IP地址?

1 个答案:

答案 0 :(得分:0)

  

是否可以使用c函数获取外部IP地址?

这可能是XY problem。对你的问题的简短回答是" no"。

如果您正在尝试获取外部IP地址,则可能是因为您在nat之后并且您想要运行服务器。假设您知道port forwarding是什么并且可以在nat框中设置它,您需要知道您的外部IP地址,以便您可以实际连接到您的服务器。

您可以使用许多公共服务来获取外部IP地址。一个想法是设置免费dynamic dns。另一个想法是从互联网上的服务中获取外部IP。

如果您向http://ip-api.com/json发送HTTP get请求,您将获得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时,看看Jerry的优秀post。您还想查看json.org上的一些C json解析器。

  

如果设备是listen()到端口(使用struct sockaddr_in servAddr; servAddr.sin_addr.s_addr = htonl(INADDR_ANY);)外部IP地址是否是从另一个设备连接()的IP地址?

是的,如果其他设备位于你自己的盒子的远端并且你设置了端口转发。