インターフェースのIPアドレスを取得する がらみ

へ。

後知恵ですが ifconfig とか /proc/sys/net/ipv4/(うちのlinuxはまだ2.4なんで)というキーワードが判ればその料理の仕方で参考になるのが /etc/ 以下にあるスクリプトです。

たとえば grep -r 'ifconfig' /etc/* とか grep -r '/proc/sys/net/' /etc/* とかすればそれらがどのように使われているか判ります。今回はインターフェースのアドレスを取得という件にピッタリのものはありませんでしたが、以下のような行を見つけました。

 /etc/rc.d/init.d/network:118:           echo `/sbin/ifconfig | grep ^[a-z] | awk '{print $1}'`

ifconfig のオプションにインターフェースを指定すればそのインターフェースだけ出力してくれるということで 効率は悪いですが複数回ifconfigを呼んでインターフェース毎にアドレスを取得する別解を考えて見ました。

1 #/bin/bash
2 
3 /sbin/ifconfig | sed -n '/^[a-z]/s/^\([a-z0-9:]*\)[ 	].*/\1/p' | grep -v '^lo$' |
4 while read INT;
5 do 
6    /sbin/ifconfig $INT | sed -n 's/.*inet addr:\([0-9.]*\).*Mask:\([0-9.]*\).*/\1 \2/p'
7 done


追記

3行目は

/sbin/ifconfig | sed -n '/^[a-z]/{s/^\([a-z0-9:]*\)[   ].*/\1/; /^lo$/!p;}' |

のほうがいい。grepの呼び出しが不要。