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