欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#獲取本機IP地址(ipv4)

 更新時間:2017年03月23日 17:06:25   作者:LJD泊水  
本文主要介紹了C#獲取本機所有IP地址的方法、C#獲取本機IP地址(ipv4)的方法等。具有很好的參考價值。下面跟著小編一起來看下吧

獲取本機所有IP地址:

這些地址是包含所有網(wǎng)卡(虛擬網(wǎng)卡)的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的地址,那如何獲取訪問默認網(wǎng)關(guān)時使用的網(wǎng)卡IP呢。在CSDN論壇找到了大神的方法,用的是查詢本機路由表。

獲取本機正在使用的ipv4地址(訪問互聯(lián)網(wǎng)的IP)

可別小看,還是有很多需要考慮的:

1.一個電腦有多個網(wǎng)卡,有線的、無線的、還有vmare虛擬的兩個網(wǎng)卡。

2.就算只有一個網(wǎng)卡,但是該網(wǎng)卡配置了N個IP地址.其中還包括ipv6地址。

/// <summary> 
 /// 獲取當(dāng)前使用的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> 
 /// 運行一個控制臺程序并返回其輸出參數(shù)。 
 /// </summary> 
 /// <param name="filename">程序名</param> 
 /// <param name="arguments">輸入?yún)?shù)</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(); 
  //} 
  //上面標(biāo)記的是原文,下面是我自己調(diào)試錯誤后自行修改的 
  Thread.Sleep(100);  //貌似調(diào)用系統(tǒng)的nslookup還未返回數(shù)據(jù)或者數(shù)據(jù)未編碼完成,程序就已經(jīng)跳過直接執(zhí)行 
      //txt = sr.ReadToEnd()了,導(dǎo)致返回的數(shù)據(jù)為空,故睡眠令硬件反應(yīng) 
  if (!proc.HasExited)  //在無參數(shù)調(diào)用nslookup后,可以繼續(xù)輸入命令繼續(xù)操作,如果進程未停止就直接執(zhí)行 
  {    //txt = sr.ReadToEnd()程序就在等待輸入,而且又無法輸入,直接掐住無法繼續(xù)運行 
   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";//設(shè)置程序名 
 cmd.StartInfo.Arguments = "/all"; //參數(shù) 
 //重定向標(biāo)準(zhǔn)輸出 
 cmd.StartInfo.RedirectStandardOutput = true; 
 cmd.StartInfo.RedirectStandardInput = true; 
 cmd.StartInfo.UseShellExecute = false; 
 cmd.StartInfo.CreateNoWindow = true;//不顯示窗口(控制臺程序是黑屏) 
 //cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//暫時不明白什么意思 
 /* 
 收集一下 有備無患 
 關(guān)于: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); 
 } 

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • c#反射機制學(xué)習(xí)和利用反射獲取類型信息

    c#反射機制學(xué)習(xí)和利用反射獲取類型信息

    反射(Reflection)是.NET中的重要機制,通過放射,可以在運行時獲得.NET中每一個類型(包括類、結(jié)構(gòu)、接口和枚舉等)的成員,包括方法、屬性、事件,以及構(gòu)造函數(shù)等,還可以獲得每個成員的名稱、限定符和參數(shù)等,有了反射,即可對每一個類型了如指掌
    2014-01-01
  • Unity實現(xiàn)卡拉OK歌詞過渡效果

    Unity實現(xiàn)卡拉OK歌詞過渡效果

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)卡拉OK歌詞過渡效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • WindowsForm移動一個沒有標(biāo)題欄的窗口的方法

    WindowsForm移動一個沒有標(biāo)題欄的窗口的方法

    這篇文章主要介紹了WindowsForm移動一個沒有標(biāo)題欄的窗口的方法,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#正則表達式Regex用法詳解

    C#正則表達式Regex用法詳解

    本文詳細講解了C#正則表達式Regex的用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Unity的AssetPostprocessor之Model函數(shù)使用實戰(zhàn)

    Unity的AssetPostprocessor之Model函數(shù)使用實戰(zhàn)

    這篇文章主要為大家介紹了Unity的AssetPostprocessor之Model函數(shù)使用實戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • C#創(chuàng)建不規(guī)則窗體的4種方式詳解

    C#創(chuàng)建不規(guī)則窗體的4種方式詳解

    在這里我們將實現(xiàn)的是C#創(chuàng)建不規(guī)則窗體的幾種方式,包括自定義窗體,不規(guī)則圖形等等。希望對大家有所幫助。
    2015-10-10
  • c#如何實現(xiàn)程序加密隱藏

    c#如何實現(xiàn)程序加密隱藏

    LiteDB是一個輕量級的嵌入式數(shù)據(jù)庫,它是用C#編寫的,適用于.NET平臺,這篇文章主要介紹了如何通過LiteDB將自己的程序進行加密,感興趣的可以了解下
    2023-08-08
  • C#調(diào)用exe文件的方法詳解

    C#調(diào)用exe文件的方法詳解

    這篇文章主要為大家詳細介紹了C#調(diào)用exe文件的相關(guān)方法,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-04-04
  • C# DES加密算法中向量的作用詳細解析

    C# DES加密算法中向量的作用詳細解析

    以下是對C#中DES加密算法中向量的作用進行了詳細的介紹,需要的朋友可以過來參考下
    2013-09-09
  • c# 實現(xiàn)輪詢算法實例代碼

    c# 實現(xiàn)輪詢算法實例代碼

    這篇文章主要介紹了c# 實現(xiàn)輪詢算法實例代碼的相關(guān)資料,這里附有實例代碼,具有一定的參考價值,需要的朋友可以參考下
    2016-12-12

最新評論