【发布时间】:2023-02-23 00:34:42
【问题描述】:
我有包含与 IPv6 相关的 IP 编号的 CSV,我正在读取它们并将其转换为 IPv6 IP 地址,但我需要将其转换为 CIDR 表示法,目前该地址失败。
我正在使用以下代码但出现错误:
无法将值“281470698520576”转换为类型“System.Net.IPAddress”。错误:“指定的参数是 超出有效值范围。
function Convert-NumberToIP { param( [Parameter(Mandatory=$true)][string]$number ) [Int64] $numberInt = 0 if([Int64]::TryParse($number, [ref]$numberInt)) { if(($numberInt -ge 0) -and ($numberInt -le 0xFFFFFFFFl)) { #([IPAddress] $numberInt).ToString() $ipBytes = ([IPAddress]$numberInt).GetAddressBytes() [array]::Reverse($ipBytes) ([IPAddress]$ipBytes).IPAddressToString } } } Convert-NumberToIP -number '281470698520576'
【问题讨论】:
-
请记住,IPv6 地址是 128 位无符号整数,而不是 64 位整数。
-
@RonMaupin 当我使用
0xFFFFFFFFFFFFFFFFFF时它说的是The numeric constant is not valid -
正确的。大多数语言不直接支持 128 位整数。
标签: powershell ip ipv6 ip2location