欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > LINUX下C语言读取网卡IP

LINUX下C语言读取网卡IP

2024/10/24 4:51:57 来源:https://blog.csdn.net/weixin_55491446/article/details/141284801  浏览:    关键词:LINUX下C语言读取网卡IP

在Linux系统下,C语言可以通过读取系统文件来获取网卡的IP地址。

1、代码案例

    #include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>int get_ip_address(const char *ifname, char *ip_str, size_t size) {struct sockaddr_in sa;int fd = socket(AF_INET, SOCK_DGRAM, 0);if (fd < 0) {perror("socket");return -1;}memset(&sa, 0, sizeof(sa));sa.sin_family = AF_INET;sa.sin_addr.s_addr = INADDR_ANY;if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0) {perror("bind");close(fd);return -1;}if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)) < 0) {perror("setsockopt");close(fd);return -1;}if (getsockname(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0) {perror("getsockname");close(fd);return -1;}close(fd);if (sa.sin_family != AF_INET) {fprintf(stderr, "Unsupported address family\\n");return -1;}inet_ntop(AF_INET, &(sa.sin_addr), ip_str, size);return 0;}int main() {char ip[INET_ADDRSTRLEN];if (get_ip_address("eth0", ip, sizeof(ip)) < 0) {fprintf(stderr, "Failed to get IP address\\n");return EXIT_FAILURE;}printf("IP Address: %s\\n", ip);return EXIT_SUCCESS;}

这个程序首先创建了一个UDP套接字,并绑定到任何可用的IP地址和端口上。然后,它使用getsockname函数获取套接字的本地地址,这个地址就是当前使用的IP地址。最后,程序使用inet_ntop函数将IP地址从二进制格式转换为可读的字符串格式。

请注意,这个程序假设eth0是您想要获取IP地址的网卡名称。在不同的Linux系统中,网卡的名称可能不同(例如,可能是eth1enp0s3等)。此外,某些系统可能需要root权限来执行此操作。

编译并运行此程序:

    gcc -o get_ip get_ip.csudo ./get_ip

这将输出eth0网卡的IP地址。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com