Comment puis-je capturer le trafic sur les commutateurs Cisco IOS?

23

Pour enquêter sur un problème de communication client-serveur, j'ai besoin de capturer des paquets pour analyse. Cependant, il n'est pas autorisé d'installer un analyseur de paquets, tel que Wireshark ou tcpdump, sur le client ou le serveur. Le client est connecté à un Catalyst 3560 et le serveur à un commutateur Catalyst 3750.

Puis-je connecter mon ordinateur portable à un port de commutation pour capturer le trafic avec l'analyseur de paquets de mon ordinateur portable, et comment?

Stefan
la source
J'ai fait la même question d'auto-réponse pour Brocade ici: networkengineering.stackexchange.com/questions/672/… Ça fait un peu bizarre ... :)
Benjamin A.
@BenjaminA. Génial! Merci pour la solution pour Brocade et pour l'ajout du lien ici!
Stefan
Existe-t-il une configuration sur la session qui permettrait au PC / serveur de capture de toujours opter pour IP à partir de DHCP?
mickeyHR
Une réponse vous a-t-elle aidé? Si c'est le cas, vous devez accepter la réponse afin que la question ne s'affiche pas indéfiniment, à la recherche d'une réponse. Alternativement, vous pouvez fournir et accepter votre propre réponse.
Ron Maupin

Réponses:

34

Le port de commutation client ou le port de commutation serveur peut être surveillé. Un troisième port de commutation peut être configuré comme un port miroir . Cela signifie que ce port miroir recevra des copies de tous les paquets sur le port d'origine correspondant, tandis que le trafic d'origine ne sera pas affecté.

Par exemple, sur le Catalyst 3560:

  1. Entrez en mode de configuration:

    conf t
    
  2. Définissez la source et définissez le numéro de session:

    monitor session 1 source interface fa 0/24
    

    Ici, le numéro de session peut être compris entre 1 et 66, vous pouvez également spécifier un VLAN ou un canal Ethernet. En outre, des plages d'interface telles que fa 0/25 - 26possibles et une liste d'interfaces, telle que fa 0/24,fa 0/26, si vous souhaitez surveiller plusieurs clients en même temps. En répétant également la commande, vous pouvez ajouter des ports ou les supprimer à l'aide de no. Le mélange des ports et des VLAN n'est pas possible dans la même session, une autre restriction est que vous ne pouvez pas utiliser un port de destination comme port source.

  3. Définissez le port de destination:

    monitor session 1 destination interface gi 0/1
    

    Vous pouvez utiliser un port normal, mais pas un VLAN. De la même manière que ci-dessus, un port de destination ne peut pas être un port source: un port utilisé ici peut être soit un port source soit un port de destination, et seulement d'une session. Encore une fois, vous pouvez spécifier plusieurs ports comme ci-dessus.

  4. Vous souhaiterez peut- exitêtre le mode de configuration et enregistrer la configuration.

  5. Vous pouvez jeter un œil à votre session définie - ici plusieurs ports, essayés comme ci-dessus:

    #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
    

    Vous pouvez voir une encapsulation ici - vous pouvez éventuellement la définir replicatepour répliquer la méthode d'encapsulation de l'interface source, par exemple en l'ajoutant encapsulation replicateaprès l'interface source. De plus, vous pouvez spécifier une direction ( tx, rx, both), VLANs filtre et plus. La Ingress: Disabledligne signifie que le commutateur n'acceptera aucune trame qui lui sera présentée par votre périphérique de capture sur un port de destination. Pour ces détails plus fins et pour d'autres restrictions et paramètres par défaut, consultez la référence de commande de la version IOS de votre commutateur.

Une fois que vous avez configuré le port source et de destination, vous pouvez capturer le trafic à l'aide de votre ordinateur portable connecté au port de destination, par exemple avec Wireshark.

Le nombre de sessions source peut être limité, par exemple le 3560 prend en charge un maximum de 2.

Après la capture, n'oubliez pas de supprimer cette configuration de session.

