しばたテックブログ

気分で書いている技術ブログです。

PowerShellでipcalcっぽいことをするスクリプトを書いてみた

なんかこの記事がはてブで大人気だったので。

.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ブログの以下の記事を参考にしました。

IP Address Calculations with C#