1.关于

演示环境: win10+VS2017

2.支持

需要下面的库支持:

ws2_32.lib

需要下面的,添加到项目属性-> c/c++ -> 预处理器定义

_WINSOCK_DEPRECATED_NO_WARNINGS

3.ipv4查询

int net_adapter_helper::get_ipv4_win(std::list<std::string>& out_list_ip4)
{
int error_id = 0;
WORD sock_ver;
WSADATA wsaData;
int ret_val = 0;
sock_ver = MAKEWORD(2, 2);
ret_val = WSAStartup(sock_ver, &wsaData);
if (0 != ret_val)
{
error_id = GetLastError();
return error_id;
} if ( 2 != LOBYTE(wsaData.wVersion) ||
2 !=HIBYTE(wsaData.wVersion) )
{
WSACleanup();
error_id = GetLastError();
return error_id;
} // ------------------------------------------------------------------------------- const int len_256 = 256;
char name_host[len_256] = { 0 }; gethostname(name_host, sizeof(name_host)); PHOSTENT hostinfo;
// 1.
if (NULL == (hostinfo = gethostbyname(name_host)))
{
error_id = GetLastError();
return error_id;
} std::string str_ip4;
char tmp_name_arr[16] = { 0 };
while (NULL != *(hostinfo->h_addr_list) )
{
inet_ntop(AF_INET, (struct in_addr *) *hostinfo->h_addr_list, tmp_name_arr, 16);
str_ip4 = std::string(tmp_name_arr);
out_list_ip4.push_back(str_ip4); hostinfo->h_addr_list++; memset(tmp_name_arr, 0, 16);
} WSACleanup(); return error_id;
}

4.ipv6查询

int net_adapter_helper::get_ipv6_win(std::list<std::string>& out_list_ip6)
{ int error_id = 0;
WORD sock_ver;
WSADATA wsaData;
int ret_val = 0;
sock_ver = MAKEWORD(2, 2);
ret_val = WSAStartup(sock_ver, &wsaData);
if (0 != ret_val)
{
error_id = GetLastError();
return error_id;
} if (2 != LOBYTE(wsaData.wVersion) ||
2 != HIBYTE(wsaData.wVersion))
{
WSACleanup();
error_id = GetLastError();
return error_id;
} // ------------------------------------------------------------------------------- struct addrinfo hint; hint.ai_family = AF_INET6;
hint.ai_socktype = SOCK_STREAM;
hint.ai_flags = AI_PASSIVE;
hint.ai_protocol = 0;
hint.ai_addrlen = 0;
hint.ai_canonname = NULL;
hint.ai_addr = NULL;
hint.ai_next = NULL; const int len_256 = 256;
char name_host[len_256] = { 0 }; struct addrinfo *pailist = nullptr;
struct addrinfo *paip = nullptr;
const char port_str[] = { "10086" }; ret_val = getaddrinfo(name_host, port_str, &hint, &pailist); // 1.
if (0 > ret_val || 0 > pailist)
{
ret_val = GetLastError(); WSACleanup();
return ret_val;
} // 2.
struct sockaddr_in6 *psinp6 = nullptr;
for (paip = pailist; NULL != paip; paip = paip->ai_next)
{
paip->ai_family = AF_INET6;
psinp6 = (struct sockaddr_in6 *)paip->ai_addr;
if (nullptr != psinp6 && NULL != psinp6)
{
std::string str_ipv6;
for (int i = 0; i < 16; i++)
{
if (((i - 1) % 2) && (i > 0))
str_ipv6 += std::string(":"); str_ipv6 += str_format("%02X", psinp6->sin6_addr.u.Byte[i]);
} out_list_ip6.push_back(str_ipv6);
}
} WSACleanup(); return ret_val;
}

5.调用

std::list <std::string> ip4_list;
std::list <std::string> ip6_list; int ret_val = net_adapter_helper::get_instance().get_ipv4_win(ip4_list);
if (0 != ret_val)
{
cout << "\n\nipv4 error = " << ret_val << endl;
}
else
{
int index = 0;
for (auto item : ip4_list)
{
cout << "第" << ++index << "个ip4 = " << item.c_str() << endl;
}
} cout << "\n\n"; ret_val = net_adapter_helper::get_instance().get_ipv6_win(ip6_list);
if (0 != ret_val)
{
cout << "\n\nipv6 error = " << ret_val << endl;
}
else
{
int index = 0;
for (auto item : ip6_list)
{
cout << "第" << ++index << "个ip6 = " << item.c_str() << endl;
}
}

6.结果

