【问题标题】:Why does IPAddress.TryParse allow anything after a ']'为什么 IPAddress.TryParse 允许“]”之后的任何内容
【发布时间】:2010-05-14 16:11:05
【问题描述】:

我想使用 System.Net.IPAddress.TryParse 来验证 IPv6 地址,因为我不想编写自己的 reg exp :-)

但是,这似乎允许诸如“(validIPv6)](anythingatallhere)”之类的字符串 - 例如,“1234::5678:abcd]whargarbl”。

这些是否有效,或者这是一个错误?

由于我实际上只想要“[(validIPv6)]:(portnumber)”形式的字符串,因此我必须自己进行一些验证。

【问题讨论】:

  • System.Net.IPAddress.Parse("1234::5678:abcd]whargarbl") 对我来说失败了。请记住,当使用 try parse 时,它​​不会抛出 except 而是将 out 参数保留为默认值
  • 什么版本的 Windows?
  • used2could:该字符串为我传递 - TryParse 返回 True,并且 IPAddress 具有例如AddressFamily 设置为 InterNetworkV6 和 ToString() 值“1234:0000:0000:0000:0000:0000:86.120.171.205”。 SLaks - 这是 XP,我猜它实际上并不支持 IPv6。

标签: visual-studio-2005 c#-2.0 tryparse


【解决方案1】:

我正在查看反射器,似乎如果您当前的操作系统不支持 IPV6,则会调用一个解析例程,该例程将忽略最后一个 ']' 字符之后的所有内容。

这似乎是有问题的代码,请注意第二个或条件,因为它与前面的代码位相关。

int length = ipString.Length;
fixed (char* str2 = ((char*) ipString))
{
    char* name = str2;
    if (IPv6AddressHelper.IsValid(name, start, ref length) || (length != ipString.Length))

【讨论】:

  • 你能多发一点吗?我实在想不通。或者你不认为其余的会有帮助吗?看起来 IsValid 要么改变 ipString(通过 str2 和名称)或长度......所以如果整个字符串有效则返回 true,或者如果子字符串有效则改变字符串/长度?
  • @Rawling - 你的理论与我收集到的相似,所以发布更多代码可能不会有什么不同,反正代码太多了。
  • 所以基本上,它有点坏了。意识到我实际上不需要使用正则表达式后,我很想编写自己的验证代码,要么自己处理方括号并将其余部分传递给库,要么只使用 Split 等来验证它完全是我自己。
猜你喜欢
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 2015-09-19
  • 2015-02-20
  • 2023-03-10
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多