如何生成非IPv4/IPv6的IPAddress对象?校验逻辑必要性存疑
关于IP地址校验的疑问解答
你的理解是正确的
.NET的IPAddress.TryParse方法确实仅支持解析IPv4和IPv6格式的字符串。查看IPAddressParser.Parse的源码可以确认,它的核心逻辑就是针对这两种地址族设计的——任何非IPv4/IPv6格式的字符串要么解析失败(返回false),要么被识别为这两种类型之一,不可能得到其他AddressFamily枚举值的IPAddress对象。
是否需要保留地址族校验?
分两种场景判断:
- 如果你的代码仅处理从字符串解析而来的IPAddress:这段校验完全冗余,可以删掉。因为
TryParse成功返回的parsedIpAddress,其AddressFamily必然是InterNetwork(IPv4)或InterNetworkV6(IPv6),不会出现其他值。 - 如果你的方法直接接收IPAddress类型的参数:这段校验有必要保留。因为开发者可以通过
IPAddress的构造函数(比如IPAddress(byte[] address, long scopeid))手动创建属于其他地址族的实例(比如对应AddressFamily.AppleTalk的地址),这时候校验就能拦截不符合要求的输入。
内容的提问来源于stack exchange,提问作者Arian Motamedi
相关产品推荐
相关产品推荐

