首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ipv6 slaac地址绑定到windows堆栈错误10049

将ipv6 slaac地址绑定到windows堆栈错误10049
EN

Stack Overflow用户
提问于 2019-11-01 17:06:41
回答 1查看 287关注 0票数 3

背景:

这是第二次给bind的电话已经停止了我的项目的开发进度。第一次是为任何未知环境选择套接字接口bind是当时被感知到的错误,它的不透明源代码不允许我看到虚假的超级V接口。我实现了Remy的建议,即使用GetAdaptersAddresses循环适配器接口以获得所需的条目。因为我要创建一个ipv6 slaac ip地址,所以接下来我实现了RFC7217。这产生了这样一个地址:2600:8806:2700:115:617e:7efc:2e2a:31ccnetwork id,前8个字节,是标准的,来自于路由器广告,而‘接口id’(后8个字节)是RFC7217告诉您如何制作的。我能够为创建的地址创建套接字对象,没有问题。

问题:

但是当我尝试bind地址时,我得到了错误WSAEADDRNOTAVAIL (10049)

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

间接而言,这意味着bind正在工作。这仅仅意味着windows以前从未见过这个地址,因为它不是由ISP提供的。但这正是SLAAC地址的本质。

问题:

我应该如何进行,以便windows能够识别我的slaac地址,没有这个地址我就不能打Listen电话了?有没有其他人已经解决了这个问题,也许是另一种方式?

Attempt1:

CreateUnicastIpAddressEntry.打个电话不幸的是,此调用要求应用程序具有管理员权限。我在微软的Developer中建议这样做:将CreateUnicastIpAddressEntry函数称为用户,而不是管理员

Edit1:

我现在已经运行了MS示例程序(请参阅无法GetUnicastIpAddressEntry后CreateUnicastIpAddressEntry)。函数可以工作,但是在检索ipv6 addr时有一个问题。bind()在成功的条目之后仍然不能工作。

Edit2:

进一步的测试表明,Bind()在以太网连接方面仍然失败。见bind()适用于ipv6无线适配器接口,但不适用于ipv6以太网(错误10049)。再一次,由于微软对无文档的__imp_bind函数的黑匣子调用,一个简单的调试问题实际上变得无法克服。

结论:

ipv6 slaac地址的网络id通过路由器来自ISP,因此不构成安全威胁。它的界面标识是不可裂的。该地址不存在安全风险,因此不应受制于管理员特权要求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-17 19:25:31

在解析无法GetUnicastIpAddressEntry后CreateUnicastIpAddressEntry发布的过程中,验证了bind()listen()确实可以用于RFC7217 IPv6 SLAAC生成的地址。看看它的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58663136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档