Как я могу захватить трафик на коммутаторах Cisco IOS?

23

Для исследования проблемы взаимодействия клиента с сервером мне нужно захватить пакеты для анализа. Однако не разрешается устанавливать анализатор пакетов, такой как Wireshark или tcpdump, на клиент или сервер. Их клиент подключен к Catalyst 3560, а сервер - к коммутатору Catalyst 3750.

Могу ли я подключить свой ноутбук к порту коммутатора для захвата трафика с помощью анализатора пакетов моего ноутбука и как?

Стефан
источник
Я сделал тот же вопрос с автоответчиком для Brocade здесь: networkengineering.stackexchange.com/questions/672/… Кажется странным ... :)
Бенджамин А.
@BenjaminA. Большой! Спасибо за решение для Brocade и добавление ссылки здесь!
Стефан
Есть ли в сеансе конфигурация, которая позволила бы перехватывающему ПК / серверу по-прежнему получать IP от DHCP?
mickeyHR
Вам помог какой-нибудь ответ? Если это так, вы должны принять ответ, чтобы вопрос не появлялся вечно, ища ответ. Кроме того, вы можете предоставить и принять свой собственный ответ.
Рон Мопин

Ответы:

34

Порт коммутатора клиента или порт коммутатора сервера можно отслеживать. Третий порт коммутатора может быть настроен как зеркальный порт . Это означает, что этот зеркальный порт будет получать копии всех пакетов на соответствующем исходном порту, в то время как исходный трафик не будет затронут.

Например, на Catalyst 3560:

  1. Войдите в режим конфигурации:

    conf t
    
  2. Определите источник и установите номер сеанса:

    monitor session 1 source interface fa 0/24
    

    Здесь номер сеанса может быть от 1 до 66, вы также можете указать VLAN или канал Ethernet. Кроме того, возможны диапазоны fa 0/25 - 26интерфейсов и список интерфейсов, например fa 0/24,fa 0/26, если вы хотите контролировать несколько клиентов одновременно. Также, повторив команду, вы можете добавить порты или удалить с помощью no. Смешивание портов и VLAN невозможно в одном и том же сеансе, другое ограничение заключается в том, что вы не можете использовать порт назначения в качестве порта источника.

  3. Определите порт назначения:

    monitor session 1 destination interface gi 0/1
    

    Вы можете использовать обычный порт, но не VLAN. Как и выше, порт назначения не может быть портом источника: используемый здесь порт может быть либо портом источника, либо порта назначения, и только для одного сеанса. Опять же, вы можете указать несколько портов, как указано выше.

  4. Вы можете exitперейти в режим настройки и сохранить конфигурацию.

  5. Вы можете взглянуть на ваш определенный сеанс - здесь несколько портов, как показано выше:

    #show monitor session 1
    Session 1
    ---------
    Type                   : Local Session
    Source Ports           :
        Both               : Fa0/24,Fa0/25-26
    Destination Ports      : Fa0/48,Gi0/1
        Encapsulation      : Native
              Ingress      : Disabled
    

    Вы можете увидеть инкапсуляцию здесь - при желании вы можете установить ее replicateдля репликации метода инкапсуляции исходного интерфейса, например, добавив encapsulation replicateпосле исходного интерфейса. Кроме того, вы можете указать направление ( tx, rx, both), фильтр VLAN , и многое другое. В Ingress: Disabledсредства линии , что переключатель не будет принимать какую - либо рамки , представленную ей устройство захвата на порт назначения. Для получения более подробной информации, дополнительных ограничений и настроек по умолчанию обратитесь к справочнику команд IOS-версии вашего коммутатора.

После того как вы настроили порт источника и назначения, вы можете захватывать трафик, используя ноутбук, подключенный к порту назначения, например, с помощью Wireshark.

Количество исходных сеансов может быть ограничено, например, 3560 поддерживает максимум 2.

После захвата не забудьте удалить эту конфигурацию сеанса.

