web-dev-qa-db-fra.com

Comment puis-je avoir tcpdump écrire dans un fichier et produire en sortie standard les données appropriées?

Je veux que tcpdump écrive les données de paquet brutes dans un fichier et affiche l'analyse des paquets en sortie standard au fur et à mesure que les paquets sont capturés (par analyse, je veux dire les lignes qu'il affiche normalement quand -w est manquant). Quelqu'un peut-il me dire s'il vous plaît comment faire cela?

44
user2565010

Voici une façon élégante de faire ce que vous voulez:

tcpdump -w - | tee somefile | tcpdump -r -

Ce qu'il fait:

  • -w - dit à tcpdump d'écrire des données binaires dans stdout
  • tee écrit ces données binaires dans un fichier ET dans son propre stdout
  • -r - indique au second tcpdump de récupérer ses données à partir de stdin
93
cnicutar

Si vous voulez un moyen de le faire sans exécuter tcpdump deux fois, considérez:

Sudo tcpdump port 80 -w $(tty) | tee /tmp/output.txt

A partir de l'invite de commande interactive, vous pouvez utiliser $TTY À la place de $(tty), mais dans un script, le premier ne serait pas défini scénario).

Note latérale: ce n'est pas très Unix-y comme tcpdump vous fait écrire dans un fichier. Les programmes doivent par défaut écrire sur stdout. La redirection vers un fichier est déjà fournie par les constructions Shell. Peut-être y a-t-il une bonne raison pour que tcpdump soit conçu de cette façon, mais je ne sais pas ce que c'est.

0
Sridhar Sarnobat