C#获取本机IP地址(ipv4)

获取本机所有IP地址:

这些地址是包含所有网卡(虚拟网卡)的ipv4和ipv6地址。

 string name = Dns.GetHostName();
 IPAddress[] ipadrlist = Dns.GetHostAddresses(name); 

获取本机所有IPV4地址:

string name = Dns.GetHostName();
IPAddress[] ipadrlist = Dns.GetHostAddresses(name);
foreach (IPAddress ipa in ipadrlist)
{
  if (ipa.AddressFamily == AddressFamily.InterNetwork)
  Console.Writeline(ipa.ToString());
}

若要单单获取ipv4地址,可以用IPAdress.AddressFamily 属性判断:对于 IPv4,返回 InterNetwork;对于 IPv6,返回 InterNetworkV6。

然而如果本机可能有多个ipv4的地址,那如何获取访问默认网关时使用的网卡IP呢。在CSDN论坛找到了大神的方法,用的是查询本机路由表。

获取本机正在使用的ipv4地址(访问互联网的IP)

可别小看,还是有很多需要考虑的:

1.一个电脑有多个网卡,有线的、无线的、还有vmare虚拟的两个网卡。

2.就算只有一个网卡,但是该网卡配置了N个IP地址.其中还包括ipv6地址。

/// <summary>
 /// 获取当前使用的IP
 /// </summary>
 /// <returns></returns>
 public static string GetLocalIP()
 {
 string result = RunApp("route", "print",true);
 Match m = Regex.Match(result, @"0.0.0.0\s+0.0.0.0\s+(\d+.\d+.\d+.\d+)\s+(\d+.\d+.\d+.\d+)");
 if (m.Success)
 {
  return m.Groups[2].Value;
 }
 else
 {
  try
  {
  System.Net.Sockets.TcpClient c = new System.Net.Sockets.TcpClient();
  c.Connect("www.baidu.com", 80);
  string ip = ((System.Net.IPEndPoint)c.Client.LocalEndPoint).Address.ToString();
  c.Close();
  return ip;
  }
  catch (Exception)
  {
  return null;
  }
 }
 }
 /// <summary>
 /// 获取本机主DNS
 /// </summary>
 /// <returns></returns>
 public static string GetPrimaryDNS()
 {
 string result = RunApp("nslookup", "",true);
 Match m = Regex.Match(result, @"\d+\.\d+\.\d+\.\d+");
 if (m.Success)
 {
  return m.Value;
 }
 else
 {
  return null;
 }
 }
 /// <summary>
 /// 运行一个控制台程序并返回其输出参数。
 /// </summary>
 /// <param name="filename">程序名</param>
 /// <param name="arguments">输入参数</param>
 /// <returns></returns>
 public static string RunApp(string filename, string arguments,bool recordLog)
 {
 try
 {
  if (recordLog)
  {
  Trace.WriteLine(filename + " " + arguments);
  }
  Process proc = new Process();
  proc.StartInfo.FileName = filename;
  proc.StartInfo.CreateNoWindow = true;
  proc.StartInfo.Arguments = arguments;
  proc.StartInfo.RedirectStandardOutput = true;
  proc.StartInfo.UseShellExecute = false;
  proc.Start();
  using (System.IO.StreamReader sr = new System.IO.StreamReader(proc.StandardOutput.BaseStream, Encoding.Default))
  {
  //string txt = sr.ReadToEnd();
  //sr.Close();
  //if (recordLog)
  //{
  // Trace.WriteLine(txt);
  //}
  //if (!proc.HasExited)
  //{
  // proc.Kill();
  //}
  //上面标记的是原文,下面是我自己调试错误后自行修改的
  Thread.Sleep(100);  //貌似调用系统的nslookup还未返回数据或者数据未编码完成,程序就已经跳过直接执行
      //txt = sr.ReadToEnd()了,导致返回的数据为空,故睡眠令硬件反应
  if (!proc.HasExited)  //在无参数调用nslookup后,可以继续输入命令继续操作,如果进程未停止就直接执行
  {    //txt = sr.ReadToEnd()程序就在等待输入,而且又无法输入,直接掐住无法继续运行
   proc.Kill();
  }
  string txt = sr.ReadToEnd();
  sr.Close();
  if (recordLog)
   Trace.WriteLine(txt);
  return txt;
  }
 }
 catch (Exception ex)
 {
  Trace.WriteLine(ex);
  return ex.Message;
 }
 }

