【问题标题】:Check if Private IP address is in use检查私有 IP 地址是否正在使用中
【发布时间】:2015-11-03 00:08:45
【问题描述】:

据我了解,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?)。

编辑:我想我可能错过了我最初的问题的措辞。我正在使用的“网络”只是 PC 的私有寻址空间。它是本地的和孤立的。例如,如果我插入以太网设备,PC 会为其分配一个范围为 192.168.0.0 - 192.168.255.255 的私有 IP 地址。仅供主机使用。我设置的手动地址是临时的。将使用不到一分钟然后丢弃。我不担心任何网络限制或问题,只是我如何检查 IP 是否已被使用。

【问题讨论】:

    标签: c++ network-programming ip


    【解决方案1】:

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

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

    【讨论】:

    • 这是一个临时测试环境。该地址将仅在此检查和其余测试中使用,然后在稍后重置。
    • 它的用途没有任何区别。遵循这个建议。不要制造定时炸弹。
    • 如果您仍然不相信,想一想如果您的网络中的 2 台机器同时执行此操作会发生什么。你是在自找麻烦。
    • 或者想想几年后其他人运行这个程序会发生什么。
    • 这是本地的。所以在宿主内部。我想只能由主机访问。只有获得地址的东西是 PC 内的以太网端口。否则寻址应该是安全的。我没有在设备上保留手动地址。我正在检查手动配置模式是否正常工作。我只是想事先检查它是否正在使用,以确保我不会与之前分配的 ip 冲突。
    【解决方案2】:

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

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

    • 您可能会使用对您隐藏的机器的现有地址或由于网络安全而无法回答您的请求

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

    基本上,您想要实现的目标是行不通的!不是因为 C++ 部分,而是因为网络限制。

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

    【讨论】:

    • 谢谢。因此,检查地址是否已连接的最佳方法是通过 pining 它。是否有一个列表存储在我可以访问的某个地方,其中包含主机本地 DHCP 分配的所有已分配 IP 地址?
    • DHCP 服务器必须持有一个租约列表。但是 DHCP 协议不预先进行任何查询,所以它只在服务器端可用,访问它的方式取决于实现堆栈。并且不要忘记:可能有多个 DHCP 服务器
    猜你喜欢
    • 2012-11-28
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2013-08-22
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多