Сохраненная часть каждого захваченного пакета определяется snaplen опцией. В некоторых дистрибутивах значение по умолчанию snaplen установлено приблизительно на 68 байтов. Пакеты являются затем усеченными к 68 байтам, скрывая часть полезной нагрузки. Можно сохранить полные пакеты путем установки snaplen на 0 (т.е. максимум) следующим образом: tcpdump -s0 -w test.pcap -i eth0
Возможно, это, считайте информацию с proc фс и используйте до н.э для вычисления:
#!/bin/bash
tot=$(awk '{ if (/MemTotal:/) {print $2} }' </proc/meminfo)
free=$(awk '{ if (/MemFree:/) {print $2} }' </proc/meminfo)
pers=$(echo "scale=0; 100 - 100 * $free / $tot" | bc)
echo '{"Memory":"'$pers'"}'
При использовании awk
не обязательно, я предпочитаю ruby
для форматирования JSON. Намного дольше то, что пустое awk
сценарий, но легче расширить его позже:
ruby -rjson -nae 'BEGIN{j={}};j["Memory"]="#{(100*$F[2].to_f/$F[1].to_f).to_i}%"if/^Mem/;END{puts j.to_json}' <(free -m)
Я написал командный -линейный инструмент под названием jc
. Он может преобразовывать вывод многих инструментов командной строки в JSON.
$ jc free | jq
[
{
"type": "Mem",
"total": 3861332,
"used": 338196,
"free": 2840616,
"shared": 11848,
"buff_cache": 682520,
"available": 3222232
},
{
"type": "Swap",
"total": 2097148,
"used": 0,
"free": 2097148
}
]