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 形式の出力が必要な場合は、awkprintfコマンドを使用できます。

json 形式の出力には多くの一重引用符文字が必要なので、と呼ばれる awk 変数を設定するためにを使用して、実際のスクリプトの外部でフォーマット文字列'を定義する方が簡単です。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 が応答しない場合は何も起こりません)

答え2

質問の冒頭で JSON 風の例を挙げていますが、要約では実際にそれを求めているわけではありません。何かが含まれているか含まれていないかを示すファイルだけです。

ある意味

sudo arp-scan 192.168.0.5-192.168.0.5  | tail -n +2 | head -n -2 | head -1 > out.txt

それができる

それがあなたの希望と異なる場合は、質問を編集して、どのように見せたいかの実際の例を追加してください。

関連情報