Stefan
la source
1
Vous pouvez laisser la session du moniteur en place et désactiver simplement le lien sur la carte réseau de votre moniteur hôte. Les paquets ne seront pas capturés et envoyés sur un lien en panne. Sur un serveur Windows, j'ai deux cartes réseau avec une appelée SPAN. Lorsque je ne veux pas que le commutateur effectue la surcharge de capture, je vais simplement dans les propriétés du réseau et j'ai désactivé la carte réseau SPAN. (Habituellement, les ports source sont modifiés, mais le port de destination reste le même, donc je sais que je vais à nouveau refléter vers le même hôte de destination à l'avenir.)
generalnetworkerror
Pour désactiver une session de moniteur, utilisez# no monitor session 1
wimh
17

Si votre trafic passait par un routeur exécutant Cisco IOS 12.4 (20) T ou supérieur, une autre possibilité consiste à utiliser la fonction Embedded Packet Capture.

Cette fonctionnalité n'est PAS disponible sur les plates-formes de commutation comme le 3560 ou 3750.

Cette fonctionnalité permet de capturer et d'enregistrer un petit fichier PCAP sur le routeur que vous pouvez télécharger et analyser avec Wireshark.

A quelques liens avec les détails .

Mike Marotta
la source
7
... et c'est exactement pourquoi il est très bien quand les gens publient, puis répondent à leurs propres questions: parce que les autres utilisateurs sont invités à entrer et à ajouter quelque chose de nouveau. Doux.
Craig Constantine
Pendant que nous y sommes, l'ASA a toujours eu cette fonctionnalité, en utilisant la commande de capture . Il a été hérité du PIX, qui l'a depuis 6.2.
James Sneeringer
5

Je voudrais ajouter ELAM dans le mix. ELAM est pris en charge sur PFC3 (6500, 7600).

Vous devez activer le service interne, mais c'est une fonctionnalité assez sûre à exécuter, je l'ai beaucoup utilisée dans les réseaux de production et je n'ai pas encore subi d'impact négatif.

Essentiellement, ce que fait ELAM, c'est qu'il vous montre ce qui a été envoyé pour le traitement de recherche à PFC via DBUS (Data BUS) et ce que le PFC a donné comme résultat de recherche dans RBUS (Résultat BUS).

  1. show plat cap elam asic superman slot DFC / PFC_SLOT_YOU_WANT_TO_LOOK
  2. show plat cap elam trigger dbus ipv4 if ip_sa = 192.0.2.1
  3. show plat cap elam start
  4. afficher les données plat cap elam

Pour les déclencheurs, il existe une aide en ligne, IP_SA == IP Source Address, IP_DA == IP Destination Address, beaucoup d'autres sont disponibles. SI ce que vous voulez vérifier n'est pas disponible, vous pouvez faire correspondre les données et le masque pour les données arbitraires sur le premier 64B.
Le déclencheur arbitraire est un peu gênant mais peut être plus sûr, vous l'utiliserez comme ceci:

show platform capture elam trigger dbus others if data = DATA1 DATA2 DATAn [MASK1 MASK2 MASKn]

Les données commencent à partir de DMAC. Disons que nous voulons attraper la pile MPLS entrante de [0 1951], mais nous ne nous soucions pas des adresses MAC, nous pouvons le faire:

show platform capture elam trigger dbus others if data = 0 0 0 0x88470000 0x00000079 0xF0000000 [0 0 0 0xffffffff 0xf000ffff 0xf0000000]


Un exemple de sortie peut être:

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#

Presque toutes les grandes plates-formes ont ce type de captures de bas niveau pour les paquets de transit, qui sont exceptionnellement utiles lorsque vous devez vérifier que HW fait ce que la configuration dit, parfois il y a des défauts logiciels et il fait autre chose que prévu.
Je sais que dans GSR, vous pouvez voir le transit en mémoire, dans Juniper Trio, il y a aussi un outil assez sympa. Brocade peut le faire. C'est assez déroutant, ils ne sont pas documentés dans les pages des fournisseurs.

ytti
la source