Как захватить и воспроизвести сетевой трафик в Linux
Когда вы тестируете или отлаживаете промежуточное оборудование, такое как маршрутизаторы, коммутаторы или системы обнаружения вторжений (Snort или Suricata), чрезвычайно полезно выполнять тестирование с воспроизводимым сетевым трафиком. Использование повторяющегося трафика сводит к минимуму любую неопределенность в среде тестирования, тем самым упрощая интерпретацию и анализ результатов тестирования.
В Linux есть набор утилит командной строки под названием tcpreplay
, которые могут воспроизводить захваченный сетевой трафик.
В этом руководстве я покажу вам, как захватить сетевой трафик в реальном времени и воспроизвести захваченный сетевой трафик в другом месте с помощью tcpreplay
.
Захват живого сетевого трафика
Сначала установите tcpreplay
и tcpdump
в вашей системе Linux. Чтобы установить tcpreplay
, следуйте инструкциям в этом руководстве.
Следующим шагом будет захват сетевого трафика в реальном времени и его дамп в файл pcap
. Для этого запустите команду tcpdump
следующим образом. Я предполагаю, что eth0
— это интерфейс прослушивания, который установлен в режим неразборчивый
.
$ sudo tcpdump -w dump.pcap -i eth0
Перезаписать пакеты в дампе трафика
Затем перепишите пакеты, захваченные в файл pcap
. Причина, по которой необходим шаг перезаписи, заключается в том, что IP-адреса/MAC-адреса источника/получателя в исходном файле pcap
могут не совпадать с адресами в среде, в которой вы хотите воспроизвести pcap
. файл. Вы можете использовать следующий набор команд для выполнения такой перезаписи пакетов. Замените IP/MAC-адреса на свои.
1. Перепишите любой IP-адрес назначения и MAC-адрес в dump.pcap
на 192.168.1.20
и E0:DB:55:CC:13:F1
соответственно и сохраните результат в temp1.pcap
:
$ tcprewrite --infile=dump.pcap --outfile=temp1.pcap --dstipmap=0.0.0.0/0:192.168.1.20 --enet-dmac=E0:DB:55:CC:13:F1
2. Перепишите любой исходный IP-адрес и MAC-адрес в дампе входящего трафика на 192.168.1.10
и 84:A5:C8:BB:58:1A
соответственно:
$ tcprewrite --infile=temp1.pcap --outfile=temp2.pcap --srcipmap=0.0.0.0/0:192.168.1.10 --enet-smac=84:A5:C8:BB:58:1A
3. Обновите контрольную сумму каждого пакета:
$ tcprewrite --infile=temp2.pcap --outfile=final.pcap --fixcsum
Приведенная выше команда пересчитывает контрольную сумму IP каждого пакета. Этот шаг необходим, если вы перезаписали какие-либо исходные/целевые IP-адреса.
После того, как вы закончите переписывать пакеты, вы можете продолжить и воспроизвести окончательный дамп пакетов следующим образом.
$ sudo tcpreplay --intf1=eth0 final.pcap
Настройте параметры воспроизведения трафика
Команда tcpreplay
предлагает различные параметры для настройки параметров воспроизведения (например, скорость, продолжительность, производительность).
Чтобы просмотреть файл pcap
100 раз:
$ sudo tcpreplay --loop=100 --intf1=eth0 final.pcap
Чтобы кэшировать файл pcap
в ОЗУ после первого раза, чтобы последующие циклы не приводили к задержке дискового ввода-вывода:
$ sudo tcpreplay --loop=100 --enable-file-cache --intf1=eth0 final.pcap
Чтобы воспроизвести трафик в пять раз быстрее, чем был захвачен исходный трафик:
$ sudo tcpreplay --multiplier=5.0 --intf1=eth0 final.pcap
Для воспроизведения трафика со скоростью 10 Мбит/с:
$ sudo tcpreplay --mbps=10.0 --intf1=eth0 final.pcap
Чтобы воспроизвести трафик со скоростью 100 пакетов в секунду:
$ sudo tcpreplay --pps=100 --intf1=eth0 final.pcap
Чтобы воспроизвести трафик в бесконечных циклах или до тех пор, пока не будет нажата клавиша Ctrl-c
:
$ sudo tcpreplay --loop=0 --intf1=eth0 final.pcap
Чтобы воспроизвести трафик как можно быстрее:
$ sudo tcpreplay --topspeed --intf1=eth0 final.pcap
Краткое содержание
В этом руководстве я продемонстрировал, как систематически изменять трассировки пакетов с помощью tcprewrite
и внедрять их в сеть с помощью tcpreplay
. В сочетании с другими инструментами для манипулирования pcap
они дадут вам эффективное средство для тестирования различных сетей и устранения неполадок в более контролируемой среде.