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

可以做到这一点

如果这不是您想要的,请编辑您的问题以添加您希望其外观的实际示例

相关内容