代码之家  ›  专栏  ›  技术社区  ›  Jon B

NET中的IP地址解析

  •  2
  • Jon B  · 技术社区  · 17 年前

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

    (注意:我使用的是.NET2.0)


    让我澄清一下:

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

    2 回复  |  直到 17 年前
        1
  •  8
  •   Jon B    17 年前

    如果您对解析格式感兴趣,那么我将使用正则表达式。这是一个好的( 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检查它们的有效性。

        2
  •  0
  •   Brian Rasmussen    17 年前

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

    编辑:根据说明,您可以按照建议使用正则表达式,也可以根据自己的喜好设置快捷方式的格式,因此如果您希望“1”显示为“1.0.0.0”。您可以附加它并仍然使用parse方法。