
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
コマンドを使用できます。
json 形式の出力には多くの一重引用符文字が必要なので、と呼ばれる awk 変数を設定するためにを使用して、実際のスクリプトの外部でフォーマット文字列'
を定義する方が簡単です。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
質問の冒頭で JSON 風の例を挙げていますが、要約では実際にそれを求めているわけではありません。何かが含まれているか含まれていないかを示すファイルだけです。
ある意味
sudo arp-scan 192.168.0.5-192.168.0.5 | tail -n +2 | head -n -2 | head -1 > out.txt
それができる
それがあなたの希望と異なる場合は、質問を編集して、どのように見せたいかの実際の例を追加してください。