- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在尝试从 API 结果中解析 IP 地址,其中 IPv4 地址的四个部分中的每一个都带有前缀 0(零)。像这样:
127.000.000.001 而不是 127.0.0.1
我在尝试解析 192.168.001.009 时开始遇到解析错误。它也对 192.168.001.008 失败,但对 007、006、005 到 001 有效!!!
它也对 192.168.001.018 失败,但对 .017、.016 到 010 有效!
它适用于 192.168.001.8 或 .8 以及 192.168.001.18 和 .19...
这是 CLR 中的错误吗?还是我错过了一些愚蠢的东西?
试试看:
IPAddress.Parse("192.168.001.007"); // works
IPAddress.Parse("192.168.001.87"); // works
IPAddress.Parse("192.168.001.008"); // throws exception
IPAddress.Parse("192.168.001.19"); // works
IPAddress.Parse("192.168.001.019"); // throws exception
// and so on!
最佳答案
这些数字,因为它们以 0 开头,所以被解释为八进制而不是十进制。这些不是 C# 文字,因此由库以一种或另一种方式解释它。
测试它的一个简单方法是构造一个以“.010”结尾的 IP,解析它,您会看到它被解析为以 .8 结尾的 ip。
一个可能的快速但肮脏的解决方案是搜索正则表达式 /\.0*/
并将其替换为“.”
您可以在有关点十进制符号的维基百科条目上找到更多信息:
A popular implementation of IP networking, originating in 4.2BSD, contains a function inet_aton() for converting IP addresses in character strings representation to internal binary storage. In addition to the basic four-decimals format and full 32-bit addresses, it also supported intermediate syntaxes of octet.24bits (e.g. 10.1234567; for Class A addresses) and octet.octet.16bits (e.g. 172.16.12345; for Class B addresses). It also allowed the numbers to be written in hexadecimal and octal, by prefixing them with 0x and 0, respectively. These features continue to be supported by software until today, even though they are seen as non-standard. But this also means addresses where an IP address component is written with a leading zero digit may be interpreted differently by different programs: some will ignore the leading zero, some will interpret the number as octal.
关于c# - 为什么 IPAddress.Parse ("192.168.001.001") 工作而 IPAddress.Parse ("192.168.001.009") 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027095/
我尝试了以下代码使我的代码在双堆栈模式下工作。不幸的是,它没有在双栈模式下打开端口。 var listener = new TcpListener(IPAddress.Any, 2222); list
我昨天问了一个关于将 HEX 字符串转换为 IP 的问题,并在这里得到了答案:C# convert hex into ip 问题是,当我使用函数时 var ip = new IPAddress(lon
我一直在尝试从 API 结果中解析 IP 地址,其中 IPv4 地址的四个部分中的每一个都带有前缀 0(零)。像这样: 127.000.000.001 而不是 127.0.0.1 我在尝试解析 192
我正在使用 pythons ipaddress 模块,我试图只获取第一个可用主机,而不是所有可用主机 下面给了我所有的主机,当我试图索引它时,我得到了下面的错误。 有没有其他方法可以只获得第一个可用的
我正在编写一个 Xamarin.Forms 应用程序,并将一个 PCL 项目添加到我在 Visual Studio 2013 中的主要解决方案中。我在使用多个标准 .net 类时遇到问题。这是一个列表
先介绍一些背景。我在局域网中的每台机器上都安装了 .net 客户端代理。他们也在同一个局域网上与我的中央服务器 [网站] 交互。 弄清楚哪些机器可以相互通信对我的网站来说很重要。例如,如果不配置路由器
我有一个服务器应用程序,我试图自动将 IP 地址设置为从机器动态分配的 IP 地址中获取的地址。到目前为止,我已经得到了这个来获取 IPv4,但它作为 IPAddress[] 类型返回,我在转换为 s
我有一个服务器应用程序,我试图自动将 IP 地址设置为从机器动态分配的 IP 地址中获取的地址。到目前为止,我已经得到了这个来获取 IPv4,但它作为 IPAddress[] 类型返回,我在转换为 s
在代表 IPv6 地址的 IPAddress 实例上调用 ToString() 方法,我得到了一些地址后带有百分号的文本。这是not documented .什么意思? 返回值如下所示:fe80::1
您好,是否可以为 jdbc 瘦驱动程序提供机器名称而不是 ipaddress。或者它会在运行时产生某种错误。我尝试使用机器名称而不是本地主机,它正在工作。因此,如果我们可以提供机器名称而不是 ipad
我有一个网络应用程序正在运行,让我们说下面的 IP:10.101.10.101。网络应用程序名称是示例,因此整个 URL 如下:https://10.101.10.101/example 现在尝试使用
我想在变量中获取我的计算机的 ipaddress此语句打印我的计算机的 ipaddress但我想把它分配给一个变量我如何从 inet_ntoa(inaddrr(ifr_addr.sa_data)) 中
好吧,这是一个小问题……但仍然令人恼火。 在 MSVS 2008 .NET 3.5 中,我的 IPAdress.Address 很长,我只是使用了 if(subnet == subnetmask.Ad
我正在使用 IPAddress.TryParse 来验证 IP 地址,但是如果我使用 if (IPAddress.TryParse("192.168.1.009", out ip) 它失败了,但是 i
我有一个函数,它使用 IPAddress 类返回给定 IP 地址是否有效。我正在测试它,即使我在没有点作为参数的情况下传递“0123456”或“11111”或“99999”,它也会返回有效(真)。我用
这个问题在这里已经有了答案: Extract ip addresses from Strings using regex (4 个答案) 关闭 4 年前。 我有一个包含多个 IP 地址的大字符串。
我想知道如何从 DhcpInfo.ipAddress 获取人类可读的 IP 地址?棘手的是,它是一个整数,显然你不能用整数存储 IP 地址。那么,IP 地址是如何编码的,它可以存储在一个 int 中?
我可以检查一个 ip 是否在私有(private)网络中吗?
我正在使用 System.Diagnostics.Eventing.Reader.EventLogWatcher 类 Hook 安全事件日志,并且我正在观察 2008 服务器机器上的事件 ID 462
在 .NET IPAddress.HostToNetworkOrder() 中只能接收一个 long int(64 位)并返回一个 long。这适用于 IPv4,但 IPv6 地址是 128 位的。我
我是一名优秀的程序员,十分优秀!