なんかこの記事がはてブで大人気だったので。
.NETやPowerShellでipcalcするのは既に先人が結構いて、スクリプトセンターにもコードが上がってたりするんですけど、自分の欲しい形のが無かったので車輪の再発明してみました。
PowerShellでipcalcっぽいことをするスクリプト
コードはこんな感じです。
コマンド体系はCentOSについてたipcalcをベースにしました。
実装が面倒だったのと自分の用途に合わないのでIPV4のみのサポートにしています。
使い方は-CalcType
で取得したい内容を選んで、IPアドレスを指定します。
実行例
# # -CalcTypeは以下の内容を指定することができます。 # Subnet : Prefix長からサブネットマスクを取得します。 # Prefix : サブネットマスクからPrefixを取得します。 # Broadcast : ブロードキャストアドレスを取得します。 # Network : ネットワークアドレスを取得します。 # Hostname : ホスト名を取得します。 # Calculate-IPAddress -CalcType Subnet,Broadcast,Network -Address 192.168.123.45/21
実行結果は、以下の様な形のHashtableで返されます。
Name Value ---- ----- SubnetMask 255.255.248.0 BroadcastAddress 192.168.127.255 NetworkAddress 192.168.120.0
以下の様にコマンドを実行すると値を直接取得できます。
(Calculate-IPAddress -CalcType Subnet,Broadcast,Network -Address 192.168.123.45/21).BroadcastAddress
また、-Verbose
オプションを付けるとネットワークアドレスとブロードキャスアドレスの各オクテットごとの計算の詳細を見ることもできます。
詳細: IP Address : 192.168.123.45 詳細: Argument Subnetmask Prefix : 21 詳細: Subnetmask : 255.255.248.0 詳細: NetworkAddress 1 octet : 192 & 255 -> 192 詳細: NetworkAddress 2 octet : 168 & 255 -> 168 詳細: NetworkAddress 3 octet : 123 & 248 -> 120 詳細: NetworkAddress 4 octet : 45 & 0 -> 0 詳細: BroadcastAddress 1 octet : 192 | ( 255 ^ 255 ) -> 192 詳細: BroadcastAddress 2 octet : 168 | ( 255 ^ 255 ) -> 168 詳細: BroadcastAddress 3 octet : 123 | ( 248 ^ 255 ) -> 127 詳細: BroadcastAddress 4 octet : 45 | ( 0 ^ 255 ) -> 255 Name Value ---- ----- SubnetMask 255.255.248.0 BroadcastAddress 192.168.127.255 NetworkAddress 192.168.120.0
参考資料
アドレス計算部分についてはMSDNブログの以下の記事を参考にしました。