检查是否正在使用专用IP地址

时间:2015-08-10 22:43:09

标签: c++ network-programming ip

根据我的理解,DHCP会自动为设备分配IP地址。如果我想在192.168.0.0 - 192.168.255.255范围内手动设置主机(Windows主机)专用网络内设备的IP地址。我如何检查该地址是否已被采用。

我想编写一个函数,该函数将通过私有网络范围的有效地址递增。如果有效且未使用,则返回该地址。我需要一些方法来实现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?)。

编辑:我想我可能错过了我原来的问题。 &#34;网络&#34;我使用的只是PC的私人寻址空间。它是本地的和孤立的。例如,如果我插入以太网设备,PC将为其分配192.168.0.0 - 192.168.255.255范围内的专用IP地址。仅供主机使用。我设置的手动地址是临时的。将使用不到一分钟然后丢弃。我并不担心任何网络限制或问题,我如何检查是否已经使用了ip。

2 个答案:

答案 0 :(得分:3)

不要这样做。即使它可以工作,也不能阻止DHCP服务器稍后将该地址分配给另一台机器。

您应该限制DHCP服务器在配置中使用的地址范围。然后,您可以静态分配其余的地址。

答案 1 :(得分:1)

如果您手动设置设备的地址,可能会发生许多奇怪的事情:

  • 您可能会使用尚未连接的计算机的现有地址。 DHCP租约可以提供24小时或更长时间,如果另一台机器再次打开,它将再次获得地址。所以你必须拥有相同IP地址的电脑!想象一下,你的电话号码与你的邻居相同:这将是一团糟!

  • 您有可能使用隐藏给您的机器的现有地址,或者由于网络安全而无法拒绝您的请求

  • 您可能会使用与您的网络地址方案不兼容的地址。基本上,您的机器将完全隔离,因为网络邻居和路由器不会识别此地址。 (例如:使用192.168.0.0范围,当网络在10.0.0.0中时,或者使用路由器认为在不同子网中的地址)

基本上,你想要实现的目标不会起作用!不是因为C ++部分,而是因为网络限制。

如果要在家进行实验,您可以阅读NMAP,这是一种扫描网络查找现有地址的工具。粗略的方法是ping地址并等待返回。但正如所说的安全措施通常会打败这种方法。在企业环境中,您甚至不应该尝试,因为您的PC很快就会被报告为对公司安全产生怀疑。