Я пытаюсь получить скорость пропускной способности сетевого адаптера Ethernet / скорость передачи данных на VPS, чтобы начать захват на Wireshark во время DOS / DDOS-атак, чтобы я мог анализировать характер пакетов.
Я знаю, что могу использовать так называемый кольцевой буфер, чтобы ограничить размер файлов Wireshark и просто поддерживать работу Wireshark. Однако я хотел бы начать сбор трафика только после того, как будет достигнут определенный порог сетевого трафика, поскольку это упростит мне разделение файлов перед их проверкой.
Я просмотрел несколько инструментов командной строки, таких как iftop, vnstat и nload, которые все хорошо справляются с выводом данных на терминал.
Однако может ли кто-нибудь помочь мне с помощью команды в одном из этих инструментов или другим приятным способом просто захватить DTR, который позволил бы мне начать захват wirehark? Иначе, есть ли в Tshark существующая команда, позволяющая это сделать?
Вы можете запустить TShark со следующими параметрами:
tshark -i 1 -a duration:30 -q -z io,stat,0
Смысл:
-i 1
: Послушайте свой первый интерфейс. При необходимости отрегулируйте для желаемого интерфейса. (Ты можешь использовать tshark -D
чтобы получить список интерфейсов на выбор.)
-a duration:30
: автостоп через 30 секунд
-q
: Не отображать пакеты по мере их захвата; просто покажи сводку в конце
-z io,stat,0
: Сбор и отображение статистики ввода-вывода в конце с интервалом в ноль секунд. Нулевой интервал означает, что статистика будет рассчитываться по всем пакетам.
Запустите захват. Он остановится через 30 секунд (или вы можете завершить его раньше, обычно с помощью Ctrl+C), и вы получите вот такое резюме:
12645 packets captured
=====================================
| IO Statistics |
| |
| Duration: 29.1 secs |
| Interval: 29.1 secs |
| |
| Col 1: Frames and bytes |
|-----------------------------------|
| |1 |
| Interval | Frames | Bytes |
|-----------------------------------|
| 0.000 <> 29.1 | 12645 | 8694272 |
=====================================
Затем вы можете разделить 8694272 байта на 29,1 секунды, чтобы увидеть пропускную способность 298 772 байта в секунду в течение этого окна захвата.
Для автоматизации запускайте это как угодно часто - может быть, каждые пять минут - а затем проанализируйте результаты своим любимым инструментом, чтобы определить продолжительность и общее количество байтов. Выполните разделение и запустите Wireshark, если пропускная способность превышает установленный порог.
Вот решение на Python, которое будет анализировать данные интерфейса Linux для RX (полученных данных). Кажется, это близко соответствует выводу nload
однако иногда он сообщает о более высоких, чем nload
max на кратное.
import subprocess
import time
while True:
interface = "eno1"
duration = 1
output = subprocess.check_output("ip -s link show dev %s" % interface, stderr=subprocess.STDOUT, shell=True)
output_array = output.split("\n")
rx_bytes_1 = int(output_array[3].split()[0])
time.sleep(duration)
output = subprocess.check_output("ip -s link show dev %s" % interface, stderr=subprocess.STDOUT, shell=True)
output_array = output.split("\n")
rx_bytes_2 = int(output_array[3].split()[0])
rx_rate = round((rx_bytes_2 - rx_bytes_1) / (duration * 1024.0 * 1024.0),4)
print "Throughput: " + str(rx_rate) + " Mbps."