从DNS名称获取地址涉及…查询命名服务器(DNS!).如果要枚举结果,请在asio中使用解析器:

简单的例子:

#include

#include

#include

using boost::asio::ip::address;

std::set

unique_endpoints(std::string const& ip)

{

using resolver = boost::asio::ip::tcp::resolver;

boost::asio::io_service ios; // TODO use existing service / resolver

resolver r(ios);

std::set

unique;

for (auto it = r.resolve({ip, ""}); it != resolver::iterator {}; ++it)

{

//std::cout << "Resolved: " << it->host_name() << " -> " << it->endpoint() << " " << it->service_name() << "

";

address a = it->endpoint().address();

if (a.is_v4())

unique.insert(boost::asio::ip::address_v6::v4_mapped(a.to_v4()));

else

unique.insert(a);

}

return unique;

}

template

bool endpoints_overlap(S const& a, S const& b)

{

bool matching_found = false;

std::set_intersection(

a.begin(), a.end(), b.begin(), b.end(),

boost::make_function_output_iterator([&](address const&) { matching_found = true; }));

return matching_found;

}

int main()

{

auto h = unique_endpoints("bbs2.fritz.box");

auto a = unique_endpoints("192.168.2.111");

auto b = unique_endpoints("::ffff:192.168.2.111");

auto c = unique_endpoints("::ffff:c0a8:026f");

assert(endpoints_overlap(a, b));

assert(endpoints_overlap(a, c));

assert(endpoints_overlap(b, c));

assert(endpoints_overlap(h, a));

assert(endpoints_overlap(h, b));

assert(endpoints_overlap(h, c));

}

请注意,当DNS响应之一匹配时,此测试将确定端点重叠.这在群集设置中可能并不总是正确的(?那里没有专家),并且您可能还想在使用此算法之前检测广播地址(未经测试).

另请注意,我认为没有办法检测实际主机的等效性(这意味着,如果主机具有多个物理/逻辑NIC,它们将在传输级别上显示为单独的服务器).

最后,在实际应用程序中,您将需要异步进行解析(使用async_resolve)

c语言中打印ipv6地址,c-来自任何有效地址的ipv4和ipv6相关推荐

  1. c语言中打印ipv6地址,IPv6地址介绍

    1. 认识IPv6地址 IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示:而IPv6地址类似X:X:X:X:X:X:X:X的格式,它是1 ...

  2. C语言中打印图形问题

    C语言中打印图形问题 上半部分规律:星号数目是行数的二倍减一,空格数是上半部分总行数减去它所在的行号: 下半部分规律:从下半部分开始算起,每行星号数是2line-2n-1,空格数目为它所在的行号 #d ...

  3. c语言编程输出字母倒三角形,如何在C语言中打印倒三角形

    如何在C语言中打印倒三角形 发布时间:2020-07-28 11:53:15 来源:亿速云 阅读:281 作者:Leah 这期内容当中小编将会给大家带来有关如何在C语言中打印倒三角形,文章内容丰富且以 ...

  4. C语言中打印结果如何保留两位、三位小数以及整数?

    首先我们要保证我们输入是double类型的数据 第二步当然是打印a,我们要知道打印double类型的数据打印时需要使用占位符%f. (在输入数据时用%lf) 那么打印保留两位数,我们应该怎么做呢? % ...

  5. IPv6技术精要--第3章 对比IPv4和IPv6

    文章目录 3.1 IPv4报文头VSIPv6报文头 -----IPv4报文头------- IHL ( 4比特) ToS (8比特) 数据包总长(Total Length, 16比特) 标识符(Ide ...

  6. C语言中打印扩展字符

    1.ASCII 打印字符:数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现.注:十进制32代表空格 ,十进制数字 127 代表 DELETE 命令.下面是ASCII码和相 ...

  7. ipv6地址为什么显示两个_【聚焦】IPv6进行时,别被这些因素绊住脚

    智慧宇易 精挑细选 2020年 5933篇 不能仅仅为了支持IPv6而使用IPv6,如何利用IPv6解决现实问题尤其重要.创新网络服务.应用服务.数据服务,可能是发展IPv6最重要的一个策略. 11月 ...

  8. vue中打印插件vue-print-nb(一)——基本示例

    vue中打印插件vue-print-nb(一)--基本示例 npm地址:https://www.npmjs.com/package/vue-print-nb 下载print.js地址:https:// ...

  9. C语言数组名、数组名取地址、数组首元素地址之间的关系

    C语言中数组名a.数组名取地址&a.数组首元素地址&a[0]三者的概念有点绕,花了点时间好好琢磨了一下,将自己的理解记录下来,如有错误之处,欢迎赐教. 首先看下面的一小段代码: #in ...

最新文章

  1. 智能摄像头安全风险分析及对策研究
  2. 设计模式之建造者模式学习笔记
  3. win10不能上网问题的解决办法
  4. factor--符号矩阵的因式分解
  5. java的(PO,VO,TO,BO,DAO,POJO)解释1
  6. Flink 1.12 CDH 6.3 集成
  7. Hawq超过最大允许连接数
  8. 交换机配置工具_二层网管交换机应用—环路检测
  9. 每天一个linux命令(6) ar命令
  10. MATLAB中的命令行输出
  11. android.view.VelocityTracker
  12. @软考考生,你想要的论文写作方法及规范,给你安排上了!
  13. php手机号批量分类,一个非常好的php实现手机号归属地查询接口类
  14. 西安电子科技大学计算机应用,西安电子科技大学计算机应用技术考研
  15. ASIHTTPRequest实现https双向认证请求
  16. MMORPG开发入门[转]
  17. 第一次进入Eclipse MARS2界面后的一些基本设置
  18. 怎样注册完申请个人电子邮箱?2022邮箱号码大全速看
  19. 市场上的安防摄像头或安防系统多少钱?安防摄像头价格指南
  20. 【译文】学习深度学习的四个步骤

热门文章

  1. word中的图片设定成统一文字环绕格式
  2. NLP 《分词方法》
  3. 漫步数学分析七——集合的闭包
  4. leetcode - 98. 验证二叉搜索树
  5. 【差分隐私发论文朝哪个方向走?】差分隐私的过去,现在和将来
  6. 联邦学习安全与隐私保护综述 A survey on security and privacy of federated learning
  7. 对比关系生成模型(Comparative Relation Generative Model)
  8. 数字图像处理-- 图像的统计方法
  9. 边缘检测之Canny
  10. aarch64(ARMv8)交叉编译环境下载