Найдите топ-5 (по количеству отправленных пакетов) исходных IP-адресов

Я делаю задание, меня просят ответить на некоторые вопросы, основанные на файле pcap, который мне дают. Один из вопросов заключается в том, чтобы найти топ-5 (по количеству отправленных пакетов) исходных IP-адресов.

Я придумал следующую команду:

$ tshark -r assign1.pcap | sort -n -7 | tail -n 5 | awk '{print $3}' 

где

  • tshark -r читает файл pcap
  • assign.pcap – это файл захвата пакета
  • sort -n -7 сортирует файл на основе столбца 7 (этот столбец имеет длину пакета для каждого IP-адреса)
  • tail -n 5 распечатывает последние 5 записей, которые имеют наибольшую длину для пакета
  • awk '{print $3} печатает только третий столбец.

Теперь вот моя проблема, так как мне нужны уникальные топ-5 исходных IP-адресов, поэтому я попытался uniq команду uniq в конце скрипта, но это не помогло. Я также пытался использовать sort -u -t, -k3,3 по этой ссылке, но это также не выводит уникальные IP-адреса!

Мой заголовок столбца в файле pcap выглядит так:

введите описание изображения здесь

Я думаю, что если вы реорганизуете вывод из tshark используя -T fields это будет намного проще. Я смог выполнить то, что вы хотите, так:

 $ tshark -r blah.pcap -T fields -e frame.len -e ip.src | sort -k 1n | tail -5 92 10.0.2.2 92 10.0.2.2 92 10.0.2.2 100 10.0.2.15 156 10.0.2.15 

чарк поля

Вы можете использовать эту команду, чтобы получить список всех полей:

 $ tshark -G field 

Но я обнаружил, что это немного трудно читать. Если вы хотите понять столбцы в выводе -G field , они описаны здесь: tshark – Дамп и анализ сетевого трафика :

  * Header Fields * ------------- * Field 1 = 'F' * Field 2 = descriptive field name * Field 3 = field abbreviation * Field 4 = type (textual representation of the ftenum type) * Field 5 = parent protocol abbreviation * Field 6 = base for display (for integer types); "parent bitfield width" for FT_BOOLEAN * Field 7 = bitmask: format: hex: 0x.... * Field 8 = blurb describing field 

Вы можете использовать этот grep для фильтрации вывода, если вы смелы:

 $ tshark -G fields | grep -P '\s+(ip.src|frame.len)\s+' F Frame length on the wire frame.len FT_UINT32 frame BASE_DEC 0x0 F Source ip.src FT_IPv4 ip 0x0 

Рекомендации

  • введите описание ссылки здесь
  • tshark учебник и примеры фильтров
  • Подсчет вхождений IP в файле PCAP с использованием tshark
  • Фильтр отображения определенного IP-адреса с использованием tshark

Поэтому, получив подсказку из этого ответа, я придумал следующий сценарий:

 $ tshark -r assign1.pcap | sort -n -r -k7 | awk '!seen[$3]++' | awk '{print $3}' | head -n 5 >> result.txt 

Объясняя каждую команду в строке:

  • tshark -r assign1.pcap читает файл pcap
  • sort -n -r -k7 числовая сортировка (-n) файла на основе (-r) обратного порядка (-k7) столбца 7 [этот столбец имеет длину пакета для каждого IP-адреса]
  • awk '!seen[$3]++' распечатать исходный IP-адрес (3-й столбец), который ранее не был виден, поэтому он печатает только уникальные IP-адреса
  • awk '{print $3}' печатает только 3-й столбец (исходный IP-адрес)
  • head -n 5 >> result.txt поскольку мне нужны первые 5, поэтому я ограничил свои результаты только 5 с помощью команды head , также last >> result.txt добавляет конечный результат в текстовый файл.