windows10 c++获取本机IPv4,ipv6,查询本机Ipv4,ipv6的更多相关文章

  1. ubuntu(Linux) c++ 获取本机IPv4和ipv6、查询本机IPv4,IPv6

    1.关于 演示环境: Linux xxxxxxx 5.4.0-47-generic #51-Ubuntu SMP Fri Sep 4 19:50:52 UTC 2020 x86_64 x86_64 x ...

  2. ipv4理论知识1-ipv4介绍,ipv4记法,地址段个数算法

    定义 在TCP/IP协议中,用于在IP层识别连接到因特网设备的标识符称为因特网地址或IP地址.IPv4地址是一个32位的地址. 地址空间 像IPv4这种定义了地址的协议都有一个地址空间.地址空间就是协 ...

  3. 将物理机转换成vmware虚机

    随着虚拟化的快速发展,公司主要是以公有云+私有云结合的混合云部署,据我不成熟的了解,目前很少有公司会将一台单独的物理机作为服务器,在公司内部大家逐渐接受了私有云的部署方案,这样做不但可以节省硬件资源, ...

  4. Sublime WiFi真机同步和WiFi真机预览使用说明

    概述WiFi真机同步: 通过在Sublime中建立调试服务,接收真机设备主动连接调试的方式,配合apploader及自定义loader,为开发者提供在局域网内通过WiFi实现应用快速真机同步和实时预览 ...

  5. 介绍一种android的裸刷机方法(fastboot刷机实质)

      fastboot刷机的前提是你的开发板uboot良好并能正常启动进入fastboot模式,你的开发版的nand分区已存在.对于Android的uboot而言, 已经实现了fastboot命令,当你 ...

  6. EXSI宿主机更换硬盘后虚机启动有问题

    环境说明: 最近EXSI主机磁盘坏掉了,重新换掉磁盘以后启动虚机有问题. 虚机的报错信息如下: 找了下修复方法,操作过程为: 尝试修复 (以下是百度的方法) ls -l /dev/mapper mkd ...

  7. 本地Mac通过堡垒机代理实现跨堡垒机scp问题

    近日,公司在跳板机前架设了堡垒机,以防止ssh攻击,但这带来一个问题,我们平常直接ssh跳板机,可以直接使用scp来上传或下载跳板机数据到本地 架设堡垒之后经常使用的scp工具不好用了 于是本期就来解 ...

  8. Windows10 c++获取网卡信息(ipv4,子网掩码,网关,mac地址)

    关于 本文样式环境: win10 + vs2017 + c++11 1.说明 算是踩坑吧,先前一直认为一块网卡只能有一个IP. 今天发现结构体中,定义了相关结构: 一块网卡可以用多个IP. 2.连接库 ...

  9. 在Linux上查询物理机信息-不用去拆机器了

    目录 一.查看系统信息(包含机器型号) 1.1 查看机型和品牌 二.查看CPU 信息 2.1 查看CPU 型号 2.2 查看CPU的物理数量 2.3 查看 CPU核心数量(非逻辑CPU) 2.4 查看 ...

随机推荐

  1. 1D RKDG to shallow water equations

    RKDG to shallow water equations 1.Governing Equations \[\frac{\partial U}{\partial t} + \frac{\parti ...

  2. FVCOM泥沙模块河流边界处理

    简介 入流河流携带泥沙可以按照节点和边界两种形式给定,这两种方法都是在相关的节点上进行直接赋值,并不能保证进入计算域内泥沙总体积. 相关设置 XX_run.nml 河流参数设置 &NML_RI ...

  3. SNPEFF snp注释 (添加自己基因组)

    之间介绍过annovar进行对snp注释,今天介绍snpEFF SnpEff is a variant annotation and effect prediction tool. It annota ...

  4. WPS表格数据透视表的美化和布局

    设计--分类汇总--在组的底部显示所有分类汇总   把二级分类单独放在一类中 设计--报表布局--以表格形式显示   快速调整表格的外观 分析--+/-按钮   设置字段的数字格式以万元为单位 选中任 ...

  5. 使用SpringBoot实现文件的下载

    上一篇博客:使用SpringBoot实现文件的上传 已经实现了文件的上传,所以紧接着就是下载 首先还是html页面的简单设计 <form class="form-signin" ...

  6. mysql-centos8下安装

    参考文章 1.下载安装包 客服端与服务端 依赖包 2.linux下检查是否安装 rpm -qa | grep -i mysql 安装过会显示软件名称,没安装过就是空的 3.安装包传到虚拟机 先需要把安 ...

  7. idea 启动debug的时候throw new ClassNotFoundException(name)

    idea 启动debug的时候throw new ClassNotFoundException(name) 启动debug就跳转到此界面 解决办法 这个方法只是忽略了抛异常的点,并没有真正解决问题.后 ...

  8. day07 ORM中常用字段和参数

    day07 ORM中常用字段和参数 今日内容 常用字段 关联字段 测试环境准备 查询关键字 查看ORM内部SQL语句 神奇的双下划线查询 多表查询前提准备 常用字段 字段类型 AutoField in ...

  9. windows下 apache 二级域名相关配置 【转】

    转至: http://www.th7.cn/Program/php/201306/141305.shtml 今天给大家总结下 windows 下 apache的二级域名的相关配置 下面就利用本地127 ...

  10. 【Swift】CoreData的使用

    CoreData只是iOS数据持久化的其中一个方法,所有数据持久化如下 1.plist文件(属性列表),通常用于储存用户设置,也zhi可以用于存储捆绑的信息: 2.preference(偏好设置),常 ...