Como posso capturar o tráfego nos switches Cisco IOS?

23

Para investigar um problema na comunicação cliente para servidor, preciso capturar pacotes para análise. No entanto, não é permitido instalar um analisador de pacotes, como Wireshark ou tcpdump, no cliente ou servidor. O cliente está conectado a um Catalyst 3560 e o servidor a um switch Catalyst 3750.

Posso conectar meu laptop a uma porta de comutação para capturar tráfego com o analisador de pacotes do meu laptop e como?

Stefan
fonte
Eu fiz a mesma pergunta de auto-atendimento para Brocade aqui: networkengineering.stackexchange.com/questions/672/... se sente meio estranho ... :)
Benjamin A.
@BenjaminA. Ótimo! Obrigado pela solução para Brocade e adicionando o link aqui!
Stefan
Existe uma configuração na sessão que permita ao PC / servidor de captura ainda obter o IP do DHCP?
MickeyHR
Alguma resposta o ajudou? Nesse caso, você deve aceitar a resposta para que a pergunta não apareça para sempre, procurando uma resposta. Como alternativa, você pode fornecer e aceitar sua própria resposta.
Ron Maupin

Respostas:

34

O switchport do cliente ou o switchport do servidor podem ser monitorados. Uma terceira porta de switch pode ser configurada como uma porta de espelho . Isso significa que essa porta de espelho receberá cópias de todos os pacotes na porta original correspondente, enquanto o tráfego original não será afetado.

Por exemplo, no Catalyst 3560:

  1. Entre no modo de configuração:

    conf t
    
  2. Defina a fonte e defina o número da sessão:

    monitor session 1 source interface fa 0/24
    

    Aqui, o número da sessão pode ser de 1 a 66, você também pode especificar uma VLAN ou um canal Ethernet. Além disso, intervalos de interface como fa 0/25 - 26são possíveis e lista de interfaces, como fa 0/24,fa 0/26, se você deseja monitorar vários clientes ao mesmo tempo. Além disso, repetindo o comando, você pode adicionar portas ou remover usando no. A mistura de portas e VLANs não é possível na mesma sessão, outra restrição é que você não pode usar uma porta de destino como porta de origem.

  3. Defina a porta de destino:

    monitor session 1 destination interface gi 0/1
    

    Você pode usar uma porta normal, mas não uma VLAN. Da mesma forma que acima, uma porta de destino não pode ser uma porta de origem: uma porta usada aqui pode ser uma porta de origem ou de destino e apenas de uma sessão. Novamente, você pode especificar várias portas como acima.

  4. Você pode querer o exitmodo de configuração e salvar a configuração.

  5. Você pode dar uma olhada na sua sessão definida - aqui várias portas, tentadas como acima:

    #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
    

    Você pode ver um encapsulamento aqui - opcionalmente, pode configurá-lo replicatepara replicar o método de encapsulamento da interface de origem, como adicionar encapsulation replicateapós a interface de origem. Além disso, você pode especificar uma direção ( tx, rx, both), VLANs de filtro e muito mais. A Ingress: Disabledlinha significa que o switch não aceitará nenhum quadro apresentado pelo dispositivo de captura em uma porta de destino. Para obter detalhes mais detalhados e outras restrições e configurações padrão, consulte a referência de comando da versão IOS do seu switch.

Depois de configurar a porta de origem e destino, você pode capturar o tráfego usando o laptop conectado à porta de destino, por exemplo, com o Wireshark.

O número de sessões de origem pode ser limitado, por exemplo, o 3560 suporta no máximo 2.

Após a captura, não esqueça de remover esta configuração de sessão.

Stefan
fonte
1
Você pode deixar a sessão do monitor no lugar e apenas desativar o link na NIC do monitor host. Os pacotes não serão capturados e enviados para um link inoperante. Em um servidor Windows, tenho duas NICs com uma chamada SPAN. Quando não quero que o switch faça a sobrecarga de captura, basta acessar as propriedades da rede e desabilitar a NIC de SPAN. (Normalmente, as portas de origem são alterados, mas as estadias de porta de destino da mesma, então eu sei que estou indo para espelhar novamente para o mesmo host de destino no futuro.)
generalnetworkerror
Para desativar uma sessão de monitor, use# no monitor session 1
wimh
17

Se seu tráfego estava passando por um roteador executando o Cisco IOS 12.4 (20) T ou superior, outra possibilidade é usar o recurso Embedded Packet Capture.

Esse recurso NÃO está disponível em plataformas de switch como o 3560 ou o 3750.

O que esse recurso faz é capturar e salvar um pequeno arquivo PCAP no roteador que você pode baixar e analisar com o Wireshark.

A poucas ligações com detalhes .

Mike Marotta
fonte
7
... e é exatamente por isso que é bom quando as pessoas postam e respondem a suas próprias perguntas: porque outros usuários são solicitados a entrar e adicionar algo novo. Doce.
Craig Constantine
Enquanto estamos nisso, o ASA sempre teve esse recurso, usando o comando capture . Foi herdado do PIX, que o possuía a partir do 6.2.
James Sneeringer
5

Eu gostaria de adicionar o ELAM na mistura. O ELAM é suportado no PFC3 (6500, 7600).

Você precisa ter o 'serviço interno' ativado, mas é um recurso bastante seguro para executar, eu executei bastante nas redes de produção e ainda não tive um impacto negativo.

Essencialmente, o que o ELAM faz é mostrar o que foi enviado para o processamento da pesquisa no PFC via DBUS (Data BUS) e o que o PFC forneceu como resultado da pesquisa no RBUS (Result BUS).

  1. mostre o slot DFC / PFC_SLOT_YOU_WANT_TO_LOOK do elam asic
  2. mostre o dbus ipv4 do disparador do elam do tampão da plat se ip_sa = 192.0.2.1
  3. mostre o começo do elam do tampão de plat
  4. mostre dados do elam do tampão de plat

Para os gatilhos, existe ajuda on-line, IP_SA == Endereço de origem IP, IP_DA == Endereço de destino IP, muitos outros estão disponíveis. Se o que você deseja verificar não estiver disponível, você poderá fazer a correspondência de dados + máscara para dados arbitrários nos primeiros 64B.
O gatilho arbitrário é um pouco estranho, mas pode ser mais seguro, você o usará assim:

mostre o disparador do elam da captura da plataforma outros dbus se dados = DATA1 DATA2 DATAn [MASK1 MASK2 MASKn]

Os dados iniciam no DMAC. Digamos que queremos pegar a pilha MPLS de entrada de [0 1951], mas não nos importamos com endereços MAC, poderíamos fazer isso:

mostre o outro dbus do disparador do elam da captura da plataforma se dados = 0 0 0 0x88470000 0x00000079 0xF0000000 [0 0 0 0xffffffff 0xf000ffff 0xf0000000]


A saída de exemplo pode ser:

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#

Praticamente todas as plataformas maiores têm esse tipo de captura de baixo nível para pacotes de trânsito, que são excepcionalmente úteis quando você precisa verificar se o HW está fazendo o que diz a configuração, às vezes há defeitos de software e faz algo além do esperado.
Eu sei que no GSR você pode ver o trânsito na memória, no Juniper Trio também há uma ferramenta muito boa. Brocade pode fazer isso. É bastante desconcertante que eles não estejam documentados nas páginas dos fornecedores.

ytti
fonte