我这里有一些代码在IPv4机器上很好用,但是在我们的构建服务器(IPv6)上却失败了.简而言之:
IPHostEntry ipHostEntry = Dns.GetHostEntry(string.Empty);
GetHostEntry的文档说,传入string.Empty将获得本地主机的IPv4地址.这就是我要的.问题是它在我们的IPv6机器上返回字符串" :: 1:",我相信这是IPv6地址。
从其他任何IPv4机器上对机器进行ping操作会提供一个良好的IPv4地址...并执行 "ping -4 machinename" 本身会给出正确的IPv4地址...。但是定期从自身ping会得到" :: 1:"。
如何从本机获取此机器的IPv4?
最新回答
- 2021-1-121 #
- 2021-1-122 #
要查找所有本地IPv4地址:
IPAddress[] ipv4Addresses = Array.FindAll( Dns.GetHostEntry(string.Empty).AddressList, a => a.AddressFamily == AddressFamily.InterNetwork);
或使用
Array.Find
或Array.FindLast
如果您只想要一个。 - 2021-1-123 #
IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName); IPAddress ipAddress = ipHostInfo.AddressList .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
- 2021-1-124 #
public Form1() { InitializeComponent(); string myHost = System.Net.Dns.GetHostName(); string myIP = null; for (int i = 0; i <= System.Net.Dns.GetHostEntry(myHost).AddressList.Length - 1; i++) { if (System.Net.Dns.GetHostEntry(myHost).AddressList[i].IsIPv6LinkLocal == false) { myIP = System.Net.Dns.GetHostEntry(myHost).AddressList[i].ToString(); } } }
在公共变量中声明myIP和myHost 并以任何形式使用该函数。
- 2021-1-125 #
public static string GetIPAddress(string hostname) { IPHostEntry host; host = Dns.GetHostEntry(hostname); foreach (IPAddress ip in host.AddressList) { if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { //System.Diagnostics.Debug.WriteLine("LocalIPadress: " + ip); return ip.ToString(); } } return string.Empty; }
相关问题
- c#:获取windows 8自动颜色主题的活动颜色c#netwpfwinapiwindows82021-01-12 01:28
- c#:PictureBox问题c#netwinformspicturebox2021-01-11 04:56
- c#:并行执行任务c#netasynchronousasyncawaittaskparallellibrary2021-01-11 04:56
- c#:静态和实例方法同名?c#netoop2021-01-11 05:55
- c#:RequestUrlReferrer为空?c#netvisualstudiovisualstudio20082021-01-11 07:24
您是否查看了退货中的所有地址,丢弃了InterNetworkV6系列的地址,仅保留了IPv4地址?