C获取我的公共IP地址

时间:2016-02-16 13:53:35

标签: c networking ip

在C程序中获取公共/全局IP地址的最佳方法是什么?关于堆栈溢出的类似问题都建议将查询的输出刮到www.whatismyip.com或类似的东西,但这似乎不可靠,因为它们可能会改变它们的格式。

我原本以为我可以从我的路由器请求公众面向IP,这在我看来就像一个更强大的解决方案;虽然我没有明确知道如何做到这一点。我错过了什么吗?

1 个答案:

答案 0 :(得分:6)

您可以连接到STUN服务器并获取外部IP。

我认为您可以很容易地找到适用于您的操作系统的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(它实际上是我的)

好的,它有效。

查看源代码(大约120行),了解它的工作原理并在程序中实现其功能。