2

可能重复:
以编程方式发现公共 IP

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

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

4

2 回答 2

1

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

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

如果您不在路由器后面,问题很简单。只需创建一个 UDP 套接字并将connect其连接到任何非本地 IP 地址,然后调用getsockname套接字。结果sockaddr_in将包含用于发送到该地址的 IP 地址,即您的“公共 IP 地址”。8.8.8.8与任何 dns“根服务器”一样,这将是一个不错的简单地址选择。请记住,您不必向它发送任何数据包(这就是您使用 UDP 而不是 TCP 的原因),只需connect一个无连接套接字即可。

于 2012-11-15T01:53:13.810 回答
0

是的,您可以使用STUN 协议向 STUN 服务器询问它认为您的请求来自哪个 IP 地址。您可以使用几个开放的 STUN 服务器,例如 stunserver.org。

于 2012-11-15T01:41:27.283 回答