提取公共IP地址

时间:2012-11-15 01:38:47

标签: c client-server

  

可能重复:
  Discovering public IP programatically

有没有办法从C程序中了解我的公共IP地址?我正在使用DSL调制解调器并在Linux操作系统上工作。

我需要知道公共IP,以便我可以在Internet上使服务器 - 客户端套接字程序工作。

2 个答案:

答案 0 :(得分:1)

您的问题不清楚您是否在路由器后面,但如果没有,我不认为这是重复的。

如果您在路由器后面,那么除非路由器已经配置为已经转发到您的计算机,否则知道路由器的公共IP地址通常是无用的。

如果您不在路由器后面,问题很简单。只需将UDP套接字和connect设置为任何非本地IP地址,然后在套接字上调用getsockname。生成的sockaddr_in将包含用于发送到该地址的IP地址,即您的公共IP地址"。对于要使用的地址,8.8.8.8将是一个很好的简单选择,就像任何dns"根服务器"一样。请记住,您不必向其发送任何数据包(这就是您使用UDP而不是TCP的原因),只是connect无连接套接字。

答案 1 :(得分:0)

是的,您可以使用STUN protocol向STUN服务器询问它看到您的请求所源自的IP地址。您可以使用几个开放的STUN服务器,例如stunserver.org。