# | スクリプト | 解説 | |
---|---|---|---|
1 | #! /bin/bash | # | |
2 | # All ip/host name list | # | |
3 | bcast=`/sbin/ifconfig |sed -e '/Bcast/{s/^.*Bcast://;s/Mask.*$//p}' -n` | # ifconfig(8)の結果からブロードキャストアドレスを抽出 | |
4 | echo "Broadcast address ${bcast}" | # ブロードキャストアドレスを表示 | |
5 | ping -c4 -b $bcast >/dev/null 2>&1 | # ブロードキャストへ ping を実行 | |
6 | /sbin/arp -a 2>/dev/null | | # 上記 ping の結果から arp テーブルを表示 | |
7 | awk '{ | # | |
8 | sub("^.+[(]","");sub("[)].*$",""); | # ARPテーブルの括弧()内だけを抽出 | |
9 | ip=$0; | # 上記結果を IPアドレスとして変数に登録 | |
10 | split( ip, ot, "." ); | # IPをドットで分離し、配列otに登録 | |
11 | printf "%03d.%03d.%03d.%03d:%s\t", | # ソート用にオクテットを3桁で表示 | |
12 | ot[1],ot[2],ot[3],ot[4],ip; | # さらにコロンで区切ってもとのアドレスを表示 | |
12 | cmd = sprintf("dig -x ", ip); | # 逆引き用コマンドの生成 | |
13 | while( cmd | getline ){ | # 逆引きの実行 | |
14 | if( /^;/ ) { continue; }; | # 先頭がセミコロン(コメント)の行は読み飛ばす | |
15 | if( /PTR/) { print $NF; }; | # PTR を含む行の最後の要素を表示し、改行 | |
16 | } | # | |
17 | }' | | # | |
18 | sort -n | cut -d: -f2- | # 数値ソートを行い、コロンで区切った2つ目以降の要素を表示 |
$ sort -n ARPテーブルの内容 192.168.10.1 192.168.10.101 192.168.10.2 192.168.20.100 192.168.20.99 :そこで各オクテットを3桁固定とし、前にゼロをつけることで正しくソートする。
$ sort -n 加工したテーブル 192.168.010.001 192.168.010.002 192.168.010.101 192.168.020.099 192.168.020.100上記と等価な処理を行っているのが(11行目)で、さらにソート用と本来の値とを コロン(:)で区切って表示している。
192.168.010.001:192.168.10.1 192.168.010.002:192.168.10.2 192.168.010.101:192.168.10.101 192.168.020.099:192.168.20.99 192.168.020.100:192.168.20.100
$ allip Broadcast address 210.xxx.yy.255 210.xxx.yy.1 gw2.ukis-web.xx.ne.jp. 210.xxx.yy.21 w4.ukis.xx.ne.jp. 210.xxx.yy.22 w5.ukis.xx.ne.jp. 210.xxx.yy.23 w6.ukis.xx.ne.jp. 210.xxx.yy.24 w7.ukis.xx.ne.jp. 210.xxx.yy.27 w9.ukis.xx.ne.jp. 210.xxx.yy.28 w10.ukis.xx.ne.jp. 210.xxx.yy.29 w11.ukis.xx.ne.jp. 210.xxx.yy.30 w12.ukis.xx.ne.jp. 210.xxx.yy.37 site37.uus.xx.ne.jp. 210.xxx.yy.41 site41.uus.xx.ne.jp. 210.xxx.yy.110 mail01.uus.xx.ne.jp. 210.xxx.yy.221 w13.ukis.xx.ne.jp. 210.xxx.yy.224 w16.ukis.xx.ne.jp. 210.xxx.yy.232 lite2.ukis.xx.ne.jp.
$ /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:B0:D0:AD:49:9C inet addr:172.19.0.117 Bcast:172.19.255.255 Mask:255.255.0.0 inet6 addr: fe80::2b0:d0ff:fead:499c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:27694 errors:0 dropped:0 overruns:0 frame:0 TX packets:13791 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:14613860 (13.9 MiB) TX bytes:2454658 (2.3 MiB) Interrupt:11 Base address:0xec80 : # まず Bcast を含む行のみを抽出 $ /sbin/ifconfig | sed -e '/Bcast/{p}' -n inet addr:172.19.0.117 Bcast:172.19.255.255 Mask:255.255.0.0 # 続いて先頭から "Bcast:" までと、"Mask." 以降を削除し、 # アドレス部分だけを抽出する。 $ /sbin/ifconfig | sed -e '/Bcast/{s/^.*Bcast://;s/Mask.*$//p}' -n 172.19.255.255
$ /sbin/arp -a w10.ukis.xx.ne.jp (210.xxx.yy.28) at 00:xx:xx:xx:16:98 [ether] on eth0 w15.ukis.xx.ne.jp (210.xxx.yy.223) at 00:xx:xx:xx:CE:68 [ether] on eth0 site37.uus.xx.ne.jp (210.xxx.yy.37) at 00:xx:xx:xx:09:4C [ether] on eth0 :