Closed. This question needs to be more focused. It is not currently accepting answers. Learn more
想改进这个问题吗?更新问题,使其只关注一个问题editing this post
三年前关闭。
在C程序中获取公共/全局IP地址的最佳方法是什么?关于堆栈溢出的类似问题都建议将查询的输出刮到www.whatismyip.com或类似的地方,但是这似乎不可靠,因为它们可能会更改格式。
我本以为我可以从我的路由器请求面向公众的IP,在我看来这是一个更健壮的解决方案;尽管我不清楚如何做到这一点。我遗漏了什么吗?

最佳答案

您可以连接到STUN服务器并获取外部ip。
我认为你可以很容易地找到你的操作系统的STUN客户端的源代码。
假设你是在*nix上,你可以在这里找到一个c语言的晕眩客户(这是我第一个找到的):
https://github.com/node/turn-client
下载源:c-stun-client-demo.c
使用$ clang c-stun-client-demo.c -o stun编译(或使用gcc)
当你运行它时它告诉你
$ ./stun
可以通过多种方式找到一个STUN服务器列表我在谷歌上找到这个:
https://gist.github.com/zziuni/3741933
我们来看看第一个:
usage: ./stun <server_ip> <server_port> <local_port>
您有服务器名和服务器端口。
但是STUN客户端需要服务器地址;您可以使用stun.l.google.com:19302检索它:
nslookup
返回$ nslookup stun.l.google.com
因此,您将使用以下命令调用程序:
Address: 64.233.184.127
输出是

Main start ...
socket opened to  64.233.184.127:19302  at local port 8888
Send data ...
Read recv ...
STUN binding resp: success !
socket closed !
ip:port = xxx.xxx.xxx.xxx:-13174
Main over.

其中$ ./stun 64.233.184.127 19302 8888是您的ip(它实际上返回了我的ip)
好的,它起作用了。
看看源代码(大约120行),看看它是如何工作的,并在程序中实现它的功能。

关于c - C获取我的公共(public)IP地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35434439/

10-14 11:17