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形式の出力に一重引用符文字をたくさん含めたいと思います。printf
awk
-v
fmt
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が応答しない場合は何もしません)
答え2
私は質問の始めにJSONishの例を提供しましたが、実際に要約では要請しませんでした。何かを含むか含まないファイルです。
ある意味では
sudo arp-scan 192.168.0.5-192.168.0.5 | tail -n +2 | head -n -2 | head -1 > out.txt
これができる
これが望ましくない場合は、質問を編集して目的の外観の実際の例を追加します。