获取本机正在使用的ipv4地址(访问互联网的IP)
【转】原文地址:http://www.cnblogs.com/lijianda/p/6604651.html
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[].Value;
- }
- else
- {
- try
- {
- System.Net.Sockets.TcpClient c = new System.Net.Sockets.TcpClient();
- c.Connect("www.baidu.com", );
- 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(); //貌似调用系统的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;
- }
- }
获取本机正在使用的ipv4地址(访问互联网的IP)的更多相关文章
- Windows8下通过IPv4地址访问Tomcat
最近在做Android开发,手机客户端需要通过IPv4地址访问电脑启动的Web应用服务. 在Windows 7不需要做什么设置,localhost,127.0.0.1或者192.168.0.100都可 ...
- 命题作文:在一棵IPv4地址树中彻底理解IP路由表的各种查找过程
这是一篇命题作文.近期一直想写点东西,但一直找不到题目.正好收到一封邮件,有人问我Linux路由表的布局问题以及路由缓存的问题,加之前些日子又帮人做了一个片上路由表,所以认为这是个好题目,索性花了多半 ...
- C# 获取本机CPU序列号,MAC地址,硬盘ID,本机IP地址,计算机名,物理内存,PC类型
首先引入服务 然后 调用 本文转载自http://blog.sina.com.cn/s/blog_7eeb43210101hf7f.html public class Computer { publi ...
- C#获取本机IP地址(ipv4)
获取本机所有IP地址: 这些地址是包含所有网卡(虚拟网卡)的ipv4和ipv6地址. string name = Dns.GetHostName(); IPAddress[] ipadrlist = ...
- QT获取本机IP和Mac地址
#include <QNetworkInterface> #include <QList> void MainWindow::getIPPath() { QString str ...
- IPv4地址分类及特征
IPv4地址分类及特征 IP地址后斜杠和数字代表的意思 其中有这样一个IP地址的格式:IP/数字,例如:111.222.111.222/24 这种格式平时在内网中用的不多,所以一下子看不懂,最后查了资 ...
- Nginx禁止直接通过IP地址访问网站以及限制IP登陆某目录(关闭默认站点或空主机头)
这篇文章主要介绍了Nginx中禁止使用IP访问网站的配置实例,一般在备案时可能需要这种设置,需要的朋友可以参考下 国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问 ...
- #获取本机IP地址时排除IPv6类型,只返回IPv4地址的方法
public static string GetLocalIP(){try{string HostName = Dns.GetHostName(); //得到主机名IPHostEntry IpEntr ...
- [转载]C#获取本机IPv4地址
C#获取本机IP地址在C#1.0之后都使用下面的这种形式: IPHostEntry ipe = Dns.GetHostEntry(Dns.GetHostName()); IPAddress ipa=i ...
随机推荐
- apache 服务器概述--安装(一)
一.安装httpd,elinks浏览器 [root@ ~]# yum install elinks httpd -y [root@ ~]# elinks www.baidu.com 二.配置文件 # ...
- k8s集群添加node节点(使用kubeadm搭建的集群)
1.安装docker.kubelet.kubectl.kubeadm.socat # cat kubernets.repo[kubernetes]name=Kubernetesbaseurl=http ...
- asp.net mvc 学习笔记 - 单一实例设计模式
学习之前,先喊一下口号:每天进步一点,生活更好一点 首先声明一点,我也是新新新手一枚,崭新的新哦.如果文章有不合理的地方,也请各位博友多多指点,不要乱喷哦 我的文采很低调,低调到语文老师对我的期望是你 ...
- MySQL 学习笔记 二
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
- VS2012 编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?
今天编译公司项目,原本项目是3.5,由于现在要用到dynamic ,把target 改为4.0 ,编译时 报错误 “找不到编译动态表达式所需的一个或多个类型.是否缺少引用?”,然后根据另一个提示排错 ...
- [转]centos7 移动mysql5.7.19 数据存储位置
本文转自:https://blog.csdn.net/chpllp/article/details/78211351 场景:随着数据量的增加,mysql所在的磁盘已占满,需要将data移动到空间较大的 ...
- JavaScript学习总结(五)——jQuery插件开发与发布
jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...
- [日常] Go语言圣经--包和文件-包初始化习题
1.解决包级变量的依赖顺序,然后按照包级变量声明出现的顺序依次初始化 2.包中含有多个.go源文件,它们将按照发给编译器的顺序进行初始化 3.init初始化函数,在每个文件中的init初始化函数,在程 ...
- java设计模式-----22、状态模式
概念: State模式也叫状态模式,是行为设计模式的一种.State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样. 根据这个概念,我们举个例子 public c ...
- hadoop的namenode启动失败
1.jps发现namenode启动失败 每次开机都要重新格式化一下namenode才可以 其实问题出现自tmp文件上,因为每次开机就会被清空,所以现在我们配置一个tmp文件目录. 如果之前没有配置过, ...