Можно ли tcpdump
подсчитать (за некоторое время) количество исходящих и входящих UDP-пакетов?
У меня нет большого опыта в tcpdump
, поэтому совет, как это сделать, был бы очень полезен. Я читал, что timeout
commend хорош, если я хочу остановить процесс по истечении определенного времени, поэтому я думал просто остановиться tcpdump
после своего времени.
Но как мне подсчитать количество исходящих и входящих пакетов и отфильтровать только UDP-пакеты?
решение1
Я бы не использовал tcpdump
(или tshark
) для этого. Вместо этого я бы использовал iptables
для подсчета пакетов за определенный период времени
# Prepare two sets of counters and set up the rules
#
iptables -N udp_in
iptables -N udp_out
iptables -A udp_in
iptables -A udp_out
iptables -A OUTPUT --protocol udp -j udp_out
iptables -A INPUT --protocol udp -j udp_in
Вы можете сбросить счетчики в начале менструации следующим образом:
# Reset the counters
#
iptables -Z udp_in
iptables -Z udp_out
Вы можете прочитать показания счетчиков в конце менструации следующим образом:
# Look at the counters
#
packets_in=$(iptables -nvL udp_in | awk '/all/{print $1}')
packets_out=$(iptables -nvL udp_out | awk '/all/{print $1}')
echo "in=$packets_in, out=$packets_out"
Вы можете считать счетчик и немедленно сбросить его, Z
одновременно предоставив флаг. Например
packets_in=$(iptables -nvLZ udp_in | awk '/all/{print $1}')
Собрав все воедино и предположив, что вы уже создали необходимые дополнительные цепочки iptables (см. выше), вы можете использовать что-то вроде этого
# Reset the counters
#
iptables -Z udp_in
iptables -Z udp_out
# Wait 10 seconds
#
period=10
sleep "$period"
# Look at the counters
#
packets_in=$(iptables -nvL udp_in | awk '/all/{print $1}')
packets_out=$(iptables -nvL udp_out | awk '/all/{print $1}')
# Report the results
#
echo "During the last $period seconds we saw $packets_in UDP packet(s) in and $packets_out UDP packet(s) out."
решение2
man tcpdump
предоставляет информацию, которая вам нужна. Веб-страница tcpdump также предоставляетстраница руководства.
Прямо в ОПИСАНИИ говорится, что после tcpdump
завершения захвата пакетов он сообщает количество захваченных пакетов, полученных фильтром и отброшенных ядром.
Фильтрация (то есть поиск пакетов только определенного типа) может оказаться гораздо более сложной задачей, но раздел ПРИМЕРЫ должен дать достаточно информации о том, что вам нужен только фильтр udp
для вашего примера.
Итак, как только вы определились с правильным фильтром, используйте tcpdump
команду timeout
, которая запустит его на указанное вами время, kill tcpdump
, и вы получите количество пакетов.
timeout 20 tcpdump udp
Это запустит фильтрацию tcpdump для udp и завершит работу tcpdump через 20 секунд.