【转】原文地址:http://www.cnblogs.com/lijianda/p/6604651.html

1.一个电脑有多个网卡,有线的、无线的、还有vmare虚拟的两个网卡。
2.就算只有一个网卡,但是该网卡配置了N个IP地址.其中还包括ipv6地址。

  1. /// <summary>
  2. /// 获取当前使用的IP
  3. /// </summary>
  4. /// <returns></returns>
  5. public static string GetLocalIP()
  6. {
  7. string result = RunApp("route", "print",true);
  8. Match m = Regex.Match(result, @"0.0.0.0\s+0.0.0.0\s+(\d+.\d+.\d+.\d+)\s+(\d+.\d+.\d+.\d+)");
  9. if (m.Success)
  10. {
  11. return m.Groups[].Value;
  12. }
  13. else
  14. {
  15. try
  16. {
  17. System.Net.Sockets.TcpClient c = new System.Net.Sockets.TcpClient();
  18. c.Connect("www.baidu.com", );
  19. string ip = ((System.Net.IPEndPoint)c.Client.LocalEndPoint).Address.ToString();
  20. c.Close();
  21. return ip;
  22. }
  23. catch (Exception)
  24. {
  25. return null;
  26. }
  27. }
  28. }
  29.  
  30. /// <summary>
  31. /// 获取本机主DNS
  32. /// </summary>
  33. /// <returns></returns>
  34. public static string GetPrimaryDNS()
  35. {
  36. string result = RunApp("nslookup", "",true);
  37. Match m = Regex.Match(result, @"\d+\.\d+\.\d+\.\d+");
  38. if (m.Success)
  39. {
  40. return m.Value;
  41. }
  42. else
  43. {
  44. return null;
  45. }
  46. }
  47.  
  48. /// <summary>
  49. /// 运行一个控制台程序并返回其输出参数。
  50. /// </summary>
  51. /// <param name="filename">程序名</param>
  52. /// <param name="arguments">输入参数</param>
  53. /// <returns></returns>
  54. public static string RunApp(string filename, string arguments,bool recordLog)
  55. {
  56. try
  57. {
  58. if (recordLog)
  59. {
  60. Trace.WriteLine(filename + " " + arguments);
  61. }
  62. Process proc = new Process();
  63. proc.StartInfo.FileName = filename;
  64. proc.StartInfo.CreateNoWindow = true;
  65. proc.StartInfo.Arguments = arguments;
  66. proc.StartInfo.RedirectStandardOutput = true;
  67. proc.StartInfo.UseShellExecute = false;
  68. proc.Start();
  69.  
  70. using (System.IO.StreamReader sr = new System.IO.StreamReader(proc.StandardOutput.BaseStream, Encoding.Default))
  71. {
  72. //string txt = sr.ReadToEnd();
  73. //sr.Close();
  74. //if (recordLog)
  75. //{
  76. // Trace.WriteLine(txt);
  77. //}
  78. //if (!proc.HasExited)
  79. //{
  80. // proc.Kill();
  81. //}
  82. //上面标记的是原文,下面是我自己调试错误后自行修改的
  83. Thread.Sleep(); //貌似调用系统的nslookup还未返回数据或者数据未编码完成,程序就已经跳过直接执行
  84. //txt = sr.ReadToEnd()了,导致返回的数据为空,故睡眠令硬件反应
  85. if (!proc.HasExited) //在无参数调用nslookup后,可以继续输入命令继续操作,如果进程未停止就直接执行
  86. { //txt = sr.ReadToEnd()程序就在等待输入,而且又无法输入,直接掐住无法继续运行
  87. proc.Kill();
  88. }
  89. string txt = sr.ReadToEnd();
  90. sr.Close();
  91. if (recordLog)
  92. Trace.WriteLine(txt);
  93. return txt;
  94. }
  95. }
  96. catch (Exception ex)
  97. {
  98. Trace.WriteLine(ex);
  99. return ex.Message;
  100. }
  101. }