Стефан
источник
1
Вы можете оставить сеанс монитора на месте и просто отключить ссылку на сетевой карте вашего хост-монитора. Пакеты не будут перехвачены и отправлены по неработающей ссылке. На сервере Windows у меня есть две сетевые карты с одной под названием SPAN. Когда я не хочу, чтобы коммутатор выполнял захват служебных данных, я просто захожу в свойства сети и отключаю сетевой адаптер SPAN. (Обычно исходные порты меняются, но порт назначения остается тем же самым, поэтому я знаю, что в будущем я собираюсь зеркалировать на тот же хост назначения.)
generalnetworkerror
Чтобы отключить сеанс монитора, используйте# no monitor session 1
29.10.15
17

Если ваш трафик проходил через маршрутизатор, работающий под управлением Cisco IOS 12.4 (20) T или выше, другой возможностью является использование функции встроенного захвата пакетов.

Эта функция НЕ доступна на платформах коммутаторов, таких как 3560 или 3750.

Эта функция записывает и сохраняет небольшой файл PCAP на маршрутизаторе, который можно загрузить и проанализировать с помощью Wireshark.

Через несколько ссылок с подробными .

Майк Маротта
источник
7
... и именно поэтому прекрасно, когда люди публикуют, а затем отвечают на свои вопросы: потому что другим пользователям предлагается прыгнуть и добавить что-то новое. Милая.
Крейг Константин
Пока у нас это есть, ASA всегда имела эту функцию, используя команду захвата . Он был унаследован от PIX, который имел его с 6.2 года.
Джеймс Снерингер
5

Я хотел бы добавить ELAM в микс. ELAM поддерживается на PFC3 (6500, 7600).

Вам нужно включить «внутреннюю службу», но это достаточно безопасная функция для запуска, я хорошо ее применял в производственных сетях и еще ни разу не испытывал отрицательного воздействия.

По сути, ELAM показывает, что было отправлено для обработки поиска в PFC через DBUS (Data BUS) и что PFC выдало в качестве результата поиска в RBUS (Result BUS).

  1. покажите слот суперкара в элитном слоте DFC / PFC_SLOT_YOU_WANT_TO_LOOK
  2. покажите платиновый триггер elam dbus ipv4, если ip_sa = 192.0.2.1
  3. покажите платиновый колпачок
  4. показать данные о крышке

Для триггеров есть онлайн-справка, IP_SA == IP Source Address, IP_DA == IP Destination Address, доступно много других. Если то, что вы хотите проверить, недоступно, вы можете выполнить сопоставление данных + маски для произвольных данных на первых 64B.
Произвольный триггер немного неудобен, но может быть более безопасным, вы будете использовать его так:

показывать захват платформы elam триггер dbus другие, если data = DATA1 DATA2 DATAn [MASK1 MASK2 MASKn]

Данные начинаются с DMAC. Допустим, мы хотим перехватить входящий стек MPLS [0 1951], но нам не нужны MAC-адреса, мы могли бы сделать это:

показывать триггер elam триггера dbus другие, если data = 0 0 0 0x88470000 0x00000079 0xF0000000 [0 0 0 0xffffffff 0xf000ffff 0xf0000000]


Пример вывода может быть:

