获取本机IP(考虑多块网卡、虚拟机等复杂情况)
2012-09-17 15:39
218 查看
方法1:
基本思路:
通过查询本机路由表,获取访问默认网关时使用的网卡IP地址。该方法在有网络的情况下适应性较好,如果本身不连接到互联网,则无法获取。代码如下:
///<summary>
[code]///获取当前使用的IP
///</summary>
///<returns></returns>
publicstaticstringGetLocalIP()
{
stringresult=RunApp("route","print",true);
Matchm=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)
{
returnm.Groups[2].Value;
}
else
{
try
{
System.Net.Sockets.TcpClientc=newSystem.Net.Sockets.TcpClient();
c.Connect("www.baidu.com",80);
stringip=((System.Net.IPEndPoint)c.Client.LocalEndPoint).Address.ToString();
c.Close();
returnip;
}
catch(Exception)
{
returnnull;
}
}
}
///<summary>
///获取本机主DNS
///</summary>
///<returns></returns>
publicstaticstringGetPrimaryDNS()
{
stringresult=RunApp("nslookup","",true);
Matchm=Regex.Match(result,@"\d+\.\d+\.\d+\.\d+");
if(m.Success)
{
returnm.Value;
}
else
{
returnnull;
}
}
///<summary>
///运行一个控制台程序并返回其输出参数。
///</summary>
///<paramname="filename">程序名</param>
///<paramname="arguments">输入参数</param>
///<returns></returns>
publicstaticstringRunApp(stringfilename,stringarguments,boolrecordLog)
{
try
{
if(recordLog)
{
Trace.WriteLine(filename+""+arguments);
}
Processproc=newProcess();
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.StreamReadersr=newSystem.IO.StreamReader(proc.StandardOutput.BaseStream,Encoding.Default))
{
stringtxt=sr.ReadToEnd();
sr.Close();
if(recordLog)
{
Trace.WriteLine(txt);
}
if(!proc.HasExited)
{
proc.Kill();
}
returntxt;
}
}
catch(Exceptionex)
{
Trace.WriteLine(ex);
returnex.Message;
}
}
[/code]
相关文章推荐
- 获取本机IP(考虑多块网卡、虚拟机等复杂情况)
- 获取本机IP_考虑多网卡的情况
- 获取本机IP_考虑多网卡的情况
- C# 获取本机IP_考虑多网卡的情况
- 虚拟机网卡桥接centos系统获取不到IP
- 获取本地 ip (多网卡的情况下)
- VS2012 C++ 中通过GetAdaptersInfo获取多网卡,多IP地址信息
- java 如何获取多网卡时的本机IP
- 从绑定网卡获取ip
- android 根据IP获取天气情况 详细讲解
- 怎样用JSP获取当前用户的网卡IP和MAC地址?
- linux下获取网卡IP的C/C++代码
- Java怎么获取多网卡本地ip
- 深入分析几种PHP获取客户端IP的情况
- linux下C编程_获取指定网卡IP信息
- 虚拟机自动获取不到ip问题