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. 搜索工具Wox简单使用

    目录 下载安装 几个常用命令 自定义 Wox是快速搜索小工具,内置了everything(需要先安装),但比everything好用.不止是搜文件,网页.系统等都可以快速搜索,还可以自定义. 下载安装 ...

  2. BaiduPCS-Go----百度云下载工具

    1.网页登录百度网盘:https://pan.baidu.com/2.百度输入法生成:http://pcs.baidu.com/rest/2.0/pcs/file?app_id=265486& ...

  3. Markdown-写作必备

    Markdown--入门指南 导语: Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdow ...

  4. UE4打包启动失败:RunUAT.bat ERROR: AutomationTool failed to compile.

    打包配置正常的情况下,出现下面Log: RunUAT.bat ERROR: AutomationTool failed to compile. 基本上,可以先排查下任务管理器中是不是有UE4Edito ...

  5. 学习java 7.11

     学习内容: 泛型定义格式:<类型> 优点:把运行时期的问题提前到编译期间:避免了强制类型转换   泛型方法:public class Fanxing { public <T> ...

  6. 并发 并行 进程 线程 协程 异步I/O python async

    一些草率不精确的观点: 并发: 一起发生,occurence: sth that happens. 并行: 同时处理. parallel lines: 平行线.thread.join()之前是啥?落霞 ...

  7. 零基础学习java------day12------数组高级(选择排序,冒泡排序,二分查找),API(Arrays工具类,包装类,BigInteger等数据类型,Math包)

    0.数组高级 (1)选择排序 它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的起始位置 ...

  8. Node.js 概述

    JavaScript 标准参考教程(alpha) 草稿二:Node.js Node.js 概述 GitHub TOP Node.js 概述 来自<JavaScript 标准参考教程(alpha) ...

  9. 【leetcode】153. Find Minimum in Rotated Sorted Array

    Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example ...

  10. CVTE第二次笔试

    选择瞎答得,直接编程题目 1. 使用递归将字符串中的数字去并按顺序打印 输入例  adfsafsfs123123eogie09789 输出例 123123 09789 #include<iost ...