揮発性のメモ2

http://d.hatena.ne.jp/iww/

デバイス名、IPアドレス、ネットマスク のリストを出力する

$ ip -o a s| perl -nle 'if(/^\d+: (\w+)\s+inet ([\d\.]+)\/(\d+) /){ $e=join(".", unpack("C*",pack("N",0x100000000-(2**(32-$3)))));print "$1\t$2\t$e"}'
lo      127.0.0.1       255.0.0.0
eth0    172.16.1.1      255.255.0.0
usb0    192.168.7.2     255.255.255.252

ipコマンド

ip --oneline addr show
--onelineで1行ずつ表示してくれるのホント便利。 これがデフォルトでいいよもう

1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever

とりあえずipv6(inet6)は無視する

ネットマスクの /8 とか /16 とかの表記を 255.0.0.0 とか 255.255.0.0 とかに変換する

$d = 0x100000000-(2**(32-$a)));

整数値をipv4っぽく変換する

Perlの組み込み関数 pack の翻訳 - perldoc.jp
エンディアンをひっくりかえし*1、1バイトずつに分解し*2、"."でくっつける

$e=join(".", unpack("C*",pack("N",$d)))

*1:* pack("N",$x)

*2:* unpack("C*",$x)