如何获取(Linux)机器的 IP 地址?

新手上路,请多包涵

这个问题与之前问的几乎相同, 我如何获取本地计算机的 IP 地址? -问题。但是我需要找到 Linux Machine 的 IP 地址。

所以:我如何 - 在 C++ 中以编程方式 - 检测我的应用程序正在运行的 linux 服务器的 IP 地址。服务器将至少有两个 IP 地址,我需要一个特定的 IP 地址(给定网络中的一个(公共网络))。

我确信有一个简单的功能可以做到这一点 - 但在哪里?


为了让事情更清楚一点:

  • 服务器显然会有“localhost”:127.0.0.1
  • 服务器将有一个内部(管理)IP 地址:172.16.xx
  • 服务器将有一个外部(公共)IP 地址:80.190.xx

我需要找到外部 IP 地址来将我的应用程序绑定到它。显然我也可以绑定到 INADDR_ANY (实际上这就是我现在所做的)。不过,我更愿意检测公共地址。

原文由 BlaM 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 747
1 个回答

您如何仅使用 stdio.h 标头? (不涉及网络标头)

这是完整的 C++ 代码:

(这是本地 IP;例如,如果您使用家庭调制解调器)

 #include <stdio.h>
int main()
{
    static char ip[32];
    FILE *f = popen("ip a | grep 'scope global' | grep -v ':' | awk '{print $2}' | cut -d '/' -f1", "r");
    int c, i = 0;
    while ((c = getc(f)) != EOF) i += sprintf(ip+i, "%c", c);
    pclose(f);
    printf(ip);
}

  • 奖励:您也可以通过它的 NDK C++ 编译器为 Android 交叉编译它

  • 只是说:我有一个运行它的 VPS,它获取 外部 IP

原文由 PYK 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题