全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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); 
 } 

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


# C#  # 获取  # IP  # C#获取本机IP地址和Mac地址的方法  # C# 获取本机IP地址(IPv4和IPv6)  # 本机  # 的是  # 多个  # 互联网  # 就在  # 有备无患  # 有很多  # 可以用  # 不明白  # 大神  # 能有  # 另有  # 还未  # 只有一个  # 什么意思  # 可别  # 若要  # 跳过  # 为空  # 黑屏 


相关文章: 商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  开封网站制作公司,网络用语开封是什么意思?  如何实现建站之星域名转发设置?  如何用PHP快速搭建高效网站?分步指南  教学论文网站制作软件有哪些,写论文用什么软件 ?  建站之星后台密码遗忘?如何快速找回?  宝塔建站助手安装配置与建站模板使用全流程解析  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  建站之星免费版是否永久可用?  如何确保FTP站点访问权限与数据传输安全?  建站之星图片链接生成指南:自助建站与智能设计教程  定制建站模板如何实现SEO优化与智能系统配置?18字教程  建站10G流量真的够用吗?如何应对访问高峰?  已有域名和空间如何快速搭建网站?  定制建站流程解析:需求评估与SEO优化功能开发指南  香港网站服务器数量如何影响SEO优化效果?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  c++ stringstream用法详解_c++字符串与数字转换利器  导航网站建站方案与优化指南:一站式高效搭建技巧解析  建站主机空间推荐 高性价比配置与快速部署方案解析  如何打造高效商业网站?建站目的决定转化率  网站制作知乎推荐,想做自己的网站用什么工具比较好?  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何选择服务器才能高效搭建专属网站?  如何在橙子建站上传落地页?操作指南详解  高防服务器租用指南:配置选择与快速部署攻略  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  设计网站制作公司有哪些,制作网页教程?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何快速生成专业多端适配建站电话?  海南网站制作公司有哪些,海口网是哪家的?  如何选择靠谱的建站公司加盟品牌?  微信推文制作网站有哪些,怎么做微信推文,急?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  太平洋网站制作公司,网络用语太平洋是什么意思?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  如何选购建站域名与空间?自助平台全解析  实例解析angularjs的filter过滤器  广州商城建站系统开发成本与周期如何控制?  七夕网站制作视频,七夕大促活动怎么报名?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  Android滚轮选择时间控件使用详解  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  建站为何优先选择香港服务器?  招商网站制作流程,网站招商广告语?  制作网站公司那家好,网络公司是做什么的?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。