IPAddress.TryParse返回不需要的结果

1 .net c# vb.net

我有一个函数,如果给定的IP地址有效或不使用IPAddress类返回.我正在测试它并返回有效(true),即使我传递"0123456"或"11111"或"99999"而没有点作为参数.我在VB.net和C#中写了相同的结果.

// C#
public bool CheckIpAddress(string ipAddr)
{
    IPAddress ip = null;
    return IPAddress.TryParse(ipAddr,out ip);
}

  // VB.net
  Public Function CheckIpAddress(ipAddr As String) As Boolean
        Dim ip As IPAddress = Nothing

        Return Net.IPAddress.TryParse(ipAddr, ip)
    End Function
Run Code Online (Sandbox Code Playgroud)

有人可以解释我为什么会这样.我通过互联网将我的代码与一些来源相匹配,并且很好.

Mar*_*zek 8

IP地址只是32位数,因此11111绝对是正确的IP地址.IP地址中的点只是为了让人们更容易阅读它们.它们不是必需的.

IP地址是二进制数,但它们通常存储在文本文件中并以人类可读的符号显示,例如172.16.254.1(对于IPv4)和2001:db8:0:1234:0:567:8:1(对于IPv6的).

来自IP地址 - 维基百科

这就是IPAddress.TryParse回归的原因true.

它甚至在MSDN上描述:IPAddress.Parse方法

ipString中的部分数量(每个部分用句点分隔)决定了IP地址的构造方式.单部分地址直接存储在网络地址中.两部分地址,便于指定A类地址,将前导部分放在网络地址的最右边三个字节的第一个字节和尾部.三部分地址,便于指定B类地址,将第一部分放在第一个字节中,第二部分放在第二个字节中,最后部分放在网络地址的最右边两个字节中.

还有一个例子(见第一个):

1 -- "65536"       0.0.255.255
2 -- "20.2"        20.0.0.2
2 -- "20.65535"    20.0.255.255
3 -- "128.1.2"     128.1.0.2
Run Code Online (Sandbox Code Playgroud)