linux下 用C获得指定网卡的地址
时间: 2024-09-28 18:11:07 浏览: 31
C语言实现linux网卡检测精简版
在Linux环境下,如果你想用C语言获取特定网络接口(网卡)的IP地址,你可以使用系统调用或者一些库函数,比如`ifconf`、`ioctl`或者`getifaddrs()`。这里是一个简单的示例,展示如何使用`getifaddrs()`函数:
```c
#include <stdio.h>
#include <net/if.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
void print_ip_address(const struct ifaddrs *ifa) {
if (ifa->ifa_addr != NULL && ifa->ifa_addr->sa_family == AF_INET) {
char ip_str[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &((struct sockaddr_in*)ifa->ifa_addr)->sin_addr, ip_str, INET_ADDRSTRLEN);
printf("Interface %s has IP address: %s\n", ifa->ifa_name, ip_str);
}
free(ifa->ifa_addr);
if (ifa->ifa_list) {
print_ip_address(ifa->ifa_list);
}
}
int main() {
struct ifaddrs *ifa_list, *ifa;
int ret = getifaddrs(&ifa_list);
if (ret == -1) {
perror("Error getting interface addresses");
return 1;
}
print_ip_address(ifa_list);
freeifaddrs(ifa_list);
return 0;
}
```
这个程序会遍历所有已知的网络接口,并打印出每个接口的名称及其IPv4地址。如果你想针对特定的网卡名字(如"eth0"),可以在`print_ip_address`函数里添加条件判断。
阅读全文