Eu quero bloquear um endereço mac cujo valor baixado é superior a "20480":
O arquivo 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
}
}
}
Além disso, este é o resultado ndsctl json
e sempre será alterado. ndsctl faz parte do pacote nodogsplash. Instalei este pacote no OpenWrt (BusyBox v1.28.4).
Meu objetivo:
O json acima me dá algumas informações. De acordo com este arquivo, eu quero bloquear ac:07:5f:77:40:e9
e 58:48:44:db:ba:ba
porque o valor baixado deles é superior a "20480".
Eu preciso de um script bash para fazer isso por mim.
Os comandos para bloquear endereços mac :
ndsctl block ac:07:5f:77:40:e9
ndsctl block 58:48:44:db:ba:ba
Eu fiz algo:
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,
Qualquer ideia?
Existe um analisador JSON para a linha de comando chamado
jq
prontamente disponível para a maioria dos Unices (isso pode ter que ser instalado a partir do seu sistema de pacotes).Com ele, é fácil analisar os endereços MAC das entradas que foram baixadas mais de 20.480 vezes.
Uma vez que eles são buscados, você pode simplesmente passá-los um por um para
ndsctl block
usarxargs
:Isso pressupõe que o documento JSON seja mantido no formato
file.json
.Para o documento JSON fornecido, isso executaria os dois comandos