none
NetworkInterface类查出我的网卡有两套ip,应该取哪个 RRS feed

  • 问题

  • 我的网卡一开始设为自动获取ip,这时使用NetworkInterface查出一个ip地址,掩码,网关,这是一套。

    后来我为网卡设置静态ip+掩码+网关,这是第二套。现在,我用NetworkInterface从该网卡查出两套ip地址,存储在两个collection里面。

    其中一个collection存储ip和掩码,另一个collection存储网关。

    出乎我意外的是:存储ip和掩码的collection的第一个item是第二套ip和掩码,第二个item是第一套ip和掩码;

    存储网关的collection的第一个item是第一套网关,第二个item是第二套网关,和前面那个collection正相反。

    有规律可寻吗?msdn里没介绍。

    我想得到当前在网卡上设置生效的ip+掩码+网关,尽量不用ManagementObject,因为这个类只在网卡连网线时有效。也不用注册表和命令行,担心移植性差。是否有p-invoke的实现方法,或者现成的.net库。

    谢谢

    2020年7月24日 1:11

全部回复

  • Hi sincos2007,

    欢迎来到MSDN论坛

    根据我的搜索,除了NetworkInterface方法之外,我认为使用WMI是获取ip地址,掩码,网关最有效的办法。

    具体代码如下。

                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection nics = mc.GetInstances();
                foreach (ManagementObject nic in nics)
                {
                    if (Convert.ToBoolean(nic["ipEnabled"]) == true)
                    {
                        string ip = (nic["IPAddress"] as String[])[0]; // IP address
                        string ipsubnet = (nic["IPSubnet"] as String[])[0]; // Subnet mask
                        string ipgateway = (nic["DefaultIPGateway"] as String[])[0]; // Default gateway
                        Console.WriteLine("ip is {0} subnet mask is {1} gateway is {2}",ip,ipsubnet,ipgateway);
                    }
                }

    希望这会对你有所帮助。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年7月27日 2:57
    版主