powershell(その3)
powershellでIPアドレス計算(失敗)
PS C:\> $ipaddr = "10.10.10.10" PS C:\> ($ipaddr.GetType()).name -eq [ipaddress] False PS C:\> ($ipaddr.GetType()).name String
だとうまくいかない
powershellでIPアドレス計算(成功)
PS C:\> $ipaddr = [ipaddress]"10.10.10.10" PS C:\> ($ipaddr.GetType()).name -eq [ipaddress] True PS C:\> ($ipaddr.GetType()).name IPAddress
IPアドレスとサブネットマスクからネットワークアドレスを計算
PS C:\> $ipaddr = [ipaddress]"10.10.10.10" PS C:\> $netmask =[ipaddress] "255.255.255.0" PS C:\> ([ipaddress]($ipaddr.Address -band $netmask.Address)).IPAddressToString 10.10.10.0
cidr からネットマスクな形式への変換(失敗)
ネットマスクをネットマスクらしいビット列で扱ってくれてなさそう。。。
PS C:\Users\eiji> $addr = [ipaddress]"255.255.255.255" PS C:\Users\eiji> [convert]::tostring($addr.Address,2) 11111111111111111111111111111111 PS C:\Users\eiji> ([convert]::tostring($addr.Address,2)).length 32
PS C:\Users\eiji> $addr = [ipaddress]"255.255.255.0" PS C:\Users\eiji> [convert]::tostring($addr.Address,2) 111111111111111111111111 PS C:\Users\eiji> ([convert]::tostring($addr.Address,2)).length 24
PS C:\Users\eiji> $addr = [ipaddress]"255.255.0.0" PS C:\Users\eiji> [convert]::tostring($addr.Address,2) 1111111111111111 PS C:\Users\eiji> ([convert]::tostring($addr.Address,2)).length 16
PS C:\Users\eiji> $addr = [ipaddress]"255.0.0.0" PS C:\Users\eiji> [convert]::tostring($addr.Address,2) 11111111 PS C:\Users\eiji> ([convert]::tostring($addr.Address,2)).length 8
PS C:\Users\eiji> $addr = [ipaddress]"255.255.255.128" PS C:\Users\eiji> [convert]::tostring($addr.Address,2) 10000000111111111111111111111111 PS C:\Users\eiji> ([convert]::tostring($addr.Address,2)).length 32
PS C:\Users\eiji> $addr = [ipaddress]"255.255.128.0" PS C:\Users\eiji> [convert]::tostring($addr.Address,2) 100000001111111111111111 PS C:\Users\eiji> ([convert]::tostring($addr.Address,2)).length 24
cidr からネットマスクな形式への変換(成功)
自力ではちょっと挫折。以下を参照。。
PowerShell で IPv4 アドレス計算
PS C:\> $subnet = $null PS C:\> $cidr = 25 PS C:\> $cidr 25 for( $i = 0 ; $i -lt 4 ; $i++ ){ if( $cidr -ge 8 ){ $subnet += "255" $cidr -= 8 } elseif($cidr -le 0){ $subnet += "0" $cidr = 0 } else{ $node = [Math]::Pow(2,8 - $cidr) $subnetinoctet = 256 - $node $subnet += [string]$subnetinoctet $cidr = 0 } if( $i -ne 3 ){ $subnet += "." } } PS C:\> $subnet 255.255.255.128