如何确定一个字符串是在C#中有效的IPv4或IPv6地址? [英] How to determine if a string is a valid IPv4 or IPv6 address in C#?
问题描述
我知道正则表达式是危险验证,因为不同形式的IP地址,IP地址可以服用。
I know regex is dangerous for validating IP addresses because of the different forms an IP address can take.
我已经看到了类似的问题的C和C ++,和那些已经解决与不使用C#的 inet_ntop()
I've seen similar questions for C and C++, and those were resolved with a function that doesn't exist in C# inet_ntop()
在.NET解决方案,我发现只能处理标准的ddd.ddd.ddd.ddd的形式。有什么建议?
The .NET solutions I've found only handle the standard "ddd.ddd.ddd.ddd" form. Any suggestions?
推荐答案
您可以用它来尝试分析它:
You can use this to try and parse it:
IPAddress.TryParse
然后检查 AddressFamily
这
返回System.Net.Sockets.AddressFamily.InterNetwork为IPv4或System.Net.Sockets.AddressFamily.InterNetworkV6对于IPv6。
Returns System.Net.Sockets.AddressFamily.InterNetwork for IPv4 or System.Net.Sockets.AddressFamily.InterNetworkV6 for IPv6.
编辑:一些样本code。变化之处:
some sample code. change as desired:
string input = "your IP address goes here";
IPAddress address;
if (IPAddress.TryParse(input, out address))
{
switch (address.AddressFamily)
{
case System.Net.Sockets.AddressFamily.InterNetwork:
// we have IPv4
break;
case System.Net.Sockets.AddressFamily.InterNetworkV6:
// we have IPv6
break;
default:
// umm... yeah... I'm going to need to take your red packet and...
break;
}
}
这篇关于如何确定一个字符串是在C#中有效的IPv4或IPv6地址?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!