gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:58:51 27 4
gpt4 key购买 nike

我有两个问题...

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

2.) 如果设备对端口进行监听(使用 struct sockaddr_in servAddr;servAddr.sin_addr.s_addr=htonl(INADDR_ANY);)外部 IP 地址是从另一台设备进行 connect() 的 IP 地址吗?

最佳答案

Is it possible to get my external IP address with a c function?

这可能是 XY problem 。你的问题的简短答案是“不”。

如果您尝试获取外部 IP 地址,很可能是因为您位于 nat 后面并且您想要运行服务器。假设你知道什么 port forwarding是并且可以在你的 nat 盒子上设置它,你需要知道你的外部 IP 地址,这样你才能真正连接到你的服务器。

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

如果您发送 HTTP get 请求到 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 手工编写这个代码,那么看看 Jerry 的优秀文章 post编写一个小程序来执行 HTTP get/post。您还需要查看 json.org 上的一些 C json 解析器。 。

If a device is listen() to a port (with struct sockaddr_in servAddr; servAddr.sin_addr.s_addr=htonl(INADDR_ANY);) would the external IP address be the IP address to connect() from another device ?

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

关于c - 通过c函数获取外部IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38515575/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com