Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Codefalls zum Erhalten der lokalen IP-Adresse (ipv4) in C#

Detaillierte Erläuterung des Codefalls zum Erhalten der lokalen IP-Adresse (ipv4) in C#

黄舟
黄舟Original
2017-03-24 11:37:533629Durchsuche

In diesem Artikel wird hauptsächlich die Methode von C# zum Abrufen aller IP-Adressen dieser Maschine, die Methode von C# zum Abrufen der IP-Adresse dieser Maschine (ipv4) usw. vorgestellt. Hat einen sehr guten Referenzwert. Werfen wir einen Blick mit dem Editor unten.

Rufen Sie alle IP-Adressen dieser Maschine ab:

Diese Adressen umfassen die IPv4- und IPv6-Adressen aller Netzwerkkarten (virtuell). Netzwerkkarten).

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

Alle IPV4-Adressen dieser Maschine abrufen:

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

Um nur die IPv4-Adresse zu erhalten, können Sie das Attribut IPAdress.AddressFamily Beurteilung: Für IPv4 geben Sie InterNetwork zurück; für IPv6 geben Sie InterNetworkV6 zurück.

Wenn dieser Computer jedoch möglicherweise mehrere IPv4-Adressen hat, erfahren Sie, wie Sie die IP der Netzwerkkarte erhalten, die für den Zugriff auf das Standard-Gateway verwendet wird. Ich habe die Master-Methode im CSDN-Forum gefunden und verwende die Tabelle

querylocalrouting.

Ermitteln Sie die IPv4-Adresse, die von diesem Gerät verwendet wird (die IP, die für den Zugriff auf das Internet verwendet wird)

Unterschätzen Sie es nicht, es gibt noch viele Dinge zu beachten:

1. Ein Computer verfügt über mehrere Netzwerkkarten, kabelgebundene, kabellose und virtuelle Vmare-Netzwerkkarten.

2. Auch wenn nur eine Netzwerkkarte vorhanden ist, ist die Netzwerkkarte mit N IP-Adressen, einschließlich IPv6-Adressen, konfiguriert.

/// <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; 
 } 
 }
Es gibt eine andere Möglichkeit, es mithilfe von ipconfig abzurufen:

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Codefalls zum Erhalten der lokalen IP-Adresse (ipv4) in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn