詳解C#擷取本機IP地址(ipv4)的代碼案例

來源:互聯網
上載者:User
本文主要介紹了C#擷取本機所有IP地址的方法、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);  }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.