本文介绍了IPAddress.TryParse返回令人失望的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个函数,返回如果给定的IP地址是否有效或不使用IPAddress类。我在测试它,它返回有效的(真),甚至当我通过0123456或11111或99999没有点作为参数。我在VB.net和C#写具有相同的结果。

I have a function that returns if a given ip address is valid or not using the IPAddress class. I was testing it and it returns valid(true) even when I pass "0123456" or "11111" or "99999" without a dot as argument. I wrote it in VB.net and C# with the same result.

// 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

有人能解释我为什么会这样。我也符合我的code通过互联网的一些来源和罚款。

Could somebody explain me why is this happening. I have matched my code with some sources through the internet and is fine.

推荐答案

IP地址只是32位的数字,所以 11111 绝对是一个正确的IP地址。在IP地址点在那里只是为了阅读它们更容易为人类。它们不是必需的。

IP Address is just 32 bit number, so 11111 is definitely a correct IP Address. Dots in IP Address are there just to make reading them easier for humans. They are not required.

IP地址是二进制数,但他们的一般存储在文本文件,并在人类可读的符号显示,如172.16.254.1(对于IPv4)和2001:DB8:0:1234:0:567:8:1(对于IPv6)

IP地址 - 维基百科

这就是为什么 IPAddress.TryParse 返回

它甚至在MSDN上描述:的

It's even described on MSDN: IPAddress.Parse Method

份的数量(每一个部分是由一个周期分隔)在ipString确定如何的IP地址构造。 一个部件地址直接存储在网络地址。甲两部分地址,便于指定类A地址,放入第一个字节的前沿部分和后沿部分中的最右侧的三个字节的网络地址的。甲三部分地址,便于指定一个类B地址,放入第一字节的第一部分,在第二个字节的第二部分,并且在最右边的两个字节的网络地址的最后部分。

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

There is also an example (see the first one):

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

这篇关于IPAddress.TryParse返回令人失望的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-13 01:09