将ipv6 slaac地址绑定到Windows IP堆栈错误10049

问题描述 投票:4回答:1

背景:

这是第二次调用bind停止了我项目的开发进度。第一次是Selecting a socket interface for any unknown environmentbind是当时的感知错误,其不透明的源代码不允许我看到虚假的Hyper-V接口。我实现了Remy Lebeau的建议,即使用GetAdaptersAddresses在适配器接口之间循环以获取所需的条目。由于我正在创建ipv6 slaac ip地址,因此我接下来实现了RFC7217。这将产生如下地址:2600:8806:2700:115:617e:7efc:2e2a:31cc,其中network id(前8个字节)是标准地址,来自Router Advertisement,而“接口ID”(后8个字节)是RFC7217告诉您的方法。我可以为创建的地址创建套接字对象,而不会出现问题。

问题:

但是当我尝试bind地址时,出现错误WSAEADDRNOTAVAIL(10049)

所请求的地址在其上下文中无效。如果name参数所指向的指定地址不是此计算机上的有效本地IP地址,则返回此错误。

间接地,这意味着bind正在工作。这只是意味着Windows从未见过该地址,因为ISP没有给出该地址。但这就是SLAAC地址的本质。

问题:

我应该如何进行操作,以使Windows能够识别我的slaac地址,否则我将无法进行Listen呼叫?还有其他人通过其他方式解决了此问题吗?

Attempt1:

拨打CreateUnicastIpAddressEntry

的电话。不幸的是,此调用要求该应用程序具有administrator特权。我在Microsoft开发人员社区中提出了以下建议:以用户身份而不是以管理员身份调用CreateUnicastIpAddressEntry函数

Edit1:

我现在已经运行了MS示例程序(请参阅Unable to GetUnicastIpAddressEntry after CreateUnicastIpAddressEntry)。这些功能可以正常工作,但是在检索ipv6 addr时出现问题。 bind()

在成功输入后仍然不起作用。

结论:

一个ipv6 slaac地址的网络ID来自ISP,它通过路由器来自ISP,因此这不是安全威胁。其接口ID不可破解。该地址不存在安全风险,因此不应受到管理员特权的限制。

背景:这是绑定调用第二次停止我项目的开发进度。第一次是为任何未知环境选择套接字接口。然后,bind是感知到的错误,...

bind ipv6 windows-socket-api
1个回答
0
投票

在解决Unable to GetUnicastIpAddressEntry after CreateUnicastIpAddressEntry过帐的过程中,已验证bind()listen()确实可以用于RFC7217 IPv6 SLAAC生成的地址。参见答案。

© www.soinside.com 2019 - 2024. All rights reserved.