在C程序中获取公共/全局IP地址的最佳方法是什么?关于堆栈溢出的类似问题均表明将查询的输出爬到www.whatismyip.com或类似的内容,但是由于它们可能会更改其格式,因此似乎并不可靠。
我本以为可以向路由器请求面向公众的IP,在我看来,这是一个更强大的解决方案。尽管我不明确地知道该怎么做。我想念什么吗?
您可以连接到STUN服务器并获取您的外部IP。
我认为您可以轻松找到适用于您的OS的STUN客户端的源代码。
假设您使用的是* nix,则可以在这里找到c中的STUN客户端(这是我找到的第一个客户端):
https://github.com/node/turn-client
下载源: c-stun-client-demo.c
编译$ clang c-stun-client-demo.c -o stun
(或使用gcc)
当您运行它时,$ ./stun
它会告诉您
usage: ./stun <server_ip> <server_port> <local_port>
可以通过多种方式找到STUN服务器的列表。谷歌搜索我发现了这一点:
https://gist.github.com/zziuni/3741933
让我们来看第一个:
stun.l.google.com:19302
您具有服务器名称和服务器端口。但是STUN客户端需要服务器地址; 您可以使用以下方法检索它nslookup
:
$ nslookup stun.l.google.com
退货 Address: 64.233.184.127
因此,您将使用以下命令调用该程序:
$ ./stun 64.233.184.127 19302 8888
乌普特是
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.
xxx.xxx.xxx.xxx
您的IP在哪里(实际上是我的IP)
好的,它可以工作。
查看源代码(大约120行),查看其工作方式并将其功能实现到程序中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句