7600#show platform capture elam data
DBUS data:
SEQ_NUM                          [5] = 0x1D
QOS                              [3] = 1
QOS_TYPE                         [1] = 0
TYPE                             [4] = 0 [ETHERNET]
STATUS_BPDU                      [1] = 0
IPO                              [1] = 1
NO_ESTBLS                        [1] = 0
RBH                              [3] = b000   ! port-channel hash
CR                               [1] = 1      ! recirculated
TRUSTED                          [1] = 1
NOTIFY_IL                        [1] = 0
NOTIFY_NL                        [1] = 0
DISABLE_NL                       [1] = 0
DISABLE_IL                       [1] = 0
DONT_FWD                         [1] = 0
INDEX_DIRECT                     [1] = 0
DONT_LEARN                       [1] = 0
COND_LEARN                       [1] = 0
BUNDLE_BYPASS                    [1] = 0
QOS_TIC                          [1] = 1
INBAND                           [1] = 0
IGNORE_QOSO                      [1] = 0
IGNORE_QOSI                      [1] = 0
IGNORE_ACLO                      [1] = 0
IGNORE_ACLI                      [1] = 0
PORT_QOS                         [1] = 0
CACHE_CNTRL                      [2] = 0 [NORMAL]
VLAN                             [12] = 4086
SRC_FLOOD                        [1] = 0
SRC_INDEX                        [19] = 0xC0          ! divmod64(0xc0) = 3,0, add 1 to each, 4/1 == our physical port
LEN                              [16] = 102
FORMAT                           [2] = 0 [IP]
MPLS_EXP                         [3] = 0x0
REC                              [1] = 0
NO_STATS                         [1] = 0
VPN_INDEX                        [10] = 0x7F
PACKET_TYPE                      [3] = 0 [ETHERNET]
L3_PROTOCOL                      [4] = 0 [IPV4]
L3_PT                            [8] = 1 [ICMP]
MPLS_TTL                         [8] = 0
SRC_XTAG                         [4] = 0xF
DEST_XTAG                        [4] = 0xA
FF                               [1] = 0
MN                               [1] = 0
RF                               [1] = 1
SC                               [1] = 0
CARD_TYPE                        [4] = 0x0
DMAC                             = 8843.e1de.22c0
SMAC                             = 0000.0000.0000
IPVER                            [1] = 0 [IPV4]
IP_DF                            [1] = 1
IP_MF                            [1] = 0
IP_HDR_LEN                       [4] = 5
IP_TOS                           [8] = 0x0
IP_LEN                           [16] = 84
IP_HDR_VALID                     [1] = 1
IP_CHKSUM_VALID                  [1] = 1
IP_L4HDR_VALID                   [1] = 1
IP_OFFSET                        [13] = 0
IP_TTL                           [8] = 63
IP_CHKSUM                        [16] = 0xBCF1
IP_SA                            = x.x.x       ! to protect the guilty
IP_DA                            = y.y.y.y     ! to protect the guilty
ICMP_TYPE                        [8] = 0x8
ICMP_CODE                        [8] = 0x0
ICMP_DATA [104]
0000:  A0 8B 18 A5 00 39 46 35 BF 51 00 6F 3C            ".....9F5.Q.o<"
CRC                              [16] = 0x71B3

RBUS data:
SEQ_NUM                          [5] = 0x1D
CCC                              [3] = b100 [L3_RW]  ! normal L3_RW, we know it was not dropped, L2/mls policed etc
CAP1                             [1] = 0
CAP2                             [1] = 0
QOS                              [3] = 0
EGRESS                           [1] = 0
DT                               [1] = 0 [IP]
TL                               [1] = 0 [B32]
FLOOD                            [1] = 1
DEST_INDEX                       [19] = 0x3E8    ! same as VLAN, but not always    
VLAN                             [12] = 1000     ! you may need to check internal vlan     
RBH                              [3] = b111      ! again, port-channel hash
RDT                              [1] = 0
GENERIC                          [1] = 0
EXTRA_CICLE                      [1] = 0
FABRIC_PRIO                      [1] = 0
L2                               [1] = 0
FCS1                             [8] = 0x1
IP_TOS_VALID                     [1] = 1
IP_TOS_OFS                       [7] = 15
IP_TOS                           [8] = 0x0
IP_TTL_VALID                     [1] = 1
IP_TTL_OFS                       [7] = 22
IP_TTL                           [8] = 62
IP_CSUM_VALID                    [1] = 1
IP_CSUM_OFS                      [7] = 24
IP_CSUM                          [16] = 0xBDF1
DELTA_LEN                        [8] = 0
REWRITE_INFO
 i0  - replace bytes from ofs 0 to ofs 11 with seq 'D0 D0 FD 09 34 2D 88 43 E1 DE 22 C0'.   ! this is the actual L2 rewrite data, so you should obviously see DMAC and SMAC here 
FCS2                             [8] = 0x0
7600#

Практически все более крупные платформы имеют этот тип низкоуровневых перехватов для транзитных пакетов, которые исключительно полезны, когда вам нужно убедиться, что HW выполняет то, что говорит конфигурация, иногда возникают программные дефекты, и они делают что-то иное, чем ожидалось.
Я знаю, что в GSR вы можете видеть транзит в памяти, в Juniper Trio также есть неплохой инструмент для этого. Парча может это сделать. Это довольно странно, что они не задокументированы на страницах поставщиков.

ytti
источник