Csharp/C#教程:C#获取本机IP地址(ipv4)分享

获取本机所有IP地址:

这些地址是包含所有网卡(虚拟网卡)的ipv4和ipv6地址。

stringname=Dns.GetHostName(); IPAddress[]ipadrlist=Dns.GetHostAddresses(name);

获取本机所有IPV4地址:

stringname=Dns.GetHostName(); IPAddress[]ipadrlist=Dns.GetHostAddresses(name); foreach(IPAddressipainipadrlist) { 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> publicstaticstringGetLocalIP() { stringresult=RunApp("route","print",true); Matchm=Regex.Match(result,@"0.0.0.0s+0.0.0.0s+(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(); //} //上面标记的是原文,下面是我自己调试错误后自行修改的 Thread.Sleep(100);//貌似调用系统的nslookup还未返回数据或者数据未编码完成,程序就已经跳过直接执行 //txt=sr.ReadToEnd()了,导致返回的数据为空,故睡眠令硬件反应 if(!proc.HasExited)//在无参数调用nslookup后,可以继续输入命令继续操作,如果进程未停止就直接执行 {//txt=sr.ReadToEnd()程序就在等待输入,而且又无法输入,直接掐住无法继续运行 proc.Kill(); } stringtxt=sr.ReadToEnd(); sr.Close(); if(recordLog) Trace.WriteLine(txt); returntxt; } } catch(Exceptionex) { Trace.WriteLine(ex); returnex.Message; } }

另有一种方法通过用ipconfig来获取:

privatevoidGetIP() { Processcmd=newProcess(); 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(); stringinfo=cmd.StandardOutput.ReadToEnd(); cmd.WaitForExit(); cmd.Close(); textBox1.AppendText(info); } 您可能感兴趣的文章:C#获取本机IP地址和Mac地址的方法c#获取本机在局域网ip地址的二种方法c#获取本机的IP地址的代码C#获取真实IP地址实现方法C#根据ip获取城市等相关信息C#获取计算机名,IP,MAC信息实现代码用C#编写获取远程IP,MAC的方法

标签: 地址 ipv4 ip pv

C# 中如何取绝对值函数

C#中抽象类与接口的区别详解

上述就是C#学习教程:C#获取本机IP地址(ipv4)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/907769.html

(0)
上一篇 2021年10月25日
下一篇 2021年10月25日

精彩推荐