ifaddrs *ifa 转成 ip格式
时间: 2024-09-28 20:11:11 浏览: 25
android-ifaddrs 2014兼容版
`ifaddrs`结构体包含了网络接口的各种信息,包括IP地址。当你得到一个指向`ifaddrs`的指针(如`ifa`),其中的IP地址通常存储在一个`sockaddr`或其子结构体中,比如`sockaddr_in`(IPv4)或`sockaddr_in6`(IPv6)。为了将它们转换为人类可读的IP地址格式,你可以按照以下步骤操作:
1. 对于IPv4:
```c
struct sockaddr_in *ipv4_addr = (struct sockaddr_in *) ifa->ifa_addr;
char str[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &ipv4_addr->sin_addr, str, INET_ADDRSTRLEN);
printf("IPv4: %s\n", str);
```
使用`inet_ntop()`函数将二进制形式的IPv4地址转换为字符串。
2. 对于IPv6:
```c
struct sockaddr_in6 *ipv6_addr = (struct sockaddr_in6 *) ifa->ifa_addr;
char str[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &ipv6_addr->sin6_addr, str, INET6_ADDRSTRLEN);
printf("IPv6: %s\n", str);
```
同样的,使用`inet_ntop()`替换为AF_INET6来处理IPv6地址。
注意,`inet_ntop()`可能会因为格式错误而返回空字符串,所以在实际应用中需要额外检查它的结果。
阅读全文