1.使用 Dns.GetHostEntry() 函数获取本地 IP 地址

Dns 类获取与 Internet 上的主机有关的信息。在 C# 中,Dns 类中有很多方法可以实现 DNS 相关功能。其中 Dns.GetHostEntry() 函数用于获取主机的 IP 地址。
以下代码示例向我们展示了如何使用 C# 中的 Dns.GetHostEntry() 函数获取计算机的本地 IP 地址。

using System;
using System.Net;namespace get_local_ip_address
{class Program{static void Main(string[] args){IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());foreach (var ip in ipEntry.AddressList){Console.WriteLine("IP Address: " + ip.ToString());}}}
}// 输出
IP Address 0: fe80::1db8:23a7:6483:8976%20
IP Address 1: 192.168.43.239

在上面的代码中,我们将 Dns.GetHostName() 函数作为 Dns.GetHostEntry() 函数的参数传递,以获取 C# 中本地计算机的 IP 地址。这种方法的唯一问题是,它为我们提供了机器的所有 IP 地址。要获取特定的 IP 地址,我们必须使用 C# 编写以下代码。

using System;
using System.Net;namespace get_local_ip_address
{class Program{static void Main(string[] args){var host = Dns.GetHostEntry(Dns.GetHostName());foreach (var ip in host.AddressList){if (ip.AddressFamily == AddressFamily.InterNetwork){Console.WriteLine("IP Address = " + ip.ToString());}}}}
}// 输出:
IP Address = 192.168.43.239

在上面的代码中,我们检查了 ip.AddressFamily 是否等于 AddressFamily.InterNetwork。此条件检查 ip 变量中的 IP 地址是否为 IPv4 地址。上面的代码仅返回我们计算机的 IPv4 地址。如果要获取本机的 IPv6 地址,可以使用 AddressFamily.InterNetworkV6 属性,而不是 AddressFamily.InterNetwork 属性。

2.使用 Socket.LocalEndPoint 属性获取本地 IP 地址

当有多个 IP 地址时,获取我们机器的本地 IP 地址的一种更准确的方法是连接 UDP 套接字,然后读取其本地端点。C# 中的 Socket 类实现了 Berkeley 套接字接口,该接口提供了网络通信的功能。以下代码示例向我们展示了如何使用 Socket.LocalEndPoint 属性来确定我们的计算机在 C# 中的本地 IP 地址。

using System;
using System.Net;
using System.Net.Sockets;namespace get_local_ip_address
{class Program{static void Main(string[] args){string localIP = string.Empty;using (Socket socket = new Socket(AddressFamily.InterNetwork,                            SocketType.Dgram, 0)){socket.Connect("8.8.8.8", 65530);IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;localIP = endPoint.Address.ToString();}Console.WriteLine("IP Address = " + localIP);}}
}// 输出:
IP Address = 192.168.43.239

在上面的代码中,我们将 socket 套接字连接到我们的本地计算机,并使用 socket.LocalEndPoint 属性提取了 socket 的本地端点。我们使用 endPoint.Address 属性来获取 endPoint 的 IP 地址。

3.使用 Linq 获取本地 IP 地址

Linq 或语言集成查询提供了 C# 中的 SQL 功能。我们还可以使用 Linq 和 Dns.GetHostEntry() 函数在 C# 中获取我们计算机的本地 IP 地址。

以下代码示例向我们展示了如何使用 Linq 在 C# 中获取计算机的本地 IP 地址。

using System;
using System.Linq;
using System.Net;namespace get_local_ip_address
{class Program{static void Main(string[] args){if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()){Console.WriteLine("No Network Available");}IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());var ippaddress =  host.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);Console.WriteLine(ippaddress);}}
}// 输出:
192.168.43.239

在上面的代码中,我们使用 C# 中的 Linq 的 Dns.GetHostEntry() 函数确定了计算机的本地 IPv4 地址。其余代码类似于我们的第一个示例;唯一的区别是,我们从 Dns.GetHostEntry() 函数返回的地址列表中仅提取了一个 IPv4 地址。

4. 使用 NetworkInterface 类获取本地 IP 地址

NetworkInterface 类包含有关本地计算机上网络接口的数据并提供网络接口的统计信息和配置。NetworkInterface 类中的 GetAllNetworkInterfaces() 函数为我们提供了本地计算机上的所有网络接口。使用了 NetworkInterface 类中的 NetworkInterfaceType 属性获取网络接口的类型。

以下代码示例显示了我们如何使用所有这些功能来获取 C# 中本地计算机的本地 IP 地址。

using System;
using System.Linq;
using System.Net;namespace get_local_ip_address
{class Program{public static void getLocalIPAddressWithNetworkInterface(NetworkInterfaceType _type){string output = "";foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces()){if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up){foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses){if (ip.Address.AddressFamily == AddressFamily.InterNetwork){output = ip.Address.ToString();}}}}Console.WriteLine("IP Address = " + output);}static void Main(string[] args){getLocalIPAddressWithNetworkInterface(NetworkInterfaceType.Wireless80211);}}
}// 输出:
IP Address = 192.168.43.239

