linux下C语言获取网络信息
时间: 2024-10-11 22:16:01 浏览: 36
C语言获取硬件信息(CPU序列号,硬盘序列号,网卡IP、MAC地址、是否插入网线).zip
5星 · 资源好评率100%
在Linux环境下,C语言可以使用系统的网络API来获取网络信息。这里列举几个常见的网络操作:
1. **IP地址和主机名**:
- 使用`getifaddrs()`函数可以获取所有网络接口的信息,包括IP地址、子网掩码等。这需要链接到`netdb.h`库。
```c
#include <stdio.h>
#include <net/if.h>
#include <unistd.h>
void print_addresses(const struct ifaddrs *ifa, char *prefix) {
while (ifa) {
if (ifa->ifa_addr && ifa->ifa_addr->sa_family == AF_INET) {
printf("%sIPv4: %s\n", prefix, inet_ntoa(((struct sockaddr_in*)ifa->ifa_addr)->sin_addr));
} else if (ifa->ifa_addr && ifa->ifa_addr->sa_family == AF_INET6) {
printf("%sIPv6: %pII\n", prefix, &((struct sockaddr_in6*)ifa->ifa_addr)->sin6_addr);
}
if (ifa->ifa_next)
print_addresses(ifa->ifa_next, prefix == "" ? " " : "");
ifa = ifa->ifa_next;
}
}
int main() {
getifaddrs(&ifaddr);
print_addresses(ifaddr, "");
freeifaddrs(ifaddr);
return 0;
}
```
2. **DNS查询**:
- 使用`gai_strerror()`和`getaddrinfo()`函数可以从域名解析出IP地址,反之亦然。需链接到`resolv.h`库。
```c
#include <arpa/inet.h>
#include <netdb.h>
void resolve_host(const char* hostname) {
struct addrinfo hints, *res;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC; // 或AF_INET或AF_INET6
hints.ai_socktype = SOCK_STREAM;
if (getaddrinfo(hostname, NULL, &hints, &res) != 0) {
perror("getaddrinfo error");
return;
}
printf("Resolved IP for %s: %s\n", hostname, inet_ntoa(res->ai_addr));
freeaddrinfo(res);
}
```
阅读全文