如何从 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
可以做到这一点
如果这不是您想要的,请编辑您的问题以添加您希望其外观的实际示例