winapi – 如何在Vista / Windows7中添加持久IPv6地址?
我想使用API??调用或注册表编辑添加持久IPv6地址.我目前已经实现了一个使用
CreateUnicastIpAddressEntry API成功添加IPv6地址的代码,但是当重置适配器或重新启动机器时,IP地址会被破坏(如MSDN文档中所述).
使用IPv4,很容易做到.只需使用AddIPAddress API结合注册表项即可获得所需的结果. 我试图在Windows注册表中找到用于保存IPv6地址但没有任何成功的任何条目. MSDN文档建议使用netsh.exe来执行任务,但是我非常确定netsh.exe正在执行一些API调用或注册表项来完成此任务(Microsoft未在任何地方记录). 怎么能实现这一目标? 解决方法
好吧,经过对netsh.exe的一些逆向工程和详细分析后,我认为有足够的信息来创建一个持久的ipv6地址.
ipv6地址(UNICAST)存储在以下注册表项中: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNsi{eb004a01-9b1a-11d4-9123-0050047759bc}10 对于要添加的每个ipv6地址,创建一个REG_BINARY值,使得该值的名称包含NET_LUID与ipv6地址完全连接.例如,如果ipv6地址是2001 :: 1,则该值的名称将为000000090000 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNsi{eb004a01-9b1a-11d4-9123-0050047759bc}8` 0010000000000000000000000000001,其中前16个字符是网络适配器的NET_LUID,其余为ipv6地址. 此注册表值数据由48字节长的结构组成,如下所示: typedef struct _UNKNOWN { ULONG ValidLifetime; ULONG PreferredLifetime; NL_PREFIX_ORIGIN PrefixOrigin; NL_SUFFIX_ORIGIN SuffixOrigin; UINT8 OnLinkPrefixLength; BOOLEAN SkipAsSource; UCHAR Unknown[28]; } UNKNOWN; 此结构的最后28个字节是未知的,必须初始化为0xFF. 有关UNKNOWN结构成员的更多信息,请参阅msdn中的MIB_UNICASTIPADDRESS_ROW结构信息. 在执行此操作时,我还发现ipv6 ANYCAST地址在注册表项中的存储方式类似: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNsi{eb004a01-9b1a-11d4-9123-0050047759bc}8` (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 升级Windows Server 2003 R2 Enterprise(32位)
- windows – ETS / Mnesia RAM表中的官方/建议/允许的最大记
- windows-services – 更新Windows服务的过程?自动化还是手
- active-directory – 当您授予用户管理员访问权限时,SBS 20
- Windows 下单机最大TCP连接数
- windows – 在程序文件文件夹上安装有多重要?
- cmd – 如何为特定应用程序强制传出ip? ForceBindIp似乎不
- filesystems – 媒体服务器的最佳文件系统?
- windows-server-2008-r2 – 永久挂载网络共享而无需登录?
- windows-server-2008 – 如何为单个办公室设置多个DHCP范围