在 Linux 上获取接口的 IP 地址

新手上路,请多包涵

如何从 C 代码中获取 Linux 上接口的 IPv4 地址?

例如,我想获取分配给 eth0 的 IP 地址(如果有)。

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

阅读 451
2 个回答

尝试这个:

 #include <stdio.h>
#include <unistd.h>
#include <string.h> /* for strncpy */

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <arpa/inet.h>

int
main()
{
 int fd;
 struct ifreq ifr;

 fd = socket(AF_INET, SOCK_DGRAM, 0);

 /* I want to get an IPv4 IP address */
 ifr.ifr_addr.sa_family = AF_INET;

 /* I want IP address attached to "eth0" */
 strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);

 ioctl(fd, SIOCGIFADDR, &ifr);

 close(fd);

 /* display result */
 printf("%s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));

 return 0;
}

代码示例取自 此处

原文由 Filip Ekberg 发布,翻译遵循 CC BY-SA 3.0 许可协议

除了 Filip 演示的 ioctl() 方法之外,您还可以使用 getifaddrs() 。手册页底部有一个示例程序。

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

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