Mon réseau d’entreprise
12.7 Capturer des paquets réseaux
La capture des paquets se fait en utilisant la librairie pcap (Packets CAPture. Après, la mise en forme des résultats dépend beaucoup du logiciel utilisé. Les trois premiers sont tcpdump, tshark et wireshark. Les deux derniers peuvent être considérés comme la version ligne de commande et la version graphique du même logiciel.
L’utilisation de wireshark est très rassurante, voire ludique. Elle permet d’aller très loin dans l’analyse des protocoles et des paquets. En général, cette interface est beaucoup trop lourde.
Les logiciels tshark et wireshark contiennent principalement deux parties : la capture et le rendu. La partie capture doit se faire avec des privilèges étendus, mais le rendu ne devrait pas être utilisé par l’administrateur. Lors de l’installation de tshark ou
wireshark ils recommandent d’utiliser ce mécanisme, ainsi que lors du lancement des applications.
Nous allons regarder tshark. Dans la vraie vie, le problème principal vient d’un paquet qui n’arrive pas. Il n’a pas été émis ou il prend une mauvaise direction. La capture réseau se fait alors sur l’interface de sortie pour voir le paquet sortir et sur l’interface d’entrée du serveur pour voir le paquet arriver. Éventuellement, si un routeur se trouve sur le chemin, alors il faut mettre une capture sur chaque interface du routeur (au moins sur les plus probables). Pour information, le routeur Thorin dispose de plus de trois cent interfaces.
Il est donc fréquent d’observer simultanément quatre, voire six ou plus interfaces. Il faut donc le même nombre de fenêtres. Il faut rajouter une fenêtre pour iniitier la connexion et voir les logs du serveurs. L(interface de wireshark est beaucoup trop grosse pour pouvoir être utilisée dans cet exemple.
12.7.1 Les filtres de capture
Dans un réseau en exploitation, il peut y avoir plusieurs millions de paquets dans une seconde, voire plus. Il faut donc limiter les paquets capturés. Pour cela, il est possible de filter le protocole utilisé, les ports utilisés, les soures ou destination par leurs adresses ip ou Ethernet.
Le logciel tcpdump est assez ancien, il a défini une syntaxe pour les captures assez simple. La syntaxe native de tshark est plus complète. tshark permet de choisir sa syntaxe.
Pour indiquer à tshark d’utiliser la syntaxe de tcpdump, il faut utiliser l’option -f suivi du filtre entre guillemets : comme suit :
# tcpdump host 139.124.244.38 and port 413 # tshark -f "host 139.124.244.38 and port 413"
12.7.2 Des chiffres ou des lettres ?
Les humains préfèrent souvent des lettres, ainsi nous préférons www.univ-amu.fr que 139.124.244.38. C’est vrai pour les adresses ip, mais c’est aussi vrai pour les numéros de port tcp ou udp. Ainsi, le port ssh peut remplacer le port 22.
En phase de débug, la conversion de chiffres en lettres apporte son lot de problèmes. Quand le logiciel de capture voit une adresse, il va essayer de la convertir. Il va donc effectuer une requète et attendre la réponse ou l’expiration du délai.Ceci génère du trafic réseau parasite et ralenti, éventuellement beaucoup l’affichage. La conversion peut générer des erreurs. Faire une requête sur le site www.univ-amu.fr et filter l’adresse IP peut permettre d’identifier le problème.
Pour ne pas afficher la conversion en noms, il faut activer l’option -n :
# tcpdump -n # tshark -n
Il est possible aussi d’utiliser l’enregistrement dans un fichier et de relire le fichier de capture :
# tcpdump -w /tmp/test.cap # tshark -r /tmp/test.cap
Le format de capture est le même entre les trois logiciels. La capture faite par un logiciel peut être relue par un autre.
Les requêtes réseaux pour résoudre auront lieu longtemps après la capture donc ne généreront pas de trafic capturé. Comme l’affichage ne se fait pas au moment de l’action les délai seront moins gênants.
12.7.3 Choisir son interface de capture
Les sniffers vont capturer sur une interface. Pour une station, par défaut, ce sera l’interface active. Quand plusieurs interfaces sont simultanément actives, alors le logiciel va en choisir une. Pas forcément celle souhaitée. Il faut donc pouvoir désigner son interface. La commande ip a va lister les interfaces, il faut identifier le nom souhaité et le fournir comme paramètre à l’option -i :
# tshark -i eno2
Les requins (t et wire) peuent capturer sur les interfaces réseau (loopback, Ethernet, WiFi, virtuelle) mais aussi sur :
-
• Bluetooth ;
-
• IrDA (Infra rouge)
-
• PPP ;
-
• USB (dont le DVB)
-
• VLAN Tags
et d’autres encore plus exotiques.
12.7.3.1 Filtrer une adresse
Pour filtrer une adresse IP, il faut utiliser son adresse ou son nom, s’il est résolu dans la bonne adresse. C’est plus facile, mais cela ajoute un élément d’incertitude.
Il est possible de filtrer les adresses sources ou destination.
# tcpdump host 10.30.3.1 # tcpdump src host 10.30.3.1 # tshark -f "dst host 10.30.3.1"
Et pour les adresses mac :
tshark -n -f "ether host 42:af:ro:ut:eu:r"
Pour afficher les adresses mac, il est possible de modifier l’affichage :
tshark -n -i enp0s31f6 -T fields -e ip.src -e eth.src -e ip.dst -e eth.dst | head 10.3.30.6 00:26:b9:77:69:f8 10.33.104.2 18:66:da:27:ae:e3 10.33.104.2 18:66:da:27:ae:e3 10.3.30.6 00:26:b9:77:69:f8 10.3.30.6 00:26:b9:77:69:f8 10.33.104.2 18:66:da:27:ae:e3 10.3.30.6 00:26:b9:77:69:f8 10.33.104.2 18:66:da:27:ae:e3 10.33.104.2 18:66:da:27:ae:e3 10.3.30.6 00:26:b9:77:69:f8
Et pour capturer tout le trafic multicast :
tshark -i any -n -Y "ip.dst==224.0.0.0/4"
Les connexions unicast sont aussi possibles. Il faut alors ajouter l’option unicast dans le fichier de configuration :
unicast=1
Puis pointer votre lecteur vidéo dessus :
vlc http://serveurmumu:4242/playlist.m3u
12.7.3.2 Filtrer une capture passée
Il est possible d’enregistrer la capture pour essayer après l’action de comprendre ce qui s’est passé. Prenons l’exemple d’un téléphone qui accepte l’appel, mais pendant l’appel aucun son n’est transmis. Nous allons voir comment tshark nous donne l’explication.
D’abord, il faut sur chacune des interfaces réseaux possibles (toutes les interfaces des routeurs, toutes les interfaces du serveur asterisk taper la commande permettant d’enregistrer les paquets.
tshark -n -w appel.cap
Il est aussi possible de filtrer un peu (attention de ne pas trop filtrer. Sur ce routeur, nous pouvons filtrer sur l’adresse du téléphone.
tshark -n -i enxd8eb97bf90b0 -f "host 10.22.1.22" -w appel.cap ... Capturing on 'enxd8eb97bf90b0' 555 ^C
La capture contient 555 paquets. tshark va nous permettre voir ce qui se passe, puis de limiter l’affichage.
=> tshark -n -r /tmp/appelYoda.cap | head
1 192.168.0.200 → 10.22.1.22 SIP/SDP 943 Request: INVITE
2 10.22.1.22 → 192.168.0.200 SIP 499 Status: 100 Trying |
3 10.22.1.22 → 10.22.1.1 Syslog 133 GXV3140:
SIPStack::cb_rcvreq: Received SIP request INVITE (0)
... /// 552 lignes /// ...
Le début de la capture montre de nombreux paquets Syslog qui permettent de suivre l’évolution du téléphone. Ce n’est pas cela qui va nous donner la solution aujourd’hui. Donc, il faut oublier ces messages.
# tshark -n -r /tmp/appelYoda.cap -Y "not udp.port==514 " | head
1 192.168.0.200 → 10.22.1.22 SIP/SDP 943 Request:
INVITE sip:gs1@10.22.1.22:10062 |
2 10.22.1.22 → 192.168.0.200 SIP 499 Status: 100 Trying |
21 10.22.1.22 → 192.168.0.200 SIP 578 Status: 180 Ringing |
85 10.22.1.22 → 192.168.0.200 SIP/SDP 813 Status: 200 OK |
88 192.168.0.200 → 10.22.1.22 SIP 463 Request:
ACK sip:gs1@10.22.1.22:10062 |
91 192.168.0.200 → 10.22.1.22 SIP/SDP 874 Request:
INVITE sip:gs1@10.22.1.22:10062, in-dialog |
92 10.22.1.22 → 192.168.0.200 SIP 551 Status: 100 Trying |
105 10.22.1.22 → 192.168.0.200 SIP/SDP 789 Status: 200 OK |
109 192.168.0.200 → 10.22.1.22 SIP 463 Request:
ACK sip:gs1@10.22.1.22:10062 |
181 10.22.1.22 → 212.27.52.130
RTP 214 PT=ITU-T G.711 PCMA,
SSRC=0x6329AA67, Seq=11249, Time=3301857394, Mark
Le début commence par des paquets sip. Le serveur asterisk (192.168.0.200) indique un appel au téléphone (10.22.1.22). Celui ci répond qu’il essaie et qu’il a déclenché la sonnerie (Ringing). Cela semble cohérent. Le paquet 181 contient la clef de l’enigme. Les paquets audio (protocole RTM, Codec G.711) sont transmis du téléphone vers le téléphone sip distant, conformémént au protocole sip. Mais le firewall bloque ce genre de connexions. L’appel a bien lieu, mais le flux audio est bloqué.
Les logiciels de capture nous permettent de comprendre ce qu’il se passe. Il est possible aussi d’apprendre la totalité des protocoles en jeu, apprendre la configuration complète d’Asterisk et le comportement du téléphone. Ce dernier point est malheureusement sujet à la documentation qui n’est pas toujours de grande qualité.
Obtenir le comportement désiré, « Je veux téléphoner ! », doit se traduire dans la modification d’un élément modifiable. Le firewall risque de ne pas être modifiable. Il faut donc soit modifier le comportement du téléphone, soit celui d’asterisk, soit les deux. Mais c’est dans une autre section.
12.7.3.3 Changer l’affichage
Le logiciel tshark permet de modifier l’affichage Précédent Suivant