如何使用C#确定本地网络上的哪些IP地址是静态/动态的?

时间:2019-03-18 14:39:38

标签: c# network-programming ip-address static-ip-address dynamic-ip

我正在扫描本地网络上的IP,找到IP后,我希望收到的信息之一是该IP是静态的还是动态的。到目前为止,我发现的最接近我的问题仅是检查您自己的计算机。这是我的功能:

    private bool isDynamic()
    {
        NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
        int currentSocketIndex = (new IPPacketInformation()).Interface;

        bool isDynamic = adapters[currentSocketIndex].GetIPProperties().GetIPv4Properties().IsDhcpEnabled;
        return isDynamic;
    }

我想对此进行修改,以便它可以使用IP地址,连接到IP所属的设备(如果该IP存在并且不阻止连接),并确定是否那个机器的IP是静态/动态的。目前,我的功能仅检查我的机器。

有人能指出我正确的方向吗?我找不到执行此类操作的参考,但我怀疑这是不可能的。

1 个答案:

答案 0 :(得分:0)

您找不到任何有关它的信息,因为如果您无法访问路由器,那将是不可能的。您只能通过询问路由器来发现,这很可能不会告诉您,或者需要路由器特定的请求/协议来告诉您。或者,您可以直接询问不会告诉您其IP是静态还是动态的设备,除非您在该计算机上安装了可以回答您请求的应用程序。某些操作系统可能已经提供了这种服务(例如Windows上的WMI),但是您将永远无法分辨出每个网络设备。

但是:

如果您有很多时间,您可以收听DHCP / BootP流量并找到这样的动态设备,因为动态设备会经常刷新其会话

一种不同的方法:

这个新主意但是在重要网络中却很危险,我根本不建议这样做:启动您自己的DHCP服务器并开始提供地址,看看谁接受它们,然后再将它们重新设置。请注意,例如,这可能会对公司网络造成巨大的损害。