我想阻止一个苹果地址哪个下载的值超过“20480”:
json 文件:
{
"client_length": 3,
"clients": {
"ac:07:5f:77:40:e9": {
"id": 1,
"ip": "192.168.5.40",
"mac": "ac:07:5f:85:40:e9",
"added": 1576258952,
"active": 1576264642,
"duration": 5711,
"token": "4d8fd3ce",
"state": "Authenticated",
"downloaded": 45059,
"avg_down_speed": 63.12,
"uploaded": 2976,
"avg_up_speed": 4.17
},
"ac:e0:10:55:2d:78": {
"id": 2,
"ip": "192.168.5.132",
"mac": "ac:e0:10:12:2d:75",
"added": 1576258985,
"active": 1576264663,
"duration": 5678,
"token": "35dfa494",
"state": "Authenticated",
"downloaded": 18663,
"avg_down_speed": 26.3,
"uploaded": 4986,
"avg_up_speed": 7.03
},
"58:48:44:db:ba:ba": {
"id": 3,
"ip": "192.168.5.93",
"mac": "58:48:22:db:ba:be",
"added": 1576258973,
"active": 1576264662,
"duration": 5690,
"token": "139fede2",
"state": "Authenticated",
"downloaded": 187876,
"avg_down_speed": 264.15,
"uploaded": 7910,
"avg_up_speed": 11.12
}
}
}
此外,这是结果ndsctl json
并且总是会改变的。 ndsctl 是 nodogsplash 软件包的一部分。我已经在 OpenWrt (BusyBox v1.28.4) 上安装了这个软件包。
我的目标:
上面的 json 给了我一些信息。根据这个文件,我想阻止ac:07:5f:77:40:e9
,58:48:44:db:ba:ba
因为它们的下载值超过了“20480”。
我需要一个 bash 脚本来为我做到这一点。
要阻止的命令苹果地址:
ndsctl block ac:07:5f:77:40:e9
ndsctl block 58:48:44:db:ba:ba
我做了一些事情:
root@OpenWrt:~# cat test.json | grep "mac\|downloaded"
"mac":"ac:07:5f:85:40:e9",
"downloaded":45059,
"mac":"ac:e0:10:55:2d:78",
"downloaded":18663,
"mac":"58:48:44:db:ba:ba",
"downloaded":187876,
任何想法?
答案1
对于大多数 Unices 来说,有一个名为“jq
随时可用”的命令行 JSON 解析器(可能必须从您的软件包系统安装)。
有了它,就可以轻松解析出下载次数超过20480次的条目的MAC地址。
获取这些后,您可以将它们一一传递给ndsctl block
使用xargs
:
jq -r '.clients[] | select(.downloaded > 20480).mac' file.json |
xargs -n 1 ndsctl block
这假设 JSON 文档保存在file.json
.
对于给定的 JSON 文档,这将运行两个命令
ndsctl block ac:07:5f:85:40:e9
ndsctl block 58:48:22:db:ba:be