用C语言实现判断ip地址是ipv4还是ipv6
时间: 2024-03-13 17:46:46 浏览: 281
C实现的域名解析代码内附函数说明
可以使用C语言中的网络编程相关函数来判断IP地址是否是IPv4或IPv6。
判断IPv4地址的方法:
```c
#include <arpa/inet.h>
int is_ipv4(const char *ip) {
struct sockaddr_in sa;
return inet_pton(AF_INET, ip, &(sa.sin_addr)) != 0;
}
```
其中,inet_pton()函数将IP地址转换为网络字节序的二进制格式。如果返回值不为0,则说明转换成功,即该IP地址是IPv4地址。
判断IPv6地址的方法:
```c
#include <arpa/inet.h>
int is_ipv6(const char *ip) {
struct sockaddr_in6 sa;
return inet_pton(AF_INET6, ip, &(sa.sin6_addr)) != 0;
}
```
同样地,inet_pton()函数将IP地址转换为网络字节序的二进制格式。如果返回值不为0,则说明转换成功,即该IP地址是IPv6地址。
使用方法:
```c
int main() {
const char *ipv4 = "192.168.0.1";
const char *ipv6 = "2001:db8::1";
if (is_ipv4(ipv4)) {
printf("%s is an IPv4 address\n", ipv4);
} else {
printf("%s is not an IPv4 address\n", ipv4);
}
if (is_ipv6(ipv6)) {
printf("%s is an IPv6 address\n", ipv6);
} else {
printf("%s is not an IPv6 address\n", ipv6);
}
return 0;
}
```
阅读全文