c++ 通过域名获取ip(跨平台)

简介: c++ 通过域名获取ip(跨平台)

C++可以使用getaddrinfo函数来通过域名获取IP地址,这是一个跨平台的函数,在Windows、Linux和其他一些操作系统上都支持。

下面是示例代码:

include

include

include

include

int main(int argc, char argv[]) {
struct addrinfo hints,
res;
int status;
char ipstr[INET6_ADDRSTRLEN];
const char *hostname = "www.google.com"; // 设置需要查询的域名

memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC; // IPv4 或 IPv6
hints.ai_socktype = SOCK_STREAM; // TCP流

if ((status = getaddrinfo(hostname, NULL, &hints, &res)) != 0) {
    std::cerr << "getaddrinfo error: " << gai_strerror(status) << std::endl;
    return 1;
}

std::cout << "IP addresses for " << hostname << ":\n\n";

for (struct addrinfo *p = res; p != NULL; p = p->ai_next) {
    void *addr;
    char ipver[INET6_ADDRSTRLEN];

    // 获取IPv4或IPv6地址
    if (p->ai_family == AF_INET) {
        struct sockaddr_in *ipv4 = (struct sockaddr_in *) p->ai_addr;
        addr = &(ipv4->sin_addr);
        strcpy(ipver, "IPv4");
    } else {
        struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *) p->ai_addr;
        addr = &(ipv6->sin6_addr);
        strcpy(ipver, "IPv6");
    }

    // 将地址转换为IP字符串形式
    inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
    std::cout << ipver << ": " << ipstr << std::endl;
}

freeaddrinfo(res); // 释放链表

return 0;

}
c++

在程序运行时,将会输出如下信息:

IP addresses for www.google.com:

IPv4: 172.217.5.196
IPv6: 2607:f8b0:4009:809::2004

此示例的主要思路是:

设置addrinfo结构体协议族以及要使用的套接字类型。
调用getaddrinfo函数,并传入要查询的主机名、NULL(表示不需要服务名)以及之前设置的addrinfo结构体。
遍历返回的addrinfo链表,获取主机的IPv4或IPv6地址,并将其转换为字符串形式。
释放addrinfo链表。
相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
30天前
|
存储 JSON 数据库
【C++ 软件设计思路】跨平台应用开发:如何选择合适的格式保存信息
【C++ 软件设计思路】跨平台应用开发:如何选择合适的格式保存信息
95 0
|
1月前
|
开发工具 C语言 C++
CMake构建大型C/C++项目:跨平台设计与高级应用(二)
CMake构建大型C/C++项目:跨平台设计与高级应用
42 0
|
1月前
|
存储 Java 编译器
java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析
java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析
102 0
|
3月前
|
域名解析 缓存 网络协议
当使用IP地址可以访问应用系统,但通过域名无法访问时
【1月更文挑战第14天】【1月更文挑战第68篇】当使用IP地址可以访问应用系统,但通过域名无法访问时
44 6
|
4月前
|
域名解析 应用服务中间件 网络安全
自己的ip地址被别人的域名解析到?已解决
自己的ip地址被别人的域名解析到?已解决
|
5月前
|
Java
Java 如何根据域名查询对应的ip地址
Java 如何根据域名查询对应的ip地址
275 3
|
5月前
|
存储 JSON Cloud Native
C++ QT获取本机公网IP和IP所在地
C++ QT获取本机公网IP和IP所在地
|
10天前
|
网络协议 Ubuntu Linux
|
30天前
|
Linux API C++
【C++ 线程包裹类设计】跨平台C++线程包装类:属性设置与平台差异的全面探讨
【C++ 线程包裹类设计】跨平台C++线程包装类:属性设置与平台差异的全面探讨
51 2
|
1月前
|
编译器 持续交付 项目管理
CMake构建大型C/C++项目:跨平台设计与高级应用(三)
CMake构建大型C/C++项目:跨平台设计与高级应用
41 0