gpt4 book ai didi

c - 使用标准 C 套接字 API 判断文本字符串是 IPv6 地址还是 IPv4 地址

转载 作者:太空狗 更新时间:2023-10-29 16:50:45 24 4
gpt4 key购买 nike

我有一个程序,外部组件向我传递一个包含 IP 地址的字符串。然后我需要把它变成一个 URI。对于 IPv4 这很容易;我在 http://前面加上/。但是,对于 IPv6,我还需要将其括在方括号 [] 中。

是否有标准的套接字 API 调用来确定地址的地址族?

最佳答案

有点。您可以使用 inet_pton() 尝试首先将字符串解析为 IPv4 (AF_INET),然后是 IPv6 (AF_INET6)。返回代码会让您知道函数是否成功,并且字符串因此包含尝试类型的地址。

例如:

#include <arpa/inet.h>
#include <stdio.h>

static int
ip_version(const char *src) {
char buf[16];
if (inet_pton(AF_INET, src, buf)) {
return 4;
} else if (inet_pton(AF_INET6, src, buf)) {
return 6;
}
return -1;
}

int
main(int argc, char *argv[]) {
for (int i = 1; i < argc; ++i) {
printf("%s\t%d\n", argv[i], ip_version(argv[i]));
}

return 0;
}

关于c - 使用标准 C 套接字 API 判断文本字符串是 IPv6 地址还是 IPv4 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com