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

How can I use C# to determine which IP addresses on my local network are static/dynamic?

我正在本地网络上扫描 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 是 static/dynamic。目前,我的功能只检查我的机器。

谁能指出我正确的方向?我找不到做这样的事情的参考资料,但我怀疑这是不可能的。

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

但是:

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

不同的方法:

新想法,但在重要网络中这样做很危险,我根本不推荐它:启动您自己的 DHCP 服务器并开始提供地址,看看谁接受了它们,然后将它们设置回去。请注意,这可能会对公司网络等造成巨大破坏。