另有一种方法通过用ipconfig来获取:

private void GetIP()
 {
 Process cmd = new Process();
 cmd.StartInfo.FileName = "ipconfig.exe";//设置程序名
 cmd.StartInfo.Arguments = "/all"; //参数
 //重定向标准输出
 cmd.StartInfo.RedirectStandardOutput = true;
 cmd.StartInfo.RedirectStandardInput = true;
 cmd.StartInfo.UseShellExecute = false;
 cmd.StartInfo.CreateNoWindow = true;//不显示窗口(控制台程序是黑屏)
 //cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//暂时不明白什么意思
 /*
 收集一下 有备无患
 关于:ProcessWindowStyle.Hidden隐藏后如何再显示?
 hwndWin32Host = Win32Native.FindWindow(null, win32Exinfo.windowsName);
 Win32Native.ShowWindow(hwndWin32Host, 1); //先FindWindow找到窗口后再ShowWindow
 */
 cmd.Start();
 string info = cmd.StandardOutput.ReadToEnd();
 cmd.WaitForExit();
 cmd.Close();
 textBox1.AppendText(info);
 } 

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • 用C#编写获取远程IP,MAC的方法

    如果要想获得远程的地址,需要用sendarp这个函数来实现.具体的代码如下:  [DllImport("Iphlpapi.dll")]  private static unsafe extern int SendARP(Int32 dest,Int32 host,ref IntPtr mac,ref IntPtr length);  [DllImport("Ws2_32.dll")]  private static extern Int32 inet_addr(st

  • C#获取计算机名,IP,MAC信息实现代码

    利用C#获取计算机名,IP,MAC信息,如下为源代码: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Management; namespace Wenanry.Net { /// <summary> /// 获取计算机系统信息 /// </summary> public class ManagementSyst

  • C#获取真实IP地址实现方法

    本文实例讲述了C#获取真实IP地址实现方法,分享给大家供大家参考.具体实现方法如下: 通常来说,大家获取用户IP地址常用的方法是: 复制代码 代码如下: string IpAddress = ""; if((HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]!=null && HttpContext.Current.Request.ServerVariables[&q

  • C# 根据ip获取城市等相关信息

    复制代码 代码如下: /// <summary> /// 得到真实IP以及所在地详细信息(Porschev) /// </summary> /// <returns></returns> public string GetIpDetails() { //设置获取IP地址和国家源码的网址 string url = "http://www.ip138.com/ips8.asp"; string regStr = "(?<=&l

  • C#获取本机IP地址和Mac地址的方法

    本文实例讲述了C#获取本机IP地址和Mac地址的方法.分享给大家供大家参考.具体分析如下: 查找了几个方法,经过调试修改,下面这个方法能很好的获取到本地的IP和MAC地址.可以用于这方面的功能实现.主要是要添加System.Management的引用. using System; using System.Management; using System.Net; public class Program { static void Main(string[] args) { try { str

  • c#获取本机在局域网ip地址的二种方法

    复制代码 代码如下: /// <summary>/// 获取本机在局域网的IP地址/// </summary>/// <returns></returns>private string GetLocalIPAddress(){    System.Net.IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;    string strNativeIP = &quo

  • c#获取本机的IP地址的代码

    复制代码 代码如下: public static IPAddress GetHostIP(){            IPHostEntry ipe = Dns.GetHostEntry(Dns.GetHostName());            IPAddress ip = ipe.AddressList[0]; return ip;} private String GetIPAddress(){            String str;            String Result

  • C# 获取本机IP地址(IPv4和IPv6)

    目录 前言: 操作步骤 一,创建文件 二,窗体设计 三,代码设计 四 效果展示 总结: 前言: 在我们使用C# WinForm中,我们有时候是需要或者自己本机的IP地址进行处理,今天我们学习一下如何使用C# Winform获取主机的IP地址.现在博主手把手教你获取,很简单的. 操作步骤 一,创建文件 创建Winform窗体文件,这里我就不多做介绍,你们可以看看我之前的文章,都是保姆级的. 二,窗体设计 我们从winform 工具箱拖动textbox,和一个按钮,对按钮重命名 三,代码设计 3.1

  • 获取本机IP地址的实例(JavaScript / Node.js)

    --web 客户端JavaScript <!-- 调用方式 --> <body onload="checkCookie()"></body> function getYourIP() { const RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection; if (RTCPeerConne

  • java如何获取本机IP地址

    本文实例为大家分享了java实现获取本机IP地址的具体代码,供大家参考,具体内容如下 原因:同一台机子上开着两个web工程,现在有需求需要保证两个项目之间交互的安全问题.因为有个旧的项目,所以尽量不做改动.只能在新项目中做改动. 处理办法:获取本地的IP地址,有请求进来时查看请求的来源,只有来源是本地IP的才予以通过. 代码如下: /** * 任务调度调用拦截器 */ public class TaskControlInterceptor implements Interceptor { //存

  • Java获取本机IP地址的三种方法总结

    目录 1 获取局域网IP地址 2 获取全部 IPV4/IPV6 IP地址 3 获取全部存放本机IP地址 知识点补充 1 获取局域网IP地址 InetAddress.getLocalHost().getHostAddress(); 2 获取全部 IPV4/IPV6 IP地址 private static List<String> getIpAddress() throws SocketException { List<String> list = new LinkedList<

  • Java 获取本机IP地址的实例代码

    目录 前言 一.规则 二.获取 1.使用 2.工具类 前言 在Java中如何准确的获取到本机IP地址呢?网上大部分的做法是InetAddress.getLocalHost().getHostAddress().这的确能获取到本机IP地址,但是是不准确的.因为忽略了一个问题,网络环境是多变的,一台计算机不同的网卡有多个IP地址,Lan.WiFi.蓝牙.热点.虚拟机网卡等. 一.规则 127.xxx.xxx.xxx 属于 “loopback” 地址,即只能你自己的本机可见,就是本机地址,比较常见的有

  • python在Windows8下获取本机ip地址的方法

    本文实例讲述了python在Windows8下获取本机ip地址的方法.分享给大家供大家参考.具体实现方法如下: import socket hostname = socket.gethostname() IPinfo = socket.gethostbyname_ex(hostname) LocalIP = IPinfo[2][2] print LocalIP 希望本文所述对大家的Python程序设计有所帮助.

  • Linux Shell脚本中获取本机ip地址方法

    方法一:ifconfig -a ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:" 命令解析 ifconfig -a  和window下执行此命令一样道理,返回本机所有ip信息 grep inet                  截取包含ip的行 grep -v 127.0.0.1      去掉本地指向的那行 grep -v inet6             去掉

  • 分享Python获取本机IP地址的几种方法

    目录 1.使用专用网站 2.使用自带socket库 3.使用第三方netifaces库 1.使用专用网站 获取的是公网IP 网址:http://myip.ipip.net 代码: import requests res = requests.get('http://myip.ipip.net', timeout=5).text print(res) 比较喜欢用这个,在命令窗口也能使用: curl http://myip.ipip.net 2.使用自带socket库 获取的是局域网IP. impo

  • JS获取本机IP地址的2种方法

    目录 1.获取本机IP地址方法1: 2.获取本机IP地址方法2 解决方案: 总结 1.获取本机IP地址方法1: if(typeof window != 'undefined'){     var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;     if (RTCPeerConnection) (()=>{        

随机推荐