使用 c++ 在 Windows 计算机上添加新 IPv4 地址的最快方法是什么?

What is the fastest way to add a new IPv4 address on a windows computer using c++?

提问人:nwalters 提问时间:7/22/2023 最后编辑:Remy Lebeaunwalters 更新时间:7/24/2023 访问量:128

问:

我一直在使用 AddIPAddress() 函数添加新的 IP 地址,但是在该地址可用于通信和端口绑定之前有 ~4 秒的延迟。

我已经研究了添加 IP 的其他方法,并遇到了一种使用该函数运行命令的方法,该方法还添加了一个可用的 IP,但存在相同的问题,即在添加的 IP 可用之前需要 ~4 秒。我也尝试使用该命令来设置 IP 地址,但它在可用之前同样具有相同的 ~4 秒延迟。std::system()Netsh interface ipv4 add addressNetsh interface ipv4 set address

所以,我很好奇,有没有一种不同的方法可以通过 C++ 在 Windows 机器上添加(或设置)我可能没有找到的 IP 地址?或者,这种延迟是不可避免的,因为我无法控制的事情吗?

我不需要这个新的 IP 地址立即可用,任何可以将此时间缩短到 2 秒以下的东西都应该可以工作。另外,我更喜欢一种即使在计算机重启后也能保留 IP 地址的方法,但乞丐不能成为选择者。

C++ WinAPI IPv4

评论

4赞 RbMm 7/22/2023
仅以一种方式存在 - 调用具体的 winapi。在具体情况下可能正是 AddIPAddress。所有其他方法在这里都是毫无意义的 - 它使用了很多额外的代码,最后调用 winapi
4赞 Paul Sanders 7/22/2023
它可能正在寻找一个免费地址。这需要时间,因为它必须为子网上的其他计算机提供响应时间。所以你可能不能(也不想)让它更快。
6赞 drescherjm 7/22/2023
这让我尖叫着 XY 问题。我对这种需求的原因感到困惑。您真的需要为您的 PC 添加 IP 附加地址,这通常是 4 秒的问题吗?这是为了某种类型的测试吗?或者您是否正在尝试通过代码解决一些 PC 网络问题?
2赞 Jesper Juhl 7/22/2023
除非您想要以安全问题的形式受到伤害,否则不要使用。另外,你为什么要把你的问题外包给一些第三方代码?std::system
0赞 user207421 7/24/2023
@PaulSanders 嗯,不,不是,IP 地址是由呼叫者提供的,但 ARP 和 RARP 以及所有这些在网络上建立地址肯定需要有限的时间。

答:

1赞 YangXiaoPo-MSFT #1

正如评论所说,使用适用于 Windows 的具体 winapi。不要增加新的复杂性。

此外,函数需要时间才能工作是正常的。

顺便说一句,根据 AddIPAddress,另一种方式

若要创建持久的 IPv4 地址,请使用 Windows 管理中 Win32_NetworkAdapterConfiguration 类的 EnableStatic 方法 可以使用检测 (WMI) 控件。