检查是否有“私网IP地址”被使用

Check if Private IP address is in use

本文关键字:地址 IP 是否 私网 检查      更新时间:2023-10-16

根据我的理解,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地址并等待返回。但如前所述,安全措施通常会挫败这种方法。在公司环境中,你甚至不应该尝试,因为你的电脑很快就会被公司安全部门报告为可疑。