Your SlideShare is downloading. ×
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Techniques sysadmin d'investigation de dysfonctionnements applicatifs
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Techniques sysadmin d'investigation de dysfonctionnements applicatifs

234

Published on

Comment investiguer un problème applicatif quand on ne maitrise pas le code source d'une application ou quand on ne l'a tout simplement pas ? …

Comment investiguer un problème applicatif quand on ne maitrise pas le code source d'une application ou quand on ne l'a tout simplement pas ?
Cette présentation à destination des administrateurs système propose quelques techniques pour faire parler les applications récalcitrantes.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
234
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Investiguer des dysfonctionnements applicatifs dans le monde Unix / Linux
  • 2. Plan 0. 1. 2. 3. Pourquoi faire Connaître l’ennemi Epier ses faits et gestes Intercepter ses communications
  • 3. 0. Pourquoi faire ?
  • 4. Pourquoi faire ? Parce que les fichiers de logs ne sont pas toujours suffisants Parce qu’on a pas toujours de support Parce que le support n’est pas toujours bon Pour apporter des éléments objectifs au débat « c’est la faute au système – réseau / c’est la faute à l’application »
  • 5. 1. Connaître l’ennemi Qui connait son ennemi […], en cents combats ne sera point défait. Sun Tzu – L ’art de la guerre
  • 6. Connaître l’ennemi Quelques outils utiles ps: toutes les informations de base sur les processus
  • 7. Connaître l’ennemi Quelques outils utiles ps: toutes les informations de base sur les processus lsof: pour connaître tous les échanges avec l’extérieur (fichiers, réseau, socket, pipe…)
  • 8. Connaître l’ennemi Quelques outils utiles ps: toutes les informations de base sur les processus lsof: pour connaître tous les échanges avec l’extérieur (fichiers, réseau, socket, pipe…) netstat: pour connaître toutes les connexions réseaux en cours et ou en écoute
  • 9. Connaître l’ennemi Quelques outils utiles ps: toutes les informations de base sur les processus lsof: pour connaître tous les échanges avec l’extérieur (fichiers, réseau, socket, pipe…) netstat: pour connaître toutes les connexions réseaux en cours et ou en écoute top: pour voir la consommation de ressources par le processus
  • 10. Connaître l’ennemi Quelques outils utiles ps: toutes les informations de base sur les processus lsof: pour connaître tous les échanges avec l’extérieur (fichiers, réseau, socket, pipe…) netstat: pour connaître toutes les connexions réseaux en cours et ou en écoute top: pour voir la consommation de ressources par le processus /proc/PID/…: exhaustif … mais moins lisible ipcs: tout ce qui concerne la communication inter-processus (mémoire partagée, file de message…)
  • 11. Connaître l’ennemi La commande ps Un commande très connue mais qui reste incontournable La commande de base pour en savoir plus sur un processus (%cpu, %mem, status, heure de démarrage…): ps u -p PID
  • 12. Connaître l’ennemi La commande ps Un commande très connue mais qui reste incontournable La commande de base pour en savoir plus sur un processus (%cpu, %mem, status, heure de démarrage…): ps u -p PID Quelques utilisations moins connues mais utiles:
  • 13. Connaître l’ennemi La commande ps Un commande très connue mais qui reste incontournable La commande de base pour en savoir plus sur un processus (%cpu, %mem, status, heure de démarrage…): ps u -p PID Quelques utilisations moins connues mais utiles: Connaître les variables d’environnement d’un processus: ps eww -p PID
  • 14. Connaître l’ennemi La commande ps Un commande très connue mais qui reste incontournable La commande de base pour en savoir plus sur un processus (%cpu, %mem, status, heure de démarrage…): ps u -p PID Quelques utilisations moins connues mais utiles: Connaître les variables d’environnement d’un processus: ps eww -p PID Connaître les groupes additionnels d’un processus: ps -o supgid -p PID
  • 15. Connaître l’ennemi La commande ps Un commande très connue mais qui reste incontournable La commande de base pour en savoir plus sur un processus (%cpu, %mem, status, heure de démarrage…): ps u -p PID Quelques utilisations moins connues mais utiles: Connaître les variables d’environnement d’un processus: ps eww -p PID Connaître les groupes additionnels d’un processus: ps -o supgid -p PID Vue en arbre des processus: ps auxf
  • 16. Connaître l’ennemi La commande lsof Une véritable couteau suisse Quelques usages classiques: Connaître les fichiers/sockets ouverts par un processus lsof -n -p PID
  • 17. Connaître l’ennemi La commande lsof Une véritable couteau suisse Quelques usages classiques: Connaître les fichiers/sockets ouverts par un processus lsof -n -p PID Uniquement les connexions réseau d’un processus lsof -n -p PID -a -i
  • 18. Connaître l’ennemi La commande lsof Une véritable couteau suisse Quelques usages classiques: Connaître les fichiers/sockets ouverts par un processus lsof -n -p PID Uniquement les connexions réseau d’un processus lsof -n -p PID -a -i Exemple de sortie de la commande lsof: COMMAND chromium chromium chromium chromium chromium chromium chromium […] PID 3164 3642 3642 3164 3164 3164 3164 USER yrouillard yrouillard yrouillard yrouillard yrouillard yrouillard yrouillard FD 0r 1u 2u 68u 51r 84u 74u TYPE CHR REG REG REG FIFO unix IPv4 DEVICE 1,3 254,2 254,2 254,2 0,8 0x7280 152346 SIZE/OFF NODE NAME 0t0 2050 /dev/null 21801 786846 /home/yrouillard/.xsession-errors 21801 786846 /home/yrouillard/.xsession-errors 1016832 78869 /home/[…]/Cookies 0t0 17007 pipe 0t0 18484 socket 0t0 TCP atlas.local:34979  ->138.102.119.3:https (ESTABLISHED)
  • 19. Connaître l’ennemi La commande lsof Une véritable couteau suisse Quelques usages classiques: Connaître les fichiers/sockets ouverts par un processus COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chromium 3164 yrouillard 0r CHR 1,3 -n -p PID 2050 /dev/null lsof 0t0 chromium 3642 yrouillard 1u REG 254,2 21801 786846 /home/yrouillard/.xsession-errors Uniquement les connexions réseau d’un processus chromium 3642 yrouillard 2u REG 254,2 21801 786846 /home/yrouillard/.xsession-errors -n -p PID -a -i lsof chromium 3164 yrouillard 68u REG 254,2 1016832 78869 /home/[…]/Cookies Exemple de 51r de 0,8 chromium 3164 yrouillardsortieFIFO la commande lsof: pipe 0t0 17007 chromium 3164 PID yrouillard 84u TYPE DEVICE SIZE/OFF unix 0x7280 0t0 COMMAND USER FD chromium 3164 3164 yrouillard 74u CHR 1,3 yrouillard IPv4 152346 0t0 chromium 0r 0t0 chromium chromium chromium chromium chromium chromium […] 3642 3642 3164 3164 3164 3164 yrouillard yrouillard yrouillard yrouillard yrouillard yrouillard 1u 2u 68u 51r 84u 74u 18484 socket NODE NAME TCP atlas.local:34979  2050 /dev/null ->138.102.119.3:https (ESTABLISHED) REG 254,2 21801 786846 /home/yrouillard/.xsession-errors REG 254,2 21801 786846 /home/yrouillard/.xsession-errors REG 254,2 1016832 78869 /home/[…]/Cookies FIFO 0,8 0t0 17007 pipe unix 0x7280 0t0 18484 socket IPv4 152346 0t0 TCP atlas.local:34979  ->138.102.119.3:https (ESTABLISHED)
  • 20. Connaître l’ennemi La commande lsof Une véritable couteau suisse Quelques usages classiques: Numéro Descripteur de un processus Connaître les fichiers/sockets ouverts par fichier COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chromium 3164 yrouillard 0r CHR 1,3 -n -p PID 2050 /dev/null lsof 0t0 chromium 3642 yrouillard 1u REG 254,2 21801 786846 /home/yrouillard/.xsession-errors Uniquement les connexions réseau d’un processus chromium 3642 yrouillard 2u REG 254,2 21801 786846 /home/yrouillard/.xsession-errors -n -p PID -a -i lsof chromium 3164 yrouillard 68u REG 254,2 1016832 78869 /home/[…]/Cookies Exemple de 51r de 0,8 chromium 3164 yrouillardsortieFIFO la commande lsof: pipe 0t0 17007 chromium 3164 PID yrouillard 84u TYPE DEVICE SIZE/OFF unix 0x7280 0t0 COMMAND USER FD chromium 3164 3164 yrouillard 74u CHR 1,3 yrouillard IPv4 152346 0t0 chromium 0r 0t0 chromium chromium chromium chromium chromium chromium […] 3642 3642 3164 3164 3164 3164 yrouillard yrouillard yrouillard yrouillard yrouillard yrouillard 1u 2u 68u 51r 84u 74u 18484 socket NODE NAME TCP atlas.local:34979  2050 /dev/null ->138.102.119.3:https (ESTABLISHED) REG 254,2 21801 786846 /home/yrouillard/.xsession-errors REG 254,2 21801 786846 /home/yrouillard/.xsession-errors REG 254,2 1016832 78869 /home/[…]/Cookies FIFO 0,8 0t0 17007 pipe unix 0x7280 0t0 18484 socket IPv4 152346 0t0 TCP atlas.local:34979  ->138.102.119.3:https (ESTABLISHED)
  • 21. Connaître l’ennemi La commande lsof Une véritable couteau suisse Quelques usages classiques: Type d’accès au « fichier » Connaître les fichiers/sockets ouvertsr: lectureprocessus par un COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME w: chromium 3164 yrouillard 0r CHR 1,3 -n -p PID écriture 2050 /dev/null lsof 0t0 chromium 3642 yrouillard 1u REG 254,2 21801 786846 lecture et écriture u: /home/yrouillard/.xsession-errors Uniquement les connexions réseau d’un processus chromium 3642 yrouillard 2u REG 254,2 21801 786846 /home/yrouillard/.xsession-errors -n -p PID -a -i lsof chromium 3164 yrouillard 68u REG 254,2 1016832 78869 /home/[…]/Cookies Exemple de 51r de 0,8 chromium 3164 yrouillardsortieFIFO la commande lsof: pipe 0t0 17007 chromium 3164 PID yrouillard 84u TYPE DEVICE SIZE/OFF unix 0x7280 0t0 COMMAND USER FD chromium 3164 3164 yrouillard 74u CHR 1,3 yrouillard IPv4 152346 0t0 chromium 0r 0t0 chromium chromium chromium chromium chromium chromium […] 3642 3642 3164 3164 3164 3164 yrouillard yrouillard yrouillard yrouillard yrouillard yrouillard 1u 2u 68u 51r 84u 74u 18484 socket NODE NAME TCP atlas.local:34979  2050 /dev/null ->138.102.119.3:https (ESTABLISHED) REG 254,2 21801 786846 /home/yrouillard/.xsession-errors REG 254,2 21801 786846 /home/yrouillard/.xsession-errors REG 254,2 1016832 78869 /home/[…]/Cookies FIFO 0,8 0t0 17007 pipe unix 0x7280 0t0 18484 socket IPv4 152346 0t0 TCP atlas.local:34979  ->138.102.119.3:https (ESTABLISHED)
  • 22. Connaître l’ennemi La commande lsof Une véritable couteau suisse Quelques usages classiques: Type d’accès au « fichier » Connaître les fichiers/sockets ouverts parpériphérique caractère CHR: un processus COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME REG: fichier standard chromium 3164 yrouillard 0r CHR 1,3 -n -p PID 2050 /dev/null lsof 0t0 chromium 3642 yrouillard 1u REG 254,2 21801 786846 pipe FIFO: /home/yrouillard/.xsession-errors Uniquement les connexions réseau d’un processus unix: socket unix chromium 3642 yrouillard 2u REG 254,2 21801 786846 IPv4: connexion IP /home/yrouillard/.xsession-errors -n -p PID -a -i lsof chromium 3164 yrouillard 68u REG 254,2 1016832 78869 /home/[…]/Cookies … Exemple de 51r de 0,8 chromium 3164 yrouillardsortieFIFO la commande lsof: pipe 0t0 17007 chromium 3164 PID yrouillard 84u TYPE DEVICE SIZE/OFF unix 0x7280 0t0 COMMAND USER FD chromium 3164 3164 yrouillard 74u CHR 1,3 yrouillard IPv4 152346 0t0 chromium 0r 0t0 chromium chromium chromium chromium chromium chromium […] 3642 3642 3164 3164 3164 3164 yrouillard yrouillard yrouillard yrouillard yrouillard yrouillard 1u 2u 68u 51r 84u 74u 18484 socket NODE NAME TCP atlas.local:34979  2050 /dev/null ->138.102.119.3:https (ESTABLISHED) REG 254,2 21801 786846 /home/yrouillard/.xsession-errors REG 254,2 21801 786846 /home/yrouillard/.xsession-errors REG 254,2 1016832 78869 /home/[…]/Cookies FIFO 0,8 0t0 17007 pipe unix 0x7280 0t0 18484 socket IPv4 152346 0t0 TCP atlas.local:34979  ->138.102.119.3:https (ESTABLISHED)
  • 23. Connaître l’ennemi Exemples concrets Cas 1: Quels sont les fichiers de log du process weblogic ?
  • 24. Connaître l’ennemi Exemples concrets Cas 1: Quels sont les fichiers de log du process weblogic ? $ lsof -n -p 17102 | grep ".log" java java java […] java […] 17102 fs90prd 1w VREG 85,1 16735376 96588  /opt/psoft/FSCM90PT84924/webserv/PRD_WT1/servers/PIA/logs/PIA_stdout.log 17102 fs90prd 2w VREG 85,1 91890547 98263  /opt/psoft/FSCM90PT84924/webserv/PRD_WT1/servers/PIA/logs/PIA_stderr.log 17102 fs90prd 9w VREG 85,1 0 98931  /opt/psoft/FSCM90PT84924/webserv/PRD_WT1/servers/PIA/logs/PIA_weblogic.log 17102 fs90prd 21w VREG 85,1 0 96993  /opt/psoft/FSCM90PT84924/webserv/PRD_WT1/servers/PIA/logs/PRD_WT1.log java 17102 fs90prd 22w VREG 85,1 8406043 98954  /opt/psoft/FSCM90PT84924/webserv/PRD_WT1/servers/PIA/logs/PIA_access.log
  • 25. Connaître l’ennemi Exemples concrets Cas 2: Mais avec qui discute ce processus Time Navigator ?
  • 26. Connaître l’ennemi Exemples concrets Cas 2: Mais avec qui discute ce processus Time Navigator ? $ lsof -n -p 12475 -a –i COMMAND PID USER tina_daem 12475 root tina_daem 12475 root tina_daem 12475 root FD 6u 7u 8u TYPE DEVICE SIZE/OFF NODE NAME IPv4 0xffffffffadbc6880 0t0 TCP *:tina (LISTEN) IPv4 0xffffffff933fbe00 0t0 UDP *:tina-msg IPv4 0xffffffff9ccc5040 0t0 TCP 138.102.1.107:38051->138.102.1.27:59334 (ESTABLISHED)
  • 27. Connaître l’ennemi Exemples concrets Cas 2: Mais avec qui discute ce processus Time Navigator ? $ lsof -n -p 12475 -a –i COMMAND PID USER tina_daem 12475 root tina_daem 12475 root tina_daem 12475 root FD 6u 7u 8u TYPE DEVICE SIZE/OFF NODE NAME IPv4 0xffffffffadbc6880 0t0 TCP *:tina (LISTEN) IPv4 0xffffffff933fbe00 0t0 UDP *:tina-msg IPv4 0xffffffff9ccc5040 0t0 TCP 138.102.1.107:38051->138.102.1.27:59334 (ESTABLISHED) Sur le serveur 138.102.1.27:59334 # lsof -n -i TCP:59334 COMMAND PID USER ATEMPO 16247 root FD 16u TYPE DEVICE SIZE NODE NAME IPv4 11757747 TCP 138.102.1.27:59334 ->138.102.1.107:38051 (ESTABLISHED)
  • 28. Connaître l’ennemi Exemples concrets Cas 3: Mais où est passé mon espace disque ? $ dd if=/dev/zero of=grosfichier bs=1M count=700; tail -f grosfichier & $ rm grosfichier $ df -h /home /dev/mapper/vg1-home 1,1G 937M $ du -xh --max-depth=1 /home 228M /home 55M 95% /home
  • 29. Connaître l’ennemi Exemples concrets Cas 3: Mais où est passé mon espace disque ? $ dd if=/dev/zero of=grosfichier bs=1M count=700; tail -f grosfichier & $ rm grosfichier $ df -h /home /dev/mapper/vg1-home 1,1G 937M 55M 95% /home $ du -xh --max-depth=1 /home 228M /home $ lsof -n /home | grep "(deleted)" tail 22678 root 3r REG 254,5 734003200 20 /home/grosfichier (deleted)
  • 30. Connaître l’ennemi Exemples concrets Cas 3: Mais où est passé mon espace disque ? $ dd if=/dev/zero of=grosfichier bs=1M count=700; tail -f grosfichier & $ rm grosfichier $ df -h /home /dev/mapper/vg1-home 1,1G 937M 55M 95% /home $ du -xh --max-depth=1 /home 228M /home $ lsof -n /home | grep "(deleted)" tail 22678 root 3r REG 254,5 734003200 20 /home/grosfichier (deleted) $ kill -15 22678 $ df -h /home /dev/mapper/vg1-home 1,1G 234M 758M 24% /home
  • 31. 2. Epier ses faits et gestes Espionne tous les gestes de ton adversaire […], et tu trouveras le meilleur moment pour causer sa perte. L ’art du Ninja – Vol. 2
  • 32. Epier ses faits et gestes Quelques outils utiles strace: pour connaître tous les appels système effectués par le processus  un outil clé pour comprendre ce que font les processus
  • 33. Epier ses faits et gestes Quelques outils utiles strace: pour connaître tous les appels système effectués par le processus  un outil clé pour comprendre ce que font les processus ltrace: pour connaître tous les appels à des librairies effectués par le processus  utile mais demande une connaissance des librairies utilisées
  • 34. Epier ses faits et gestes Quelques outils utiles strace: pour connaître tous les appels système effectués par le processus  un outil clé pour comprendre ce que font les processus ltrace: pour connaître tous les appels à des librairies effectués par le processus  utile mais demande une connaissance des librairies utilisées gdb: le debugger du projet GNU  complexe mais utilisable dans quelques cas
  • 35. Epier ses faits et gestes L ’outil strace Un outil très puissant Afficher tous les appels système dès le démarrage: strace -f /chemin/vers/executable
  • 36. Epier ses faits et gestes L ’outil strace Un outil très puissant Afficher tous les appels système dès le démarrage: strace -f /chemin/vers/executable Afficher les appels système d’un processus en cours: strace -f -p PID
  • 37. Epier ses faits et gestes L ’outil strace Un outil très puissant Afficher tous les appels système dès le démarrage: strace -f /chemin/vers/executable Afficher les appels système d’un processus en cours: strace -f -p PID Avoir l’affichage des temps: strace -tt -f -p PID
  • 38. Epier ses faits et gestes L ’outil strace Un outil très puissant Afficher tous les appels système dès le démarrage: strace -f /chemin/vers/executable Afficher les appels système d’un processus en cours: strace -f -p PID Avoir l’affichage des temps: strace -tt -f -p PID Exemple de sortie: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 14:18:38.209716 time(NULL) = 1317903518 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8
  • 39. Epier ses faits et gestes L ’outil strace Un outil très puissant Afficher tous les appels système dès le démarrage: strace -f /chemin/vers/executable Afficher les appels système d’un processus en cours: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 strace -f -p PID 14:18:38.209716 time(NULL) = 1317903518 Avoir l’affichage des temps: 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 strace -tt -f -p PID 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8 Exemple de sortie: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 14:18:38.209716 time(NULL) = 1317903518 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8
  • 40. Epier ses faits et gestes L ’outil strace L’heure de l’appel système Un outil très puissant Afficher tous les appels système dès le démarrage: strace -f /chemin/vers/executable Afficher les appels système d’un processus en cours: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 strace -f -p PID 14:18:38.209716 time(NULL) = 1317903518 Avoir l’affichage des temps: 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 strace -tt -f -p PID 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8 Exemple de sortie: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 14:18:38.209716 time(NULL) = 1317903518 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8
  • 41. Epier ses faits et gestes L ’outil strace Le nom de l’appel système Un outil très puissant Afficher tous les appels système dès le démarrage: strace -f /chemin/vers/executable Afficher les appels système d’un processus en cours: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 strace -f -p PID 14:18:38.209716 time(NULL) = 1317903518 Avoir l’affichage des temps: 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 strace -tt -f -p PID 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8 Exemple de sortie: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 14:18:38.209716 time(NULL) = 1317903518 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8
  • 42. Epier ses faits et gestes L ’outil strace Un outil très Les arguments puissant Afficher tous les appels système dès le démarrage: strace -f /chemin/vers/executable Afficher les appels système d’un processus en cours: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 strace -f -p PID 14:18:38.209716 time(NULL) = 1317903518 Avoir l’affichage des temps: 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 strace -tt -f -p PID 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8 Exemple de sortie: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 14:18:38.209716 time(NULL) = 1317903518 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8
  • 43. Epier ses faits et gestes L ’outil strace Un outil très puissant Le code retour Afficher tous les appels système dès le démarrage: strace -f /chemin/vers/executable Afficher les appels système d’un processus en cours: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 strace -f -p PID 14:18:38.209716 time(NULL) = 1317903518 Avoir l’affichage des temps: 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 strace -tt -f -p PID 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8 Exemple de sortie: 14:18:36.848746 read(5, "GET /design/es/stylesheets/style"..., 4096) = 581 14:18:38.209716 time(NULL) = 1317903518 14:18:38.209930 stat64("/srv/ezinstitut/…", {st_mode=S_IFREG|0770, st_size=44431, ...}) = 0 14:18:38.210026 open("/srv/ezinstitut/…", O_RDONLY|O_LARGEFILE) = 8
  • 44. Epier ses faits et gestes L ’outil strace Les appels système à connaître pour survivre stat / lstat: connaître le status d’un fichier stat("fichier_present", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 stat("fichier_absent", 0x1bab190) = -1 ENOENT  (No such file or directory) open / close: ouvrir / fermer un fichier open("/var/www/toto.inra.fr/.htaccess", O_RDONLY|O_LARGEFILE) = 138 close(138) read / write: lire / écrire dans un fichier write(54, "138.102.XX.XX - - [07/Oct/2011:1"..., 348) = 348 read(5, "GET /design/plain/images/accueil"..., 4096) = 626 flock / fcntl (SET_LK): verrouiller ou déverrouiller un fichier flock(19, LOCK_EX) = 0 fcntl(4, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=0, len=0}) = 0
  • 45. Epier ses faits et gestes L ’outil strace poll / select: attendre une activité sur un fichier ou une connexion réseau select(34, [26 27 28 29 30 31 32 33], NULL, NULL, NULL) = 1 (in [32]) poll([{fd=6, events=POLLOUT, revents=POLLOUT}], 1, 0) = 1 connect / socket: se connecter à un port réseau socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 6 connect(6, {sa_family=AF_INET, sin_port=htons(53),  sin_addr=inet_addr("138.102.119.226")}, 28) = 0 send / recv / recvfrom: lire et écrire sur le réseau send(6, "324x100100000020moteur-recherche"..., 42, 0) = 42 recv(6, "HTTP/1.0 200 OKrnConnection: Clo"..., 8192, 0) = 174 execve: exécuter un processus execve("/bin/ls", ["/bin/ls", "-l"], [/* 40 vars */]) = 0
  • 46. Epier ses faits et gestes L ’outil strace La règle la plus importante:
  • 47. Epier ses faits et gestes L ’outil strace La règle la plus importante: Accepter de ne pas tout comprendre dans la floppée de lignes de strace !!
  • 48. Epier ses faits et gestes L ’outil gdb Connaître la pile d’appel d’un processus en cours: $ gdb –p PID ou gdb core thread apply all bt Exemple de sortie: #0 #1 #2 0x00000035d1acb2af in poll () from /lib64/libc.so.6 0x00000035d522fa3d in ?? () from /lib64/libglib-2.0.so.0 0x00000035d522ff1a in g_main_loop_run () from /lib64/libglib-2.0.so.0 #3 0x00002b1fc9f695d5 in ?? () from /usr/lib64/python2.4/site-packages/gtk-2.0/gobject/_gobject.so #4 0x0000003e81e96167 in PyEval_EvalFrame () from /usr/lib64/libpython2.4.so.1.0 […] #12 0x00000035d1a1d994 in __libc_start_main () from /lib64/libc.so.6 #13 0x0000000000400629 in _start ()
  • 49. Epier ses faits et gestes La pratique Cas 1: Mais pourquoi le login dans GLPI est-il lent ? 18:16:14.272226 execve("/usr/bin/rsh", ["/usr/bin/rsh", "tours.inra.fr", "-l", "www-data", "exec", "/usr/sbin/rimapd"], [/* 8 vars */]) = 0 […] 18:16:14.309918 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3 18:16:14.309990 connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 ETIMEDOUT 18:16:29.305480 time(NULL) = 1308154589 […] 18:16:29.321394 connect(23, {sa_family=AF_INET, sin_port=htons(143), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 EINPROGRESS
  • 50. Epier ses faits et gestes La pratique Cas 1: Mais pourquoi le login dans GLPI est-il lent ? 18:16:14.272226 execve("/usr/bin/rsh", ["/usr/bin/rsh", "tours.inra.fr", "-l", "www-data", "exec", "/usr/sbin/rimapd"], [/* 8 vars */]) = 0 […] 18:16:14.309918 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3 18:16:14.309990 connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 ETIMEDOUT 18:16:29.305480 time(NULL) = 1308154589 […] 18:16:29.321394 connect(23, {sa_family=AF_INET, sin_port=htons(143), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 EINPROGRESS GLPI lance un processus rsh pour se connecter sur tours.inra.fr ?!
  • 51. Epier ses faits et gestes La pratique Cas 1: Mais pourquoi le login dans GLPI est-il lent ? 18:16:14.272226 execve("/usr/bin/rsh", ["/usr/bin/rsh", "tours.inra.fr", "-l", "www-data", "exec", "/usr/sbin/rimapd"], [/* 8 vars */]) = 0 […] 18:16:14.309918 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3 18:16:14.309990 connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 ETIMEDOUT 18:16:29.305480 time(NULL) = 1308154589 […] 18:16:29.321394 connect(23, {sa_family=AF_INET, sin_port=htons(143), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 EINPROGRESS On a perdu 15 secondes entre ces deux appels
  • 52. Epier ses faits et gestes La pratique Cas 1: Mais pourquoi le login dans GLPI est-il lent ? 18:16:14.272226 execve("/usr/bin/rsh", ["/usr/bin/rsh", "tours.inra.fr", "-l", "www-data", "exec", "/usr/sbin/rimapd"], [/* 8 vars */]) = 0 […] 18:16:14.309918 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3 18:16:14.309990 connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 ETIMEDOUT 18:16:29.305480 time(NULL) = 1308154589 […] 18:16:29.321394 connect(23, {sa_family=AF_INET, sin_port=htons(143), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 EINPROGRESS On a perdu 15 secondes entre ces deux appels A cause d’une tentative de connexion ssh qui finit en timeout (port non ouvert)
  • 53. Epier ses faits et gestes La pratique Cas 1: Mais pourquoi le login dans GLPI est-il lent ? 18:16:14.272226 execve("/usr/bin/rsh", ["/usr/bin/rsh", "tours.inra.fr", "-l", "www-data", "exec", "/usr/sbin/rimapd"], [/* 8 vars */]) = 0 […] 18:16:14.309918 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3 18:16:14.309990 connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 ETIMEDOUT 18:16:29.305480 time(NULL) = 1308154589 […] 18:16:29.321394 connect(23, {sa_family=AF_INET, sin_port=htons(143), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 EINPROGRESS GLPI essaie ensuite de connecter en imap sur tours.inra.fr
  • 54. Epier ses faits et gestes La pratique Cas 1: Mais pourquoi le login dans GLPI est-il lent ? 18:16:14.272226 execve("/usr/bin/rsh", ["/usr/bin/rsh", "tours.inra.fr", "-l", "www-data", "exec", "/usr/sbin/rimapd"], [/* 8 vars */]) = 0 […] 18:16:14.309918 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3 18:16:14.309990 connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 ETIMEDOUT 18:16:29.305480 time(NULL) = 1308154589 […] 18:16:29.321394 connect(23, {sa_family=AF_INET, sin_port=htons(143), sin_addr=inet_addr("194.167.77.30")}, 16) = -1 EINPROGRESS  glpi exécute des tâches périodiques quand quelqu’un se connecte  La tâche de récupération des tickets mail essayait d’abord de faire une connexion IMAP par ssh avant de faire une connexion IMAP standard
  • 55. Epier ses faits et gestes La pratique Cas 2: Problème de compilation Vu su foru r le m PEP I # R CMD INSTALL Rmpi_0.5-9.tar.gz […] Error in dyn.load(file, DLLpath = DLLpath, ...) : unable to load shared object '/usr/lib64/R/library/Rmpi/libs/Rmpi.so': libmpi.so.0: cannot open shared object file: No such file or directory
  • 56. Epier ses faits et gestes La pratique Cas 2: Problème de compilation Vu su foru r le m PEP I # R CMD INSTALL Rmpi_0.5-9.tar.gz […] Error in dyn.load(file, DLLpath = DLLpath, ...) : unable to load shared object '/usr/lib64/R/library/Rmpi/libs/Rmpi.so': libmpi.so.0: cannot open shared object file: No such file or directory # ls /usr/local/lib/libmpi.so.0 /usr/local/lib/libmpi.so.0 Pourtant la librairie est bien là !?
  • 57. Epier ses faits et gestes La pratique Cas 2: Problème de compilation Vu su foru r le m PEP I # R CMD INSTALL Rmpi_0.5-9.tar.gz […] Error in dyn.load(file, DLLpath = DLLpath, ...) : unable to load shared object '/usr/lib64/R/library/Rmpi/libs/Rmpi.so': libmpi.so.0: cannot open shared object file: No such file or directory # ls /usr/local/lib/libmpi.so.0 /usr/local/lib/libmpi.so.0 # strace -f R CMD INSTALL Rmpi_0.5-9.tar.gz 2>&1 | grep libmpi.so open("/usr/local/lib64/libmpi.so.0", O_RDONLY) = -1 ENOENT open("/lib64/libmpi.so.0", O_RDONLY) = -1 ENOENT open("/usr/lib64/libmpi.so.0", O_RDONLY) = -1 ENOENT […] La librairie est recherchée dans des répertoires /lib64/
  • 58. Epier ses faits et gestes La pratique Cas 2: Problème de compilation Vu su foru r le m PEP I # R CMD INSTALL Rmpi_0.5-9.tar.gz […] Error in dyn.load(file, DLLpath = DLLpath, ...) : unable to load shared object '/usr/lib64/R/library/Rmpi/libs/Rmpi.so': libmpi.so.0: cannot open shared object file: No such file or directory # ls /usr/local/lib/libmpi.so.0 /usr/local/lib/libmpi.so.0 # strace -f R CMD INSTALL Rmpi_0.5-9.tar.gz 2>&1 | grep libmpi.so open("/usr/local/lib64/libmpi.so.0", O_RDONLY) = -1 ENOENT open("/lib64/libmpi.so.0", O_RDONLY) = -1 ENOENT open("/usr/lib64/libmpi.so.0", O_RDONLY) = -1 ENOENT […]  /usr/local/lib/ n’est pas dans le chemin de recherche des librairies 64 bits !
  • 59. Epier ses faits et gestes La pratique Cas 3: Plantage d’un webmail lors de la consultation # gdb –p PID_Process_Apache ou gdb fichier_core 0 0xb6b8d25d in mail_search_full () from /usr/lib/libc-client.so.2002edebian 1 0xb6c33c3b in zif_imap_search () from /usr/lib/php5/20060613+lfs/imap.so 2 0xb73ea60f in execute () from /usr/lib/apache2/modules/libphp5.so […] 13 0xb7376482 in php_execute_script () from /usr/lib/apache2/modules/libphp5.so 15 0x08074607 in ap_run_handler () […] 23 0x0806224f in main ()
  • 60. Epier ses faits et gestes La pratique Cas 3: Plantage d’un webmail lors de la consultation # gdb –p PID_Process_Apache ou gdb fichier_core 0 0xb6b8d25d in mail_search_full () from /usr/lib/libc-client.so.2002edebian 1 0xb6c33c3b in zif_imap_search () from /usr/lib/php5/20060613+lfs/imap.so 2 0xb73ea60f in execute () from /usr/lib/apache2/modules/libphp5.so […] 13 0xb7376482 in php_execute_script () from /usr/lib/apache2/modules/libphp5.so 15 0x08074607 in ap_run_handler () […] 23 0x0806224f in main () Le plantage semble survenir dans cette librairie
  • 61. Epier ses faits et gestes La pratique Cas 3: Plantage d’un webmail lors de la consultation # gdb –p PID_Process_Apache ou gdb fichier_core 0 0xb6b8d25d in mail_search_full () from /usr/lib/libc-client.so.2002edebian 1 0xb6c33c3b in zif_imap_search () from /usr/lib/php5/20060613+lfs/imap.so 2 0xb73ea60f in execute () from /usr/lib/apache2/modules/libphp5.so […] 13 0xb7376482 in php_execute_script () from /usr/lib/apache2/modules/libphp5.so 15 0x08074607 in ap_run_handler () A quel paquet appartient […] cette librairie ? 23 0x0806224f in main () # dpkg -S /usr/lib/libc-client.so.2002edebian libc-client2002edebian: /usr/lib/libc-client.so.2002edebian
  • 62. Epier ses faits et gestes La pratique Cas 3: Plantage d’un webmail lors de la consultation # gdb –p PID_Process_Apache ou gdb fichier_core 0 0xb6b8d25d in mail_search_full () from /usr/lib/libc-client.so.2002edebian 1 0xb6c33c3b in zif_imap_search () from /usr/lib/php5/20060613+lfs/imap.so 2 0xb73ea60f in execute () from /usr/lib/apache2/modules/libphp5.so […] 13 0xb7376482 in php_execute_script () from /usr/lib/apache2/modules/libphp5.so 15 0x08074607 in ap_run_handler () Y a-t-il des bugs connus […] pour ce paquet ? 23 0x0806224f in main () # dpkg -S /usr/lib/libc-client.so.2002edebian libc-client2002edebian: /usr/lib/libc-client.so.2002edebian # Consultation de http://bugs.debian.org/libc-client2002edebian
  • 63. Epier ses faits et gestes La pratique Cas 3: Plantage d’un webmail lors de la consultation # gdb –p PID_Process_Apache ou gdb fichier_core 0 0xb6b8d25d in mail_search_full () from /usr/lib/libc-client.so.2002edebian 1 0xb6c33c3b in zif_imap_search () from /usr/lib/php5/20060613+lfs/imap.so 2 0xb73ea60f in execute () from /usr/lib/apache2/modules/libphp5.so […] 13 0xb7376482 in php_execute_script () from /usr/lib/apache2/modules/libphp5.so 15 0x08074607 in ap_run_handler () […] 23 0x0806224f in main () # dpkg -S /usr/lib/libc-client.so.2002edebian Bin libc-client2002edebian: /usr/lib/libc-client.so.2002edebian go ! # Consultation de http://bugs.debian.org/libc-client2002edebian  Bug 502996: Segfaults if IMAP server sends more than 30 user flags
  • 64. 3. Intercepter ses communications C’es grâce à [l’interception des communications allemandes] que nous avons gagné la guerre. Churchill
  • 65. Intercepter ses communications Quelques outils utiles tcpdump / snoop: outil de capture de bas niveau Usage classique: tcpdump -s 0 -w /tmp/capture.cap tcp port Numero_port
  • 66. Intercepter ses communications Quelques outils utiles tcpdump / snoop: outil de capture de bas niveau Usage classique: tcpdump -s 0 -w /tmp/capture.cap tcp port Numero_port wireshark / tshark: pour faire l’analyse des captures • Un outil très puissant à connaître absolument, • capable de décoder énormément de protocole réseau HTTPS, LDAP, ethernet, TCP, UDP, IP, …) (SQL, HTTP,
  • 67. Intercepter ses communications Quelques outils utiles tcpdump / snoop: outil de capture de bas niveau Usage classique: tcpdump -s 0 -w /tmp/capture.cap tcp port Numero_port wireshark / tshark: pour faire l’analyse des captures • Un outil très puissant à connaître absolument, • capable de décoder énormément de protocole réseau (SQL, HTTP, HTTPS, LDAP, ethernet, TCP, UDP, IP, …) l’extension livehttpheaders de Firefox: pour connaître les échanges HTTP lors de la consultation d’une page
  • 68. Intercepter ses communications Les bases à savoir pour analyser les flux Acquittement des paquets Etablissement de la connexion S yn Client + Syn Seq = 2, Ac k Serveur Ack Client Len = 4, Ack = 0, Len = q = 0, Se Seq = 6, Len Ack = 0 6 Serveur = 8, A ck = 0 Traduction en capture tcpdump / wireshark Traduction en capture tcpdump / wireshark 192.168.0.156 209.85.148.106 TCP 45261 > 80 [SYN] 209.85.148.106 192.168.0.156 TCP 80 > 45261 [SYN, ACK] 192.168.0.156 209.85.148.106 TCP 45261 > 80 [ACK] 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=2 Len=4 Ack=0 209.85.148.106 192.168.0.156 TCP 80 > 6238 Seq=0 Len=0 Ack=6 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=6 Len=8 Ack=0
  • 69. Intercepter ses communications Les bases à savoir pour analyser les flux Acquittement des paquets Etablissement de la connexion S yn Client Seq = 2, Serveur Client Len = 4, Ack = 0, Len = q = 0, Se Seq = 6, Len Ack = 0 6 Serveur = 8, A ck = 0 Traduction en capture tcpdump / wireshark Traduction en capture tcpdump / wireshark 192.168.0.156 209.85.148.106 TCP 45261 > 80 [SYN] 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=2 Len=4 Ack=0 209.85.148.106 192.168.0.156 TCP 80 > 6238 Seq=0 Len=0 Ack=6 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=6 Len=8 Ack=0
  • 70. Intercepter ses communications Les bases à savoir pour analyser les flux Acquittement des paquets Etablissement de la connexion S yn Client + Syn Seq = 2, Ac k Serveur Client Len = 4, Ack = 0, Len = q = 0, Se Seq = 6, Len Ack = 0 6 Serveur = 8, A ck = 0 Traduction en capture tcpdump / wireshark Traduction en capture tcpdump / wireshark 192.168.0.156 209.85.148.106 TCP 45261 > 80 [SYN] 209.85.148.106 192.168.0.156 TCP 80 > 45261 [SYN, ACK] 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=2 Len=4 Ack=0 209.85.148.106 192.168.0.156 TCP 80 > 6238 Seq=0 Len=0 Ack=6 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=6 Len=8 Ack=0
  • 71. Intercepter ses communications Les bases à savoir pour analyser les flux Acquittement des paquets Etablissement de la connexion S yn Client + Syn Seq = 2, Ac k Serveur Ack Client Len = 4, Ack = 0, Len = q = 0, Se Seq = 6, Len Ack = 0 6 Serveur = 8, A ck = 0 Traduction en capture tcpdump / wireshark Traduction en capture tcpdump / wireshark 192.168.0.156 209.85.148.106 TCP 45261 > 80 [SYN] 209.85.148.106 192.168.0.156 TCP 80 > 45261 [SYN, ACK] 192.168.0.156 209.85.148.106 TCP 45261 > 80 [ACK] 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=2 Len=4 Ack=0 209.85.148.106 192.168.0.156 TCP 80 > 6238 Seq=0 Len=0 Ack=6 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=6 Len=8 Ack=0
  • 72. Intercepter ses communications Les bases à savoir pour analyser les flux Acquittement des paquets Etablissement de la connexion S yn Client Rst Seq = 2, Serveur Client Len = 4, Ack = 0, Len = q = 0, Se Seq = 6, Len Ack = 0 6 Serveur = 8, A ck = 0 Traduction en capture tcpdump / wireshark Traduction en capture tcpdump / wireshark 192.168.0.156 209.85.148.106 TCP 45261 > 80 [SYN] 209.85.148.106 192.168.0.156 TCP 80 > 45261 [RST] 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=2 Len=4 Ack=0 209.85.148.106 192.168.0.156 TCP 80 > 6238 Seq=0 Len=0 Ack=6 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=6 Len=8 Ack=0
  • 73. Intercepter ses communications Les bases à savoir pour analyser les flux Acquittement des paquets Etablissement de la connexion S yn Client + Syn Seq = 2, Ac k Serveur Ack Len = 4, Ack = Client 0 Serveur J’ai déjà envoyé 2 octets Je t’envoie 4 nouveaux octets Traduction en capture tcpdump / wireshark Traduction en capture tcpdump / wireshark 192.168.0.156 209.85.148.106 TCP 45261 > 80 [SYN] 209.85.148.106 192.168.0.156 TCP 80 > 45261 [SYN, ACK] 192.168.0.156 209.85.148.106 TCP 45261 > 80 [ACK] 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=2 Len=4 Ack=0
  • 74. Intercepter ses communications Les bases à savoir pour analyser les flux Acquittement des paquets Etablissement de la connexion S yn Client + Syn Seq = 2, Ac k Serveur Ack Client Len = 4, Ack = 0, Len = q = 0, Se Ack = 0 6 Serveur J’ai bien reçu 6 octets en tout Traduction en capture tcpdump / wireshark Traduction en capture tcpdump / wireshark 192.168.0.156 209.85.148.106 TCP 45261 > 80 [SYN] 209.85.148.106 192.168.0.156 TCP 80 > 45261 [SYN, ACK] 192.168.0.156 209.85.148.106 TCP 45261 > 80 [ACK] 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=2 Len=4 Ack=0 209.85.148.106 192.168.0.156 TCP 80 > 6238 Seq=0 Len=0 Ack=6
  • 75. Intercepter ses communications Les bases à savoir pour analyser les flux Acquittement des paquets Etablissement de la connexion S yn Client + Syn Seq = 2, Ac k Serveur Ack Client Len = 4, Ack = 0, Len = q = 0, Se Seq = 6, Len Ack = 0 6 Serveur = 8, A ck = 0 Tu as bien reçu mes 6 octets alors je t’en envoie 8 de plus Traduction en capture tcpdump / wireshark Traduction en capture tcpdump / wireshark 192.168.0.156 209.85.148.106 TCP 45261 > 80 [SYN] 209.85.148.106 192.168.0.156 TCP 80 > 45261 [SYN, ACK] 192.168.0.156 209.85.148.106 TCP 45261 > 80 [ACK] 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=2 Len=4 Ack=0 209.85.148.106 192.168.0.156 TCP 80 > 6238 Seq=0 Len=0 Ack=6 192.168.0.156 209.85.148.106 TCP 6238 > 80 Seq=6 Len=8 Ack=0
  • 76. Intercepter ses communications La pratique Cas 1: Lenteur d’accès aléatoire à des sites Web Capture depuis le serveur web 53 0.487102 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK Seq=3306 Ack=395, Len=567 54 0.488361 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 55 0.586329 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 … 56 5.260048 138.102.118.170 138.102.70.2 TCP [Retransmission] Seq=3306 Ack=395, Len=567 57 5.306327 138.102.70.2 138.102.118.170 HTTP GET /toto HTTP/1.0 Seq=395 Ack=3873, Len=325 Capture avant le routeur 53 54 55 56 0.488462 0.586425 5.260831 5.306787 138.102.70.2 138.102.118.170 138.102.70.2 138.102.118.170 138.102.118.170 138.102.70.2 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 HTTP HTTP/1.1 200 OK (text/css) HTTP GET /7pc/images/eurosfaire-trans.gif HTTP/1.0
  • 77. Intercepter ses communications La pratique Cas 1: Lenteur d’accès aléatoire à des sites Web Capture depuis le serveur web 53 0.487102 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK Seq=3306 Ack=395, Len=567 54 0.488361 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 55 0.586329 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 … 56 5.260048 138.102.118.170 138.102.70.2 TCP [Retransmission] Seq=3306 Ack=395, Len=567 57 5.306327 138.102.70.2 138.102.118.170 HTTP GET /toto HTTP/1.0 Seq=395 Ack=3873, Len=325 Capture avant le routeur 53 54 55 56 0.488462 0.586425 5.260831 5.306787 138.102.70.2 138.102.118.170 138.102.70.2 138.102.118.170 138.102.118.170 138.102.70.2 138.102.70.2 138.102.118.170 Le serveur envoie TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 3306 + 395 = 3873 octets TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 HTTP HTTP/1.1 200 OK (text/css) HTTP GET /7pc/images/eurosfaire-trans.gif HTTP/1.0
  • 78. Intercepter ses communications La pratique Cas 1: Lenteur d’accès aléatoire à des sites Web Capture depuis le serveur web 53 0.487102 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK Seq=3306 Ack=395, Len=567 54 0.488361 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 55 0.586329 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 … 56 5.260048 138.102.118.170 138.102.70.2 TCP [Retransmission] Seq=3306 Ack=395, Len=567 57 5.306327 138.102.70.2 138.102.118.170 HTTP GET /toto HTTP/1.0 Seq=395 Ack=3873, Len=325 Capture avant le routeur 53 54 55 56 0.488462 0.586425 5.260831 5.306787 138.102.70.2 138.102.118.170 138.102.70.2 138.102.118.170 138.102.118.170 138.102.70.2 138.102.70.2 138.102.118.170 Le client accuse réception TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 de 1846 octets TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 HTTP HTTP/1.1 200 OK (text/css) HTTP GET /7pc/images/eurosfaire-trans.gif HTTP/1.0
  • 79. Intercepter ses communications La pratique Cas 1: Lenteur d’accès aléatoire à des sites Web Capture depuis le serveur web 53 0.487102 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK Seq=3306 Ack=395, Len=567 54 0.488361 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 55 0.586329 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 … 56 5.260048 138.102.118.170 138.102.70.2 TCP [Retransmission] Seq=3306 Ack=395, Len=567 57 5.306327 138.102.70.2 138.102.118.170 HTTP GET /toto HTTP/1.0 Seq=395 Ack=3873, Len=325 Capture avant le routeur 53 54 55 56 0.488462 0.586425 5.260831 5.306787 138.102.70.2 138.102.118.170 138.102.70.2 138.102.118.170 138.102.118.170 138.102.70.2 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 TCP 58683 >Le client accuse réception http [ACK] Seq=395 Ack=3306 Len=0 HTTP HTTP/1.1 200 de 3306 octets OK (text/css) HTTP GET /7pc/images/eurosfaire-trans.gif HTTP/1.0
  • 80. Intercepter ses communications La pratique Cas 1: Lenteur d’accès aléatoire à des sites Web Capture depuis le serveur web 53 0.487102 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK Seq=3306 Ack=395, Len=567 54 0.488361 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 55 0.586329 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 … 56 5.260048 138.102.118.170 138.102.70.2 TCP [Retransmission] Seq=3306 Ack=395, Len=567 57 5.306327 138.102.70.2 138.102.118.170 HTTP GET /toto HTTP/1.0 Seq=395 Ack=3873, Len=325 Capture avant le routeur 53 54 55 56 0.488462 0.586425 5.260831 5.306787 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 Le serveur TCP 58683 > http [ACK] 138.102.70.2 138.102.118.170 attend l’accusé de Seq=395 Ack=3306 Len=0 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK (text/css) réception de ces 3873 octets… 138.102.70.2 138.102.118.170 HTTP GET /7pc/images/eurosfaire-trans.gif HTTP/1.0
  • 81. Intercepter ses communications La pratique Cas 1: Lenteur d’accès aléatoire à des sites Web Capture depuis le serveur web 53 0.487102 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK Seq=3306 Ack=395, Len=567 54 0.488361 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 55 0.586329 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 … 56 5.260048 138.102.118.170 138.102.70.2 TCP [Retransmission] Seq=3306 Ack=395, Len=567 57 5.306327 138.102.70.2 138.102.118.170 HTTP GET /toto HTTP/1.0 Seq=395 Ack=3873, Len=325 Capture avant le routeur 53 54 55 56 0.488462 0.586425 5.260831 5.306787 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 Pendant 5 secondes !! 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK (text/css) 138.102.70.2 138.102.118.170 HTTP GET /7pc/images/eurosfaire-trans.gif HTTP/1.0
  • 82. Intercepter ses communications La pratique Cas 1: Lenteur d’accès aléatoire à des sites Web Capture depuis le serveur web 53 0.487102 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK Seq=3306 Ack=395, Len=567 54 0.488361 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 55 0.586329 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 … 56 5.260048 138.102.118.170 138.102.70.2 TCP [Retransmission] Seq=3306 Ack=395, Len=567 57 5.306327 138.102.70.2 138.102.118.170 HTTP GET /toto HTTP/1.0 Seq=395 Ack=3873, Len=325 Capture avant le routeur 53 54 55 56 0.488462 0.586425 5.260831 5.306787 138.102.70.2 138.102.118.170 138.102.70.2 138.102.118.170 138.102.118.170 138.102.70.2 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 TCP 58683 >Il décide ensuite Ack=3306 Len=0 http [ACK] Seq=395 de HTTP HTTP/1.1 200 OK (text/css) retransmettre le paquet HTTP GET /7pc/images/eurosfaire-trans.gif HTTP/1.0
  • 83. Intercepter ses communications La pratique Cas 1: Lenteur d’accès aléatoire à des sites Web Capture depuis le serveur web 53 0.487102 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK Seq=3306 Ack=395, Len=567 54 0.488361 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 55 0.586329 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 … 56 5.260048 138.102.118.170 138.102.70.2 TCP [Retransmission] Seq=3306 Ack=395, Len=567 57 5.306327 138.102.70.2 138.102.118.170 HTTP GET /toto HTTP/1.0 Seq=395 Ack=3873, Len=325 Capture avant le routeur 53 54 55 56 0.488462 0.586425 5.260831 5.306787 138.102.70.2 138.102.118.170 138.102.70.2 138.102.118.170 138.102.118.170 138.102.70.2 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 Il OK (text/css) HTTP HTTP/1.1 200reçoit bien l’accusé de HTTP GET /7pc/images/eurosfaire-trans.gif HTTP/1.0 réception des 3873 octets cette fois-ci
  • 84. Intercepter ses communications La pratique Cas 1: Lenteur d’accès aléatoire à des sites Web Capture depuis le serveur web 53 0.487102 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK Seq=3306 Ack=395, Len=567 54 0.488361 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 55 0.586329 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 … 56 5.260048 138.102.118.170 138.102.70.2 TCP [Retransmission] Seq=3306 Ack=395, Len=567 57 5.306327 138.102.70.2 138.102.118.170 HTTP GET /toto HTTP/1.0 Seq=395 Ack=3873, Len=325 Capture avant le routeur 53 54 55 56 0.488462 0.586425 5.260831 5.306787 138.102.70.2 138.102.118.170 138.102.70.2 138.102.118.170 138.102.118.170 138.102.70.2 138.102.70.2 138.102.118.170 Avant le routeur, tout est identique… ? TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 HTTP HTTP/1.1 200 OK (text/css) HTTP GET /7pc/images/eurosfaire-trans.gif HTTP/1.0 … sauf que le 1er paquet envoyé au client n’apparait pas !
  • 85. Intercepter ses communications La pratique Cas 1: Lenteur d’accès aléatoire à des sites Web Capture depuis le serveur web 53 0.487102 138.102.118.170 138.102.70.2 HTTP HTTP/1.1 200 OK Seq=3306 Ack=395, Len=567 54 0.488361 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 55 0.586329 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 … 56 5.260048 138.102.118.170 138.102.70.2 TCP [Retransmission] Seq=3306 Ack=395, Len=567 57 5.306327 138.102.70.2 138.102.118.170 HTTP GET /toto HTTP/1.0 Seq=395 Ack=3873, Len=325 Capture avant le routeur 53 54 55 56 0.488462 0.586425 5.260831 5.306787 138.102.70.2 138.102.118.170 138.102.70.2 138.102.118.170 138.102.118.170 138.102.70.2 138.102.70.2 138.102.118.170 TCP 58683 > http [ACK] Seq=395 Ack=1846 Len=0 TCP 58683 > http [ACK] Seq=395 Ack=3306 Len=0 HTTP HTTP/1.1 200 OK (text/css) HTTP GET /7pc/images/eurosfaire-trans.gif HTTP/1.0  Le paquet était perdu dans le routeur dont il a fallu faire changer la carte
  • 86. Intercepter ses communications La pratique Cas 2: Problème de performance sous tomcat $ strace -tt -f -e trace='!clock_gettime,futex,gettimeofday' -p 29927 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 […] (en boucle)
  • 87. Intercepter ses communications La pratique Cas 2: Problème de performance sous tomcat $ strace -tt -f -e trace='!clock_gettime,futex,gettimeofday' -p 29927 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 […] (en boucle) Vers qui sont envoyées toutes ces requêtes ?
  • 88. Intercepter ses communications La pratique Cas 2: Problème de performance sous tomcat $ strace -tt -f -e trace='!clock_gettime,futex,gettimeofday' -p 29927 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 […] (en boucle) $ lsof -d 243 -a -p 5937 java 29927 appli 243u IPv6 247 TCP appserver:60170->pgsql.inra.fr:5432 (ESTABLISHED)
  • 89. Intercepter ses communications La pratique Cas 2: Problème de performance sous tomcat $ strace -tt -f -e trace='!clock_gettime,futex,gettimeofday' -p 29927 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 […] (en boucle) $ lsof -d 243 -a -p 5937 java 29927 appli 243u IPv6 247 TCP appserver:60170->pgsql.inra.fr:5432 (ESTABLISHED) Il communique avec le serveur postgres
  • 90. Intercepter ses communications La pratique Cas 2: Problème de performance sous tomcat $ strace -tt -f -e trace='!clock_gettime,futex,gettimeofday' -p 29927 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 […] (en boucle) $ lsof -d 243 -a -p 5937 java 29927 appli 243u IPv6 247 TCP appserver:60170->pgsql.inra.fr:5432 (ESTABLISHED) $ tcpdump -s 0 -w /tmp/capture.cap tcp port 5432 On écoute plus précisément ce qu’ils se disent
  • 91. Intercepter ses communications La pratique Cas 2: Problème de performance sous tomcat $ strace -tt -f -e trace='!clock_gettime,futex,gettimeofday' -p 29927 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 […] (en boucle) $ lsof -d 243 -a -p 5937 java 29927 appli 243u IPv6 247 TCP appserver:60170->pgsql.inra.fr:5432 (ESTABLISHED) $ tcpdump -s 0 -w /tmp/capture.cap tcp port 5432 Sous wireshark, on voit toujours la même requête ?!
  • 92. Intercepter ses communications La pratique Cas 2: Problème de performance sous tomcat $ strace -tt -f -e trace='!clock_gettime,futex,gettimeofday' -p 29927 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 […] (en boucle) $ lsof -d 243 -a -p 5937 java 29927 appli 243u IPv6 247 TCP appserver:60170->pgsql.inra.fr:5432 (ESTABLISHED) $ tcpdump -s 0 -w /tmp/capture.cap tcp port 5432 $ strings -a | grep "^select" | wc -l Combien de requêtes SQL ? 8467 $ strings -a | grep "^select" | sort -u | wc -l 1
  • 93. Intercepter ses communications La pratique Cas 2: Problème de performance sous tomcat $ strace -tt -f -e trace='!clock_gettime,futex,gettimeofday' -p 29927 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 […] (en boucle) $ lsof -d 243 -a -p 5937 java 29927 appli 243u IPv6 247 TCP appserver:60170->pgsql.inra.fr:5432 (ESTABLISHED) $ tcpdump -s 0 -w /tmp/capture.cap tcp port 5432 $ strings -a /tmp/capture.cap | grep "^select" | wc -l 8467 $ strings -a /tmp/capture.cap | grep "^select" | sort -u | wc -l 1 Combien de requêtes SQL uniques ?
  • 94. Intercepter ses communications La pratique Cas 2: Problème de performance sous tomcat $ strace -tt -f -e trace='!clock_gettime,futex,gettimeofday' -p 29927 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 send(243, "P002<0select donneesjcr0_.id as i"..., 617, 0) = 617 recv(243, "100000420004T001z0fid4_0_000@2701000"..., 8192, 0) = 487 […] (en boucle) $ lsof -d 243 -a -p 5937 java 29927 appli 243u IPv6 247 TCP appserver:60170->pgsql.inra.fr:5432 (ESTABLISHED) $ tcpdump -s 0 -w /tmp/capture.cap tcp port 5432 $ strings -a /tmp/capture.cap | grep "^select" | wc -l 8467 $ strings -a /tmp/capture.cap | grep "^select" | sort -u | wc -l 1  L’application effectue la même requête sql en boucle !!
  • 95. Questions ?
  • 96. Annexe
  • 97. 5. Connaître son passé
  • 98. Connaître son passé La problématique Les problèmes n’arrivent pas toujours quand un administrateur est présent (nuit, week-end…) Les outils de monitoring classiques (Cacti, Nagios, Zabbix…) ne permettent pas de faire des diagnostics précis dans le passé – aggrégations des données trop rapides, – peu d’indicateurs détaillées, – grain pas assez fin (pas de vision par processus ou utilisateurs…)  Un besoin d’outils adapté pour le diagnostic
  • 99. Connaître son passé dim_stat, une solution Pour ceux qui ne peuvent pas s’offrir Sysload, Patrol… Un outil gratuit (mais pas réellement open-source) Librement téléchargeable sur http://dimitrik.free.fr/ Une interface fruste mais puissante De nombreuses sondes par défaut (tout l’historique des commandes iostat, vmstat, iostat, netstat sans perte de données) Très facilement extensible (sondes mysql, java…) Exemples de requêtes possibles: • • • Quels sont les 10 processus qui ont occupé le plus de mémoire entre 22h et 4h du matin ? Quel est le taux d’interruption du CPU 2 entre 2h et 4h ? Quel utilisateur a consommé tout le CPU entre 5h et 6h ?
  • 100. Connaître son passé Exemple d’utilisation Cas 1: Comprendre les raisons d’une saturation mémoire Sous Solaris, le répertoire /tmp est stocké en mémoire et son occupation peut saturer la mémoire  comment savoir si des saturations étaient dues au /tmp ou à des processus ? 2 septembre 2011 90% RAM occupé par les processus, ce sont eux qui saturent la mémoire ! 9 septembre 2011 60% RAM seulement, C’est le /tmp qui doit occuper le reste de la mémoire !!!
  • 101. 6. Passer à la vitesse supérieure
  • 102. Passer à la vitesse supérieure 2 outils pour aller plus loin Dtrace sous Solaris: un outil d’analyse et de profilage du système extrêmement puissant • le précurseur, créé en 2003 et disponible depuis Solaris 10 • totalement sûr, avec un impact faible, conçu pour être utilisé en production • permet d’accéder à énormément d’information du système, • un language de scripting spécifique: le D b Systemtap sous Linux: l’équivalent pour Linux, créé en 2005, • disponible nativement dans Redhat depuis la version 5.2 • scripts systemtap compilés et chargés en tant que module noyau
  • 103. Passer à la vitesse supérieure dtrace et systemtap Des outils puissants qui permettent de répondre aux questions suivantes: Quels sont les processus qui génèrent le plus d’entrées/sorties disque ? Quels processus sont responsables d’une occupation CPU Système importante ? Quels sont les processus qui génèrent le plus de traffic réseau ? Quels sont les processus qui accèdent de manière brève à ce fichier ? Quelle processus est responsable de la suppression de fichiers ? … Des outils complexes à maîtriser ! Mais il existe de nombreux scripts directement utilisables sur le net: • DtraceToolkit: http://hub.opensolaris.org/bin/view/Community+Group+dtrace/dtracetoolkit • Exemples Systemtap: http://sourceware.org/systemtap/examples/

×