
如何從 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
這裡的計劃是建立一個包含或不包含 IP 的輸出文件,該 IP 表示設備是否在網路上或未由 IE 啟動。
答案1
如果你確實想要 JSON 格式的輸出,你可以使用awk
的printf
指令。
您希望在 json 格式的輸出中包含大量'
單引號字符,以便更容易printf
在實際腳本之外定義格式字串awk
,使用-v
設定一個名為 的 awk 變數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
) 是否看起來像 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
可以做到這一點
如果這不是您想要的,請編輯您的問題以添加您希望其外觀的實際範例