ARPでjson形式の出力ファイルを作成するには?

ARPでjson形式の出力ファイルを作成するには?

ARPでjson形式の出力ファイルを作成するには?

openremote2を実行するラズベリーパイがあり、openremoteが理解できる出力ファイル形式を指定したいと思います。ここに例があります。

{
  'command':'ELAPSE',
  'value':53680,
  'mute':1,
  'shuffle':0,
  'repeat':0,
  'play':1,
  'volume':0,
  'TotalTime':0,
  'favstatus':0
}

したがって、arpコマンドは次のようになります。 -

sudo arp-scan 192.168.0.5-192.168.0.5

出力は次のとおりです。 -

Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 1 hosts (http://www.nta-monitor.com/tools/arp-scan/)
1 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 1 hosts scanned in 1.684 seconds (0.59 hosts/sec). 0 responded

デバイスの電源を入れると、次の結果が表示されます。

Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 1 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.0.5     08:eb:74:9e:00:f4       (Unknown)
2 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 1 hosts scanned in 1.405 seconds (0.71 hosts/sec). 1 responded

ここでの計画は、デバイスがネットワーク上にあるのか、IEで実行されていないのかを示すIPの有無の出力ファイルを生成することです。

ベストアンサー1

JSON形式で出力したい場合は、コマンドを使用できawkますprintf

というawk変数設定を使用して、実際のスクリプトの外側で型文字列を'定義しやすくするために、json形式の出力に一重引用符文字をたくさん含めたいと思います。printfawk-vfmt

sudo arp-scan 192.168.0.5-192.168.0.5 | 
    awk -F'\t' -v fmt="{\n 'ip': '%s',\n 'mac': %'s',\n 'vendor': '%s'\n}\n" \
        '$2 ~ /([0-9a-f][0-9a-f]:){5}/ {printf fmt,  $1, $2, $3}'

arp-scanの出力はタブで区切られているため、awkスクリプトは2番目のフィールド($2)がMACアドレスと同じであることを確認します。その場合、フィールドをきれいに印刷するために使用されますprintf。それ以外の場合は印刷されません。

出力(サンプルベース):

{
 'ip': '192.168.0.5',
 'mac': '08:eb:74:9e:00:f4',
 'vendor': '(Unknown)'
}

IPアドレスをプレーンテキストにしたい場合ははるかに簡単です。

sudo arp-scan 192.168.0.5-192.168.0.5 | 
    awk -F'\t' '$2 ~ /([0-9a-f][0-9a-f]:){5}/ {print $1}'

出力:

192.168.0.5

(またはIPが応答しない場合は何もしません)

おすすめ記事