获取本机正在使用的ipv4地址(访问互联网的IP)的更多相关文章

  1. Windows8下通过IPv4地址访问Tomcat

    最近在做Android开发,手机客户端需要通过IPv4地址访问电脑启动的Web应用服务. 在Windows 7不需要做什么设置,localhost,127.0.0.1或者192.168.0.100都可 ...

  2. 命题作文:在一棵IPv4地址树中彻底理解IP路由表的各种查找过程

    这是一篇命题作文.近期一直想写点东西,但一直找不到题目.正好收到一封邮件,有人问我Linux路由表的布局问题以及路由缓存的问题,加之前些日子又帮人做了一个片上路由表,所以认为这是个好题目,索性花了多半 ...

  3. C# 获取本机CPU序列号,MAC地址,硬盘ID,本机IP地址,计算机名,物理内存,PC类型

    首先引入服务 然后 调用 本文转载自http://blog.sina.com.cn/s/blog_7eeb43210101hf7f.html public class Computer { publi ...

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

    获取本机所有IP地址: 这些地址是包含所有网卡(虚拟网卡)的ipv4和ipv6地址. string name = Dns.GetHostName(); IPAddress[] ipadrlist = ...

  5. QT获取本机IP和Mac地址

    #include <QNetworkInterface> #include <QList> void MainWindow::getIPPath() { QString str ...

  6. IPv4地址分类及特征

    IPv4地址分类及特征 IP地址后斜杠和数字代表的意思 其中有这样一个IP地址的格式:IP/数字,例如:111.222.111.222/24 这种格式平时在内网中用的不多,所以一下子看不懂,最后查了资 ...

  7. Nginx禁止直接通过IP地址访问网站以及限制IP登陆某目录(关闭默认站点或空主机头)

    这篇文章主要介绍了Nginx中禁止使用IP访问网站的配置实例,一般在备案时可能需要这种设置,需要的朋友可以参考下   国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问 ...

  8. #获取本机IP地址时排除IPv6类型,只返回IPv4地址的方法

    public static string GetLocalIP(){try{string HostName = Dns.GetHostName(); //得到主机名IPHostEntry IpEntr ...

  9. [转载]C#获取本机IPv4地址

    C#获取本机IP地址在C#1.0之后都使用下面的这种形式: IPHostEntry ipe = Dns.GetHostEntry(Dns.GetHostName()); IPAddress ipa=i ...

随机推荐

  1. apache 服务器概述--安装(一)

    一.安装httpd,elinks浏览器 [root@ ~]# yum install elinks httpd -y [root@ ~]# elinks www.baidu.com 二.配置文件 # ...

  2. k8s集群添加node节点(使用kubeadm搭建的集群)

    1.安装docker.kubelet.kubectl.kubeadm.socat # cat kubernets.repo[kubernetes]name=Kubernetesbaseurl=http ...

  3. asp.net mvc 学习笔记 - 单一实例设计模式

    学习之前,先喊一下口号:每天进步一点,生活更好一点 首先声明一点,我也是新新新手一枚,崭新的新哦.如果文章有不合理的地方,也请各位博友多多指点,不要乱喷哦 我的文采很低调,低调到语文老师对我的期望是你 ...

  4. MySQL 学习笔记 二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...

  5. VS2012 编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?

    今天编译公司项目,原本项目是3.5,由于现在要用到dynamic ,把target 改为4.0 ,编译时 报错误  “找不到编译动态表达式所需的一个或多个类型.是否缺少引用?”,然后根据另一个提示排错 ...

  6. [转]centos7 移动mysql5.7.19 数据存储位置

    本文转自:https://blog.csdn.net/chpllp/article/details/78211351 场景:随着数据量的增加,mysql所在的磁盘已占满,需要将data移动到空间较大的 ...

  7. JavaScript学习总结(五)——jQuery插件开发与发布

    jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...

  8. [日常] Go语言圣经--包和文件-包初始化习题

    1.解决包级变量的依赖顺序,然后按照包级变量声明出现的顺序依次初始化 2.包中含有多个.go源文件,它们将按照发给编译器的顺序进行初始化 3.init初始化函数,在每个文件中的init初始化函数,在程 ...

  9. java设计模式-----22、状态模式

    概念: State模式也叫状态模式,是行为设计模式的一种.State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样. 根据这个概念,我们举个例子 public c ...

  10. hadoop的namenode启动失败

    1.jps发现namenode启动失败 每次开机都要重新格式化一下namenode才可以 其实问题出现自tmp文件上,因为每次开机就会被清空,所以现在我们配置一个tmp文件目录. 如果之前没有配置过, ...