[[tssltd:мксз_diamond_next|Вернуться к оглавлению]]
==== Общая информация ====
Устройство МКСЗ «Diamond Next» поддерживает возможность захватывать сетевой трафик для дальнейшего анализа. Данный механизм позволяет проанализировать сетевые пакеты и их заголовки. Захват и анализ сетевого трафика можно осуществить в двух режимах: **raw-режим**, **pcap-режим**.
*** Raw-режим:** Данный режим позволяет захватить сетевой пакет и предоставить информацию не только о всех полях и заголовках, но также и о движении сетевого пакета между сетевыми механизмами устройства. Данный режим осуществляет захват сетевого трафика со всех интерфейсов одновременно. Результаты работы можно сохранить в текстовом формате.
*** Pcap-режим:** Данный режим позволяет захватить сетевой пакет и предоставить информацию аналогично утилите tcpdump. Сетевой трафик можно захватывать на различных сетевых интерфейсах и записывать результаты работы в формате pcap файла. В pcap-режиме не поддерживается возможность онлайн вывода результатов работы механизма и недоступна фильтрации сетевого трафика по различным параметрам.
==== Режим захвате RAW ====
Для захвата сетевого трафик на физическом интерфейсе необходимо подключиться подключиться к устройству по протоколу ssh. Далее необходимо перейти в режим конфигурации на уровне “**data plane**” с помощью команды “**vppctl**”.
Необходимо выбрать один из сетевых интерфейсов, на котором требуется осуществить захват сетевого трафика. Перечень доступных сетевых интерфейсов на устройстве можно посмотреть либо через web интерфейс в разделе "Статус - Сетевые интерфейсы", либо в режиме конфигурации на уровне “**data plane**” с помощью команды "**sh interface**".
Для захвата сетевого трафика необходимо использовать команду "trace add dpdk-input ".
# vppctl
vpp# trace add dpdk-input 1000 <----- 1000 Количество сетевых пакетов
Для просмотра результата необходимо выполнить команду "show trace". В представленном ниже примере показаны сетевые пакет 16 и 17. Для каждого из сетевых пакетов зафиксированы узлы, в которых происходила их обработка, все поля и заголовки, а также результат обработки сетевого пакета.
Packet 16
01:16:54:208566: dpdk-input
GigabitEtherneta/0/0 rx queue 0
buffer 0x2cff11: current data 0, length 70, buffer-pool 0, ref-count 1, trace handle 0x100000f
ext-hdr-valid
PKT MBUF: port 6, nb_segs 1, pkt_len 70
buf_len 9328, data_len 70, ol_flags 0x182, data_off 128, phys_addr 0xd33fc4c0
packet_type 0x111 l2_len 0 l3_len 0 outer_l2_len 0 outer_l3_len 0
rss 0x94cebe20 fdir.hi 0x0 fdir.lo 0x94cebe20
Packet Offload Flags
PKT_RX_IP_CKSUM_GOOD (0x0080) IP cksum of RX pkt. is valid
PKT_RX_L4_CKSUM_GOOD (0x0100) L4 cksum of RX pkt. is valid
PKT_RX_RSS_HASH (0x0002) RX packet with RSS hash result
Packet Types
RTE_PTYPE_L2_ETHER (0x0001) Ethernet packet
RTE_PTYPE_L3_IPV4 (0x0010) IPv4 packet without extension headers
RTE_PTYPE_L4_TCP (0x0100) TCP packet
IP4: 6c:9c:ed:7f:d3:48 -> 00:90:0b:63:26:f3 802.1q vlan 480
TCP: 81.177.120.83 -> 194.135.68.242
tos 0x20, ttl 52, length 52, checksum 0xa325 dscp CS1 ecn NON_ECN
fragment id 0xd200, flags DONT_FRAGMENT
TCP: 50706 -> 443
seq. 0xad1c6b3b ack 0x19461f07
flags 0x10 ACK, tcp header: 32 bytes
window 360, checksum 0x6aff
01:16:54:208567: ethernet-input
frame: flags 0x3, hw-if-index 7, sw-if-index 7
IP4: 6c:9c:ed:7f:d3:48 -> 00:90:0b:63:26:f3 802.1q vlan 480
01:16:54:208568: l2-input
l2-input: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 [l2-input-feat-arc l2-learn l2-fwd l2-flood l2-flood ]
01:16:54:208568: l2-input-feat-arc
IN-FEAT-ARC: head 1 feature_bitmap 82a5 ethertype 800 sw_if_index 7, next_index 15
01:16:54:208568: acl-plugin-in-ip4-l2
acl-plugin: lc_index: 0, sw_if_index 7, next index 1, action: 1, match: acl 0 rule 0 trace_bits 00000000
ct session_index -1 thread_index 65535 error NONE pkt info 0000000000000000 0000000000000000 0000000000000000 f24487c25378b151 0007010601bbc612 0310ffff00000000
lc_index 0 l3 ip4 81.177.120.83 -> 194.135.68.242 l4 lsb_of_sw_if_index 7 proto 6 l4_is_input 1 l4_slow_path 0 l4_flags 0x01 port 50706 -> 443 tcp flags (valid) 10 rsvd 0
01:16:54:208579: l2-input-feat-arc-end
IN-FEAT-ARC: head 0 feature_bitmap 2a5 ethertype 0 sw_if_index -1, next_index 7
01:16:54:208579: l2-learn
l2-learn: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 bd_index 1
01:16:54:208579: l2-fwd
l2-fwd: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 bd_index 1 result [0xb180000000007, 7] none
01:16:54:208580: error-drop
rx:GigabitEtherneta/0/0
01:16:54:208580: drop
l2-fwd: Reflection Drop
Packet 17
01:16:54:209266: dpdk-input
GigabitEtherneta/0/0 rx queue 0
buffer 0x2b73df: current data 0, length 138, buffer-pool 0, ref-count 1, trace handle 0x1000010
ext-hdr-valid
PKT MBUF: port 6, nb_segs 1, pkt_len 138
buf_len 9328, data_len 138, ol_flags 0x182, data_off 128, phys_addr 0xd39cf840
packet_type 0x111 l2_len 0 l3_len 0 outer_l2_len 0 outer_l3_len 0
rss 0x49de519a fdir.hi 0x0 fdir.lo 0x49de519a
Packet Offload Flags
PKT_RX_IP_CKSUM_GOOD (0x0080) IP cksum of RX pkt. is valid
PKT_RX_L4_CKSUM_GOOD (0x0100) L4 cksum of RX pkt. is valid
PKT_RX_RSS_HASH (0x0002) RX packet with RSS hash result
Packet Types
RTE_PTYPE_L2_ETHER (0x0001) Ethernet packet
RTE_PTYPE_L3_IPV4 (0x0010) IPv4 packet without extension headers
RTE_PTYPE_L4_TCP (0x0100) TCP packet
IP4: 6c:9c:ed:7f:d3:48 -> 00:90:0b:63:26:f3 802.1q vlan 480
TCP: 46.138.254.34 -> 194.135.68.242
tos 0x00, ttl 122, length 120, checksum 0x61c7 dscp CS0 ecn NON_ECN
fragment id 0x6a92, flags DONT_FRAGMENT
TCP: 58270 -> 873
seq. 0x358e7882 ack 0x1e2c6d5b
flags 0x18 PSH ACK, tcp header: 20 bytes
window 2052, checksum 0x0bae
01:16:54:209267: ethernet-input
frame: flags 0x3, hw-if-index 7, sw-if-index 7
IP4: 6c:9c:ed:7f:d3:48 -> 00:90:0b:63:26:f3 802.1q vlan 480
01:16:54:209268: l2-input
l2-input: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 [l2-input-feat-arc l2-learn l2-fwd l2-flood l2-flood ]
01:16:54:209268: l2-input-feat-arc
IN-FEAT-ARC: head 1 feature_bitmap 82a5 ethertype 800 sw_if_index 7, next_index 15
01:16:54:209268: acl-plugin-in-ip4-l2
acl-plugin: lc_index: 0, sw_if_index 7, next index 1, action: 1, match: acl 0 rule 0 trace_bits 00000000
ct session_index -1 thread_index 65535 error NONE pkt info 0000000000000000 0000000000000000 0000000000000000 f24487c222fe8a2e 000701060369e39e 0318ffff00000000
lc_index 0 l3 ip4 46.138.254.34 -> 194.135.68.242 l4 lsb_of_sw_if_index 7 proto 6 l4_is_input 1 l4_slow_path 0 l4_flags 0x01 port 58270 -> 873 tcp flags (valid) 18 rsvd 0
01:16:54:209279: l2-input-feat-arc-end
IN-FEAT-ARC: head 0 feature_bitmap 2a5 ethertype 0 sw_if_index -1, next_index 7
01:16:54:209280: l2-learn
l2-learn: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 bd_index 1
01:16:54:209280: l2-fwd
l2-fwd: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 bd_index 1 result [0xb180000000007, 7] none
01:16:54:209280: error-drop
rx:GigabitEtherneta/0/0
01:16:54:209280: drop
l2-fwd: Reflection Drop
Данный механизм использует буфер для сохранения результатов работы. Чтобы очистить буфер от старых данных и начать новый захват необходимо выполнить команду "**clear trace**".
Для сохранения данных в текстовом формате, необходимо вернуть на уровень управления "**control-plane**" с помощью сочетания клавиш "**ctrl+c**" и выполнить команду "**vppctl show trace max 1000 > /media/storage/trace.log**". Результаты выполнения команды будут сохранены в файл "trace.log" в папке назначения "/media/storage/". Название файла и директорию назначения можно задать самостоятельно.
==== Режим захвате Pcap====
Для захвата сетевого трафик на сетевом интерфейсе необходимо подключиться подключиться к устройству по протоколу ssh. Далее необходимо перейти в режим конфигурации на уровне “**data plane**” с помощью команды “**vppctl**”.
Необходимо выбрать один из сетевых интерфейсов, на котором требуется осуществить захват сетевого трафика. Перечень доступных сетевых интерфейсов на устройстве можно посмотреть либо через web интерфейс в разделе "Статус - Сетевые интерфейсы", либо в режиме конфигурации на уровне “**data plane**” с помощью команды "**sh interface**".
Для захвата сетевого трафика необходимо использовать команду "**pcap trace [rx/tx] [on/off] [max_packet_count ] [intfc |any] [file ]**".
*** rx/tx** - направление сетевого трафика, который необходимо захватить;
*** on/off** - включить или выключить механизм захвата сетевого трафика;
*** max_packet_count** - количество сетевых пакетов, которые необходимо захватить;
*** intfc** - сетевой интерфейс, на котором необходимо осуществить захват сетевого трафика;
*** file** - имя файла, в который будут сохранены результаты в формате pcap.
В примере ниже осуществим захват 1000 пакетов на интерфейсе GigabitEtherneta/0/0 для направления rx. В процессе выполнения захвата сетевого трафика, есть возможность уточнить текущий статус с помощью команды "**pcap trace status**". Результаты выполнения сохраняются в директории "/tmp/".
# vppctl
vpp# pcap trace rx max 1000 intfc GigabitEtherneta/0/0 file trace.pcap
vpp# pcap trace status
pcap rx dispatch capture enabled: 1000 of 1000 pkts...
capture to file /tmp/trace.pcap
Для изменения параметров захвата необходимо остановить процесс с помощью команды "**pcap trace off**", после чего внести изменения и запустить механизм заново.
vpp# pcap trace rx max 1000 intfc GigabitEthernet4/0/0 file trace_2.pcap
vpp#
vpp# pcap trace status
pcap rx dispatch capture enabled: 138 of 1000 pkts...
capture to file /tmp/trace_2.pcap
vpp#
vpp# pcap trace rx off
pcap trace: 138 of 1000 pkts captured...
[[tssltd:мксз_diamond_next|Вернуться к оглавлению]]