使用inet_pton驗證字串是否是合法的ipv4或ipv6地址
阿新 • • 發佈:2019-01-03
inet_pton是用來講ipv4和ipv6地址轉換成二進位制形式
inet_pton()函式原型:
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
返回值:
返回值為1 表示 函式執行成功
返回值為0 表示 對指定的協議來說 網路地址不是有效的的
返回值為-1 表示 地址族不是有效的 即af是無效值
所以 我們可以根據返回值判定是否是合法的ipv4或ipv6地址
程式碼如下:
#include <arpa/inet.h>
#include <stdio.h>
int is_valid_ipv4(const char *ipv4)
{
struct in_addr addr;
if(ipv4 == NULL)
return 0;
if(inet_pton(AF_INET, ipv4, (void *)&addr) == 1)
return 1;
return 0;
}
int is_valid_ipv6(const char *ipv6)
{
struct in6_addr addr6;
if(ipv6 == NULL)
return 0;
if(inet_pton(AF_INET6, ipv6, (void *)&addr6) == 1)
return 1;
return 0;
}
#if 0
int main(void)
{
printf("%d\n", is_valid_ipv4(""));
printf("%d\n", is_valid_ipv4("122"));
printf("%d\n", is_valid_ipv4("122.1.1.1"));
printf("%d\n", is_valid_ipv6("fec0::da24:bdff:fe76:cea2" ));
return 0;
}
#endif