在上面的代码中,我们使用 C# 中的 NetworkInterface 类检索了本地计算机的 WLAN IPv4 地址。上面的代码可用于获取我们本地计算机上的任何类型的 IP 地址。例如,如果要获取以太网接口的 IP 地址,则必须在函数调用中通过传递 NetworkInterfaceType.Ethernet 来指定它。

【转自】DelftStack
(对原文中的代码做了适当修改和简化,以突出主题及可对比性)

C#获取本机IP地址的4种方式相关推荐

  1. Python获取本机IP地址的几种方式

    目录 1.使用专用网址 2.使用自带socket库 3.使用第三方netifaces库 1.使用专用网站 获取的是公网IP. 网址:http://myip.ipip.net 代码: import re ...

  2. Python | 获取本机IP地址的几种方式

    1.使用自带socket库 获取局域网IP import socket # 函数 gethostname() 返回当前正在执行 Python 的系统主机名 res = socket.gethostby ...

  3. linux编程获取本机IP地址的三种方法

    这是一项不太清晰而且没有多大意义的工作.一个原因是网络地址的设置非常灵活而且都是允许用户进行个性化设置的,比如一台计算机上可以有多块物理网卡或者虚拟网卡,一个网卡上可以绑定多个IP地址,用户可以为网卡 ...

  4. C#如何获取本机IP地址,两种方法

    using System; using System.Net;namespace test {class Program{static void Main(string[] args){//获取本机所 ...

  5. (转载)Linux编程获取本机IP地址的三种方法

    (转载)http://blog.csdn.net/jcwKyl/article/details/6324147 这 是一项不太清晰而且没有多大意义的工作.一个原因是网络地址的设置非常灵活而且都是允许用 ...

  6. 获取kvm的ip地址的三种方式

    我的其中一台kvm虚拟机名称为zhu02 1 通过控制面板进入kvm虚拟机,然后用ip  a来确定虚拟机ip virsh console zhu02 登录用户密码,直接ip a查找 2 通过domif ...

  7. Shell脚本中获取本机ip地址,Linux获取本地ip地址

    在 Shell 脚本中获取本机 IP 地址可以通过多种方式实现,这里介绍三种常用的方法: 1. 使用 ifconfig 命令获取本机 IP 地址 ifconfig 命令可以获取本机网卡的配置信息,包括 ...

  8. linux获取本机IP地址

    转自:http://blog.csdn.net/bailyzheng/article/details/7489656 ifaddrs结构体定义如下: C代码   struct ifaddrs { st ...

  9. Go 学习笔记(79)— Go 标准库 net(获取本机IP地址)

    1. 获取本机 IP 地址 package mainimport ("fmt""net" )// 获取本机网卡IP func getLocalIP() (ipv ...

最新文章

  1. LTE - PRACH 时频资源介绍
  2. webpack 项目使用 html-webpack-plugin(3)
  3. Python切片(入门7)
  4. 终于弄明白Framework 3.5为什么在IIS的ASP.NET选项找不到?
  5. 智宇科技 ZYARJX-1机械臂智能小车 —— PS2游戏手柄控制程序
  6. 场景联创 施耐德电气“绿色智能制造创赢计划”第二季收官
  7. mvc html.dropdownlist,ASP.NET MVC4中使用Html.DropDownListFor的方法示例
  8. Android官方命令深入分析之虚拟机
  9. swing的jlist的值怎么获取_彻底解决安卓/IOS获取蓝牙ID不一致的问题
  10. SunOS与Solaris系统的对应关系
  11. cpan安装_生信平台搭建(五):安装perl模块
  12. ESC键居然有这样的妙用!!!你知道吗?
  13. mysql全文索引是什么_Mysql中的全文索引
  14. MySQL-次日留存率问题
  15. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)...
  16. 你不知道的JavaScript--Item29 DOM基础详解
  17. 五分之四的不同表达式_省技能大赛题库(五) 滴定分析基础知识
  18. 【IoT】产品开发:产品开发战略指南:如何获得竞争优势?
  19. c语言中用age表示年龄的词语,age和aged表示年龄的区别
  20. pycharm 总弹出modify setUp的解决办法

热门文章

  1. Unity中实现放大镜的功能
  2. javascript中的onpropertychange事件 与 jquery中的propertychange事件
  3. MyIE4.0又回来了,GreenBrowser后续开发,重新开源,大赞
  4. [Canvas系列]Canvas绘制圆弧形状_04
  5. 【仿真】Carla之Traffic Manager [3]
  6. 5.计蒜客ACM题库.A2234 结果填空:青蛙爬井
  7. android 设置铃声文件夹在哪里,Android 设置铃声的文件夹
  8. mac tcp调试命令
  9. python中的pygame安装不成功
  10. IAR for ARM 安装与注册(超详细)