如何從 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

這裡的計劃是建立一個包含或不包含 IP 的輸出文件,該 IP 表示設備是否在網路上或未由 IE 啟動。

答案1

如果你確實想要 JSON 格式的輸出,你可以使用awkprintf指令。

您希望在 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

可以做到這一點

如果這不是您想要的,請編輯您的問題以添加您希望其外觀的實際範例

相關內容