Tag: ipv6

如何使用getifaddr()函数获取IPV6接口地址

我有getifaddrs()定义,但它适用于IPv4。 请指导我如何使用getifaddrs()函数获取IPv6地址。

在IPv4客户端/服务器应用程序中添加对IPv6的支持 – sin6_flowinfo和sin6_scope_id字段?

我致力于为多个应用程序实现IPv6支持,但我想知道这两个字段是什么。 关于这一点的问题很少,所以我不确定我做对了。 关于范围ID( sin6_scope_id ) – 好吧, Q1 , Q2 , Q3和Q4给了我关于范围ID的想法,我想我明白了。 所以,我将不得不再添加一个配置参数,以使scope-id可配置。 (我决定在这里添加,以防有人对此感兴趣)。 短时间 – 范围ID是唯一确定哪个设备应该处理流量所必需的 – 因为可能有多个接口,具有相同的IP,但具有不同的(接口?)ID。 到现在为止还挺好。 但是“流量信息”怎么样( sin6_flowinfo ) 它是为了什么? 我找不到任何有趣的东西。 我阅读了RFC,但它根本没有帮助我。 sin6_flowinfo是否有一些可能的值(比如 – 几个值,比如标志,这意味着什么),或者就像sin6_scope_id – 可能是任何值,取决于设备,我正在尝试连接? 我应该担心它,或者我只是把它留下0 (就像在Beej的网络编程指南中一样 。 是的 ,我尝试过,它有效,但我不确定它是否只适用于这种情况(如果它取决于某些网络配置),如果它设置为0 ,它将始终有效? 或者,也许,我应该让它可配置,我的意思是 – 添加一个配置选项,让用户定义它的值? google -ing“sin6_flowinfo”给了我结构定义和手册页,这个字段没什么用处。 任何有趣的来源? (可理解的一个……不是RFC:D) 编辑 :嗯,在@glglgl的回答和提示之后, sin6_flowinfo可能已经过时了,我发现了一些有趣的资料来源: RFC:IPv6流标签规范 , IETF草案:流标签作为传输层Nonce , solaris实用指南和维基百科 。 该字段不是过时的(或者我找不到这样的来源,这证实了这一点),但它看起来像0因为价值足够好。

使用resolv.h的名称解析器和IPv6

我编写或修改执行名称解析并需要对流程进行良好控制的程序。 所以我不使用getaddrinfo() ,我更深入地使用res_query() / res_send() / etc,记录在resolver(3)中。 虽然没有记录,但设置解析器的常用方法是更新_res.nsaddr_list 。 但是这个在resolv.h中定义的数组存储了struct sockaddr_in ,它只是IPv4地址。 (IPv6地址是struct sockaddr_in6 ,与系列无关的系统将使用struct sockaddr 。) 我正在寻找一种方式(最好是可移植的,至少在各种Unix中)告诉_res我也想要IPv6地址。 显然,很久以前,在FreeBSD中有一个具有这种能力的_res_ext但我在最近的FreeBSD 7中找不到它( grep _res_ext /usr/include/resolv.h什么也没发现)。 您仍然可以找到使用它的代码 (尝试使用Google Codesearch )。 感谢Alnitak,我注意到它现在显然是_res._ext而不是.res_ext 。 我想知道这些东西在哪里被记录或公布…我不知道_res._ext是多么便携。 我可以在Debian和FreeBSD上找到它。 似乎很少有程序使用它。

C中的IPv6解析

我想知道如何在C中解析IPv6地址并将其转换为128位值? 所以hex地址如1:22:333:aaaa:b:c:d:e需要转换为128位等效二进制。 问题是IP地址可能是类型::2及其变体,因为它们是有效的IPv6地址。 输入来自键盘,因此是ASCII格式。