您的位置:首页 > 其它

获取本机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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: