检查是否有“私网IP地址”被使用
Check if Private IP address is in use
根据我的理解,DHCP会自动为设备分配IP地址。如果我想手动设置主机(Windows主机)私有网络内的设备的IP地址,范围为192.168.0.0 ~ 192.168.255.255。我怎样才能知道那个地址是否已经有人了呢?
我想写一个函数,它将通过私有网络范围的有效地址递增。如果有效且未使用,则返回该地址。我需要一些方法来实现ip_is_valid(int*ip_addr)
函数。
bool assign_ip( int* ip_addr)
{
int new_ip_addr[4] = {192,168,0,0};
for (int i = 0; i < 255; i++)
{
new_ip_addr[2] = i
for (int j = 0; j <255; j++)
{
new_ip_addr[3] = i;
if (ip_is_valid(new_ip_addr))
{
ip_addr[0] = new_ip_addr[0];
ip_addr[1] = new_ip_addr[1];
ip_addr[2] = new_ip_addr[2];
ip_addr[3] = new_ip_addr[3];
return(true);
}
}
}
return(false);
}
我可以使用什么现有的c++库来访问当前发布的IP,或者我可以用什么简单的方法来检查IP是否被使用(ping?)
编辑:我想我可能错过了我最初的问题。我正在使用的"网络"只是PC的私有寻址空间。它是地方性的、孤立的。例如,如果我插入以太网设备,PC将为其分配一个在192.168.0.0 - 192.168.255.255范围内的私有IP地址。仅供主机使用。我设置的手动地址是临时的。使用不到一分钟就会被丢弃。我不担心任何网络限制或问题,只是如何检查ip是否已被使用。
不要那样做。即使它可以工作,您也无法阻止DHCP服务器稍后将该地址分配给另一台机器。
您应该在配置中限制DHCP服务器使用的地址范围。然后,您可以静态地分配其余的地址。
如果你手动设置设备地址,可能会发生很多奇怪的事情:
-
您可能会使用尚未连接的机器的现有地址。DHCP租期可以为24小时或更长时间,如果另一台机器再次打开,它将再次获得它的地址。所以你必须用相同的IP地址的pc !想象一下,如果你和邻居的电话号码相同,那将是一团糟!
-
您可能会使用对您隐藏的机器的现有地址或由于网络安全原因不响应您的请求
-
您可能会使用与您的网络地址方案不兼容的地址。基本上,您的机器将被完全隔离,因为网络邻居和路由器将无法识别此地址。(例如:使用192.168.0.0范围,当网络是在10.0.0.0,或使用一个地址,你的路由器认为是在不同的子网)
基本上,你想要达到的目标是行不通的!不是因为c++部分,而是因为网络的限制。
如果是为了在家里做实验,你可以阅读NMAP,这是一个扫描网络现有地址的工具。粗略的方法是ping地址并等待返回。但如前所述,安全措施通常会挫败这种方法。在公司环境中,你甚至不应该尝试,因为你的电脑很快就会被公司安全部门报告为可疑。
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 使用 IP 帮助程序的 Windows 中活动 UDP 连接的远程地址
- C++ / Qt:如何检测主机名或IP地址何时引用当前系统?
- 使用 C++将 IP 地址附加到字符*
- 使用全局 IP 地址时,C++ winsock 2 应用程序中的代码是否必须更改?
- Rabbitmq 将本地主机更改为 IP 地址C++
- C++ - 使用代码块从文件中读取 IP 地址
- C 使用from_string创建IP地址的C 导致lambda错误
- 如何在解析过程中区分 IP 地址和域名
- 如何使用 asio 库获取 IP 地址的主机名
- IP地址匹配过滤功能
- 如何将C++ ulong 4 字节 IP 地址正确转换为 C# 类型
- 如何在NS3中设置节点的IP地址和数据?
- 在无效地址上,boost::asio::ip:::address::from_string 没有引发异常
- 如何从活动的 udp 连接获取远程 IP 地址和端口
- 无符号的 int 到 IP 地址字符串,不带 itoa/to_string/boost
- 如何在FD_SET内获取套接字的IP地址
- 使用Boost库中的PC中获取我的以太网设备IP地址的列表
- 使用静态IP地址时,ESP32 httpclient连接拒绝了
- C++检查有效的 IP 地址或 IP