当前位置:  开发笔记 > 编程语言 > 正文

如何以编程方式获取计算机的本地网络IP地址?(C#)

如何解决《如何以编程方式获取计算机的本地网络IP地址?(C#)》经验,为你挑选了4个好方法。

我需要使用C#和.NET 3.5从我的程序中获取计算机的实际本地网络IP地址(例如192.168.0.220).在这种情况下,我不能只使用127.0.0.1.

最好的方法是什么?



1> GBegen..:

如果要查找命令行实用程序ipconfig可以提供的信息,则应该使用System.Net.NetworkInformation命名空间.

此示例代码将枚举所有网络接口并转储每个适配器已知的地址.

using System;
using System.Net;
using System.Net.NetworkInformation;

class Program
{
    static void Main(string[] args)
    {
        foreach ( NetworkInterface netif in NetworkInterface.GetAllNetworkInterfaces() )
        {
            Console.WriteLine("Network Interface: {0}", netif.Name);
            IPInterfaceProperties properties = netif.GetIPProperties();
            foreach ( IPAddress dns in properties.DnsAddresses )
                Console.WriteLine("\tDNS: {0}", dns);
            foreach ( IPAddressInformation anycast in properties.AnycastAddresses )
                Console.WriteLine("\tAnyCast: {0}", anycast.Address);
            foreach ( IPAddressInformation multicast in properties.MulticastAddresses )
                Console.WriteLine("\tMultiCast: {0}", multicast.Address);
            foreach ( IPAddressInformation unicast in properties.UnicastAddresses )
                Console.WriteLine("\tUniCast: {0}", unicast.Address);
        }
    }
}

您可能对UnicastAddresses最感兴趣.



2> James Curran..:

使用Dns要求您的计算机在本地DNS服务器上注册,如果您在Intranet上,则不一定如此,如果您在家中使用ISP,则更不可能.它还需要网络往返 - 所有这些都是为了找到有关您自己的计算机的信息.

正确的方法:

NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
foreach(NetworkInterface  adapter in  nics)
{
    foreach(var x in adapter.GetIPProperties().UnicastAddresses)
    {
        if (x.Address.AddressFamily == AddressFamily.InterNetwork  && x.IsDnsEligible)
        {
                    Console.WriteLine(" IPAddress ........ : {0:x}", x.Address.ToString());
        }
    }
}

(更新2015年7月31日:修复了代码的一些问题)

或者对于那些只喜欢Linq系列的人:

NetworkInterface.GetAllNetworkInterfaces()
    .SelectMany(adapter=> adapter.GetIPProperties().UnicastAddresses)
    .Where(adr=>adr.Address.AddressFamily == AddressFamily.InterNetwork  && adr.IsDnsEligible)
    .Select (adr => adr.Address.ToString());



3> PostMan..:

链接 它说,添加System.net,并使用以下

    //To get the local IP address 
string sHostName = Dns.GetHostName (); 
IPHostEntry ipE = Dns.GetHostByName (sHostName); 
IPAddress [] IpA = ipE.AddressList; 
for (int i = 0; i < IpA.Length; i++) 
{ 
    Console.WriteLine ("IP Address {0}: {1} ", i, IpA[i].ToString ()); 
}


此外,匈牙利的符号在这一点上几乎已经死了.使用字符串hostName.
GetHostByName显示为已弃用.最后使用:IPAddress [] ipAddress = Dns.GetHostAddresses(strHostName); 完成同样的事情.

4> Jerub..:

由于一台机器可以有多个ip地址,找出你将用于路由到一般互联网的ip地址的正确方法是打开一个到互联网主机的套接字,然后检查套接字连接到看看该连接中使用的本地地址是什么.

通过检查套接字连接,您将能够考虑奇怪的路由表,多个IP地址和糟糕的主机名.上面的主机名的技巧可以工作,但我不认为它完全可靠.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有