Détecter et suivre un problème TCP/IP (partie 2) Résumé 4D Notes
Transcription
Détecter et suivre un problème TCP/IP (partie 2) Résumé 4D Notes
Détecter et suivre un problème TCP/IP (partie 2) Par David ADAMS Note technique 4D-200308-24-FR Version 1 Date 1 Août 2003 Résumé Le débogueur est un fabuleux outil pour traquer les problèmes au sein de votre code 4D. Pourtant, dès lors que vous aurez à communiquer avec divers programmes ou autres machines à travers les couches de TCP/IP, il se révélera insuffisant. Vous aurez besoin de nouveaux outils et de technique pour déboguer sur le réseau. Voici quelques cas pour lesquels il vous faudra plus qu’un simple débogueur : - Les Web Services - Les fonctionnalités Web de 4D - Les solutions qui intègrent 4D et d’autres serveurs Web dont IIS et WebSTAR. - Les utilisations particulières de TCP/IP pour le courrier électronique, le FTP ou d’autres usages. - 4D Serveur et les problèmes de connexion des clients ou des baisses de performances. 4D Notes techniques Copyright © 1985-2004 4D SA - Tous droits réservés Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible. Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte. L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers. Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SA. La fourniture d u logiciel décrit dans ce document est régie par u n octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support d u Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés o u reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence. Aucune partie de ce document ne peut être reproduite o u recopiée de quelque manière que ce soit, électronique o u mécanique, y compris par photocopie, enregistrement, archivage o u tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA. 4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques enregistrées de 4D SA. Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation. Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées o u des noms commerciaux de Apple Computer,Inc. Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc. 4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA. XTND Copyright 1992-2002 © 4D SA. Tous droits réservés. XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc. 1 / 15 Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs. 2 / 15 Détecter et suivre une panne TCPIP (partie 2) Programmes et commandes utiles Apple et les développeurs tiers fournissent ou commercialisent de multiples réalisations de GUI (Graphical User Interface : Interface Utilisateur Graphique) pour utilitaires réseaux. Aucun outil ne remplit toutes les fonctions, aussi il est intéressant de tester et rassembler une panoplie de programmes figurant ou non dans la liste ci-dessous. Nous commenterons l'utilisation de plusieurs de ces outils dans la suite de cette note. Programme Brick-house Ethereal Type Aqua GUI X11 GUI compilation et X11 EtherPeek Aqua GUI Interarchy Aqua GUI IPNetMonitorX Aqua GUI iStumbler Jwhois Aqua GUI Commande Links Commande Locator Aqua GUI Lynx Commande Aqua GUI Aqua GUI MacSniffer ManOpen Objectif Interface au firewall ipfw Programme sophistiqué de capture et d'analyse de paquet. Pré-requis : Prix $US 25 Gratuit URL http://personalpages.tds.net/ ~brian_hill/brickhouse.html http://fink.sourceforge.net/pdb package.php/ethereal http://www.ethereal.com/ Programme sophistiqué de capture et d'analyse de paquet. Client FTP Téléchargement web Surveillance de trafic TCP nsloopup ping traceroute Intégration de nombreux utilitaires réseaux : finger icmp trace nslookup ping traceroute whois Découverte de réseaux Airport Amélioration de whois client Nécessite une compilation Navigateur en ligne de commende, supporte les tableaux. Compilation préalable interface graphique de la commande Locate. Navigateur en ligne de commande GUI pour tcpdump $US 1200 http://www.wildpackets.com /products $US 45 Htttp://www.interarchy.com/ $US 40 http://www.sustworks.com/ site/prod_ipmx_overview .html GUI pour man et apropos Gratuit http://homepage.mac.com/ alfwatt/istumbler/index.html Gratuit http://www.gnu.org/ software/jwhois Gratuit http://fink.sourceforge.net/ pdb/package.php/links http://artax.karlin.mff.cuni.cz/ ~mikulas/links/ Gratuit http://www.sebastiankrauss.de /software/ Gratuit http://www.osxgnu.org/ software/Networking/lynx/ Gratuit http://personalpages.tds.net/ ~brian_hill/macsniffer.html Gratuit http://www.clindberg.org/ projects/ManOpen.html 3 / 15 Mtr Commande Pseudo Aqua GUI Aqua GUI Simple Port Forwarder Tcpflow Commande Combine et améliore ping et traceroute Compilation requise GUI pour sudo GUI pour configurer ipfw et les règles de reroutage de port Capture de trafic orienté flux Gratuit http://www.clindberg.org/ projects/ManOPen.html $US http://personalpages.tds.net/ 15 ~brian_hill/pseudo.html Gratuit http://hdind.com/4dresources/ Gratuit http://www.circlemud.org/ ~jelson/software/tcpflow/ Présentation Lorsque deux programmes ne peuvent communiquer au travers d'un réseau il y a un nombre important de causes possibles parmi lesquelles il peut être difficile de s'y retrouver : Une cause physique, comme un câble déconnecté ou défectueux, idem pour un switch (commutateur) un routeur. Une cause liée au réseau, comme une routeur mal configuré ou un serveur DNS en panne. Une cause logicielle, comme un serveur Web ou une base de données mal configurés. Une cause "évidente", comme l'utilisation d'une adresse erronée pour une machine ou le fait de ne pas voir les modifications apportées à une page Web parce que le navigateur affiche la copie de la page sauvée dans son cache. Il n'y a aucun moyen de deviner d'où provient le dysfonctionnement. Il est ainsi facile de perdre des heures à essayer de retrouver un problème au mauvais endroit. Exemple d'amusement : essayer de trouver pourquoi le code 4D est bogué alors que le problème provient de l'indisponibilité d'un serveur DNS. C'est donc une bonne idée de commencer par vous familiariser avec une large gamme d'outils d'analyse et de déboguage réseau. Lorsqu'un problème survient, l'exploration des différentes causes peut alors s'effectuer en quelques minutes. Ci-dessous nous présentons quelques-uns des outils les plus simples et les plus connus. Ping Ping envoie des paquets depuis une machine et attend la confirmation de la réception par le destinataire. A l'aide de ping il est facile de vérifier que deux machines peuvent communiquer au travers du réseau et d'avoir une idée de la performance de la connexion. Ci-dessous un exemple de 10 pings sur une adresse : [Merops:~] apiaster% ping -c 10 216.33.0.198 PING 216.33.0.198 (216.33.0.198): 56 data bytes 64 bytes from 216.33.0.198: icmp_seq=0 ttl=240 time=79.455 ms 64 bytes from 216.33.0.198: icmp_seq=1 ttl=240 time=79.265 ms 64 bytes from 216.33.0.198: icmp_seq=2 ttl=240 time=80.245 ms 64 bytes from 216.33.0.198: icmp_seq=3 ttl=240 time=78.736 ms 64 bytes from 216.33.0.198: icmp_seq=4 ttl=240 time=80.311 ms 64 bytes from 216.33.0.198: icmp_seq=5 ttl=240 time=80.432 ms 64 bytes from 216.33.0.198: icmp_seq=6 ttl=240 time=82.574 ms 64 bytes from 216.33.0.198: icmp_seq=7 ttl=240 time=80.088 ms 64 bytes from 216.33.0.198: icmp_seq=8 ttl=240 time=80.68 ms 64 bytes from 216.33.0.198: icmp_seq=9 ttl=240 time=79.855 ms --- 216.33.0.198 ping statistics --10 packets transmitted, 10 packets received, 0% packet loss round-trip min/avg/max = 78.736/80.164/82.574 ms En comparaison, voici le résultat d'un ping sur une machine hôte qui ne répond pas : [Merops:~] apiaster% ping -c 10 192.168.1.201 4 / 15 PING 192.168.1.201 (192.168.1.201): 56 data bytes ping: sendto: Host is down Voici les résultats obtenus dans le cas d'une machine qui ne peut être reconnue : [Merops:~] apiaster% ping -c 10 216.33.0.256 ping: unknown host 216.33.0.256 Ping est un moyen rapide et facile de vérifier que deux machines peuvent communiquer. Si ce test réussit, vous pouvez passer à la détection d'autres types de problèmes. Note : Ping repose sur le protocole IMCP et, à l'image de beaucoup de fonctionnalités de TCP/IP, son usage été détourné par les hackers et les pirates. Pour cette raison, ping ne fonctionne pas sur tous les systèmes ou tous les réseaux. Testez ping dans votre environnement AVANT que les problèmes ne surviennent. Name Lookups Il se peut que les machines puissent communiquer mais que la couche applicative échoue parce que le système DNS est défaillant. Essayez de résoudre les adresses DNS directement pour vérifier qu'elles sont correctes. Assurez-vous de disposer de quelques paires noms-adresses avant de rencontrer des problèmes. Comme les adresses peuvent changer, voici une liste d'adresses courantes : • www.4dcompanion.com 209.238.180.64 • www.4d.com 216.33.0.198 • www.cnn.com 64.236.16.52 64.236.16.84 64.236.16.116 64.236.24.4 64.236.24.12 64.236.24.20 64.236.24.28 64.236.16.20 • www.microsoft.com 207.46.134.190 • www.smh.com.au 203.26.51.42 Rassemblez des adresses de votre propre réseau aussi bien que provenant d'Internet. De cette façon, vous pourrez simplifier le processus de détermination de l'origine exacte des problèmes DNS. Relevez également plusieurs adresses de serveur DNS au cas ou vos serveurs habituels tomberaient en panne. 5 / 15 Astuce : Vous pouvez utiliser nslookup pour découvrir le nom et l'adresse du serveur DNS utilisé par la machine courante comme indiqué ci-dessous (la mise en gras a été rajoutée pour la compréhension): [Merops:~] apiaster% nslookup www.example.com Server: vnsc-pri.sys.gtei.net Address: 4.2.2.1 Non-authoritative answer: Name: www.example.com Address: 192.0.34.166 Netstat La commande netstat combine plusieurs fonctionnalités sous un seul nom. L'une des plus remarquables affiche la liste des connexions actives : Une autre utilisation fréquente de netstat permet de découvrir les configurations de l'interface de réseau courante : Astuce : La commande netstat combine tellement de fonctionnalités qu'il peut être difficile de la maîtriser. Les principales fonctions, y compris celles décrites ci-dessus, sont disponibles au travers d'une interface graphique dans l'utilitaire réseau d'Apple : IPNetMonitorX, ainsi qu'au travers d'autres utilitaires. Traceroute Traceroute essaye d'afficher l'adresse de chaque intermédiaire entre deux machines. Vérifier les routes permet de détecter les routeurs en panne, les routes démesurément longues, ou d'autres problèmes majeurs. Si traceroute 6 / 15 ne marche pas sur votre système ou est trop lent, utiliser une autre implémentation comme IPNetMonitorX ou mtr. Ci-dessous un extrait du résultat obtenu avec mtr : Whois La commande whois retourne l'information d'enregistrement du nom de domaine associée à un domaine. Remarquez que whois s'applique aux domaines, pas aux machines. Par exemple whois www.4d.com est incorrect tandis que whois 4d.com est correct. Dans le passé, whois retournait l'information DNS directement pour n'importe quelle hôte. Malheureusement, ce n'est plus le cas. Voici un exemple de sortie fournie par whois : Cette sortie indique que le nom de domaine n'est pas enregistré chez ce registrar et où rechercher pour trouver l'enregistrement du nom de domaine. Le nom du serveur whois correct peut être passé à whois avec l'option -h afin d'atteindre l'enregistrement désiré : 7 / 15 Si vous trouvez que le recours au flag -h est pour le moins ennuyeux, bienvenu au club. La solution consiste à recourir à un utilitaire graphique qui simplifie la sélection du serveur whois ou appelle directement la commande jwhois. Jwhois détermine automatiquement le bon registrar et retrouve l'information en une seule étape. sudo Par défaut, OSX n'active pas le compte root. Si vous devez réaliser une opération en tant que root sans activer le compte root, utilisez la commande sudo. Cet exemple montre comment démarrer Apache en ligne de commande : Soyez prudent lors des opérations en root car il est extrêmement facile de faire des erreurs en ligne de commande, et il n'existe pas de fonction Annuler. Navigateurs Web Les navigateurs ne sont pas des utilitaires réseau Les gens pensent souvent que les navigateurs Web permettent de vérifier qu'un ordinateur peut voir le réseau ou Internet ou s'en servent pour estimer la vitesse du réseau. Les navigateurs ne sont cependant pas très appropriés pour ces tâches. Préférez l'utilisation d'outils comme ceux vus précédemment pour vérifier et déboguer les connexions réseaux. 8 / 15 Conservez plusieurs navigateurs Des navigateurs différents, voire même différentes versions du même navigateur se comportent souvent différemment. Si vous développez pour le Web, collectionnez les navigateurs ! Si des utilisateurs remontent des problèmes avec leur navigateur, il est efficace d'en posséder une copie et de pouvoir reproduire le problème. Links et Lynx Il existe des navigateurs pour une utilisation à partir du Terminal, en particulier Lynx et Links. Les navigateurs en mode terminal peuvent se révéler une aide précieuse pour tracer les connexions Web. Les navigateurs Web graphiques téléchargent automatiquement les images, rajoutant beaucoup de trafic à la conversation. Les navigateurs en mode texte omettent ces fichiers, simplifiant la consultation des entêtes et autres informations de base. Utilitaires de capture de paquets Présentation Développer une applications réseau sans utilitaire de capture de paquet équivaut à écrire du code sans débogueur. Voici quelques utilisations intéressantes d'un utilitaire de capture de paquet : Vérifier le contenu et le format des messages SOAP Visualiser les entêtes HTTP, le code JavaScript, HTML et les CSS envoyés par un serveur Web. Cette fonctionnalité peut se révéler indispensable pour mettre au point un système en interaction avec un autre système contrôlé par une autre société ou pour comprendre comme un site donné est construit. Avoir accès à l'HTTP entrant et sortant de 4D pour consulter et valider les entêtes. Déterminer si deux programmes échangent de l'information ou non. Cette application devient particulièrement critique dans des systèmes où trois applications ou plus sont impliquées. La gamme d'outils s'étend du simple au complexe et celle des prix du gratuit au franchement coûteux. Nous allons passer en revue une sélection de programmes, au moins l'un d'entre eux devrait vous convenir. tcpdump Tcpdump est largement connu et se trouve pré-installé sur OSX, accessible à partir du Terminal. Tcpdump propose une large gamme de fonctionnalités et supporte un système de filtrage puissant. Au lieu de capturer tous les paquets, tcpdump peut filtrer les paquets suivant le protocole, la source, la destination, le port, et d'autres caractéristiques. Consultez le manuel pour des détails complets en tapant cette commande dans le Terminal: man tcpdump Voici un échantillon de trace du port 80 lors de la requête d'un simple fichier texte depuis un serveur Web : 9 / 15 Si l'information TCP de bas niveau présenté par tcpdump est essentielle lors du débogage, de la mise au point et de l'optimisation de réseau, elle se révèle un peu intimidante et surtout superflue pour une simple tentative de consultation des échanges haut niveau entre programmes. Pour tracer HTTP, SOAP, SMTP et autres protocoles de même type, tcpflow est un bien meilleur choix. Tcpflow Tcpflow est un outil de capture de paquet orienté flux, c'est-à-dire qu'il rassemble les paquets dans l'ordre d'émission. Il supporte beaucoup des options de tcpdump et en particulier les expressions de filtrage. Après avoir installé tcpflow, consulter son mode d'emploi en tapant dans le Terminal : man tcpflow 10 / 15 Afin d'illustrer les différences entre tcpdump et tcpflow, nous listons ci-dessous le résultat produit par tcpflow sur la même requête que celle précédemment capturée par tcpdump : Les données relatives au protocole de bas-niveau sont supprimées, ne conservant que les détails de haut niveau. Cette sortie représente exactement ce dont nous avons besoin pour suivre les messages échangés entre deux programmes. EtherPeek EtherPeek est un analyseur de réseau très complet et très populaire parmi les administrateurs réseau des grandes entreprises. EtherPeek capture et affiche les mêmes informations bas-niveau qu'un outil comme tcpdump, mais en ajoutant la capacité de décoder et de présenter d'une manière intelligible le contenu des trames et des paquets. 11 / 15 La fonction de décodage de paquet d'EtherPeek. EtherPeek propose une gamme de fonctions impressionnante, incluant une richesse de décodeurs, des filtres hautement configurables et la possibilité de définir des alarmes personnalisées. Etant donné son prix également impressionnant, il est toutefois difficile de justifier son utilisation pour un usage cantonné à de la programmation. Ethereal Ethereal est un analyseur de réseau gratuit et open-source aux fonctionnalités comparables à celles d'EtherPeek. Sa puissance et sa gratuité font d'Ethereal un outil populaire parmi les programmeurs, les administrateurs réseaux et les hackers. 12 / 15 La vue de décodage de paquet d'Ethereal. Comme Ethereal est une application X11, son exécution sous OSX présuppose l'installation des composants suivants : Le CD Développeur d'Apple et toutes les mises à jour Fink Une implémentation X11 compatible avec Fink Ethereal A titre de comparaison, formater un disque et installer OS X est considérablement plus rapide que d'arriver à faire fonctionner Ethereal sur une machine OS X. Si le temps est plus important que l'argent, EtherPeek peut s'installer et être utilisé en quelques minutes. Note : Ethereal sur Win32 est rapide et facile à installer. Si vous avez le choix, Ethereal est beaucoup plus simple d'emploi sous Win32 que sous OSX. Tracer des programmes s'exécutant sur la même machine Tracer sur l'interface de boucle locale Il est souvent confortable de développer et tester des applications réseau sur une seule machine. Comme exemples fréquents de développement sur une seule machine, on peut citer : Utiliser un navigateur Web pour tester des pages servis par un serveur Web sur la même machine. Combiner 4D et un autre serveur Web sur la même machine en utilisant 4DLINK, 4DCONNECT, FastCGI, ou ISAPI. 13 / 15 Normalement, les utilitaires de capture de paquet surveillent l'interface Ethernet par défaut. Comme les deux programmes s'exécutent sur la même machine, leur messages ne passent pas par l'interface Ethernet. Tout se passe comme si les utilitaires de capture ne pouvaient écouter la communication entre les deux applications. Une solution simple à ce problème est de spécifier l'interface de boucle locale connue sous le doux nom de lo0 (El-Oh-Zero). La commande listée ci-dessous démarre tcpflow et lui demande d'écouter le trafic passant sur la machine courante à destination du port 80 : sudo tcpflow -c -i lo0 port 80 Notez que les interfaces sont mutuellement exclusives. Lorsque vous tracez lo0, les paquets passant au travers des autres interfaces sont ignorés. Vous pouvez, bien entendu ouvrir différentes fenêtres Terminal pour tracer autant d'interfaces différentes que vous le souhaitez. Note : La version 4.1 d'EtherPeek ne peut pas tracer l'interface de boucle locale. Ethereal, tcpdump, tcpflow, et Interarchy 6.0.1 et ultérieur sont tous capables de surveiller lo0. Détecter les interfaces Il existe plusieurs façons de connaître les noms des interfaces installées, quelques unes ont déjà été mentionnées. Voici une courte liste des outils et commandes disponibles sous OS X. ifconfig -a netstat -i -n -f inet Le panneau d'Info dans l'Utilitaire de Réseau Apple. L'adresse de boucle locale et les interfaces inactives ne sont pas listées. Les outils tiers comme Interarchy et IPNetMonitorX peuvent également afficher les interfaces installées. Utiliser des adresses multiples. Une autre technique pour simplifier la trace et le débogage de programmes tournant sur le même poste consiste à définir plusieurs adresses pour la même machine. Des programmes différents peuvent ensuite se voir affectés des adresses différentes. Cela simplifie, par exemple, la capture de trafic émis ou à destination d'une machine spécifique. De nouvelles adresses peuvent être ajoutées à OS X en quelques minutes au travers du panneau de préférence des préférences réseau. Dans l'exemple représenté ci-dessous, des adresses différentes sont définies pour des tâches bien distinctes : Apache, WebSTAR et 4D : 14 / 15 Astuce : Utilisez la déclaration BindAddress dans httpd.conf pour associer Apache avec une adresse IP spécifique. 15 / 15