在.NET中解析IP地址

时间:2008-12-18 19:45:14

标签: c# .net parsing ip-address

我正在使用IPAddress.TryParse()来解析IP地址。但是,它有点过于宽松(解析“1”返回0.0.0.1)。我想将输入限制为虚线八位字符表示法。最好的方法是什么?

(注意:我使用的是.NET 2.0)


修改

让我澄清一下:

我正在编写一个应用程序,它将扫描一系列寻找特定设备(基本上是端口扫描程序)的IP。当用户输入“192.168.0.1”作为起始地址时,我想自动填写“192.168.0.255”作为结束地址。问题是,当他们输入“1”时,它解析为“0.0.0.1”,结束地址填写为“0.0.0.255” - 这看起来很傻。

2 个答案:

答案 0 :(得分:7)

如果您对解析格式感兴趣,那么我会使用正则表达式。这是一个很好的(source):

bool IsDottedDecimalIP(string possibleIP)
{
    Regex R = New Regex(@"\b(?:\d{1,3}\.){3}\d{1,3}\b");
    return R.IsMatch(possibleIP) && Net.IPAddress.TryParse(possibleIP, null);
}

该正则表达式不会捕获无效的IP,但会强制执行您的模式。 TryParse会检查它们的有效性。

答案 1 :(得分:0)

IP地址实际上是32位数字 - 它不是xxx.xxx.xxx.xxx - 这只是一个人类可读的格式。所以IP地址1实际上是0.0.0.1。

编辑:鉴于澄清,您可以按照建议使用正则表达式,也可以根据自己的喜好设置快捷方式,因此如果您希望“1”显示为“1.0.0.0”。你可以追加它并仍然使用解析方法。

相关问题