Je veux un moyen simple d'afficher toutes les données TCP (pas les en-têtes TCP ou autre) passant par n'importe quelle interface de ma machine Linux.
Par exemple, je veux une commande magique qui, si je le fais:
magic_commmand_I_want port=1234
alors s'il y avait un serveur qui écoutait sur le port 1234 sur ma machine et que quelqu'un faisait:
echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a Host/port
Ensuite, la commande magique afficherait simplement:
hello
J'ai essayé "tcpdump", "Ethereal", "tethereal", "tshark" et d'autres, mais il n'est pas évident de savoir comment les obtenir:
Oui, vous pouvez probablement enchaîner un ensemble de commandes unix canalisées pour faire cela, mais ce n'est pas très facile à retenir pour la prochaine fois :)
Si vous avez un exemple simple d'une ligne de commande exacte qui fait cela, c'est ce que je voudrais.
Mise à jour:
Comme l'a souligné Michal dans les commentaires: À partir de tcpflow version 1.3, l'option -e est utilisée pour spécifier le nom du scanner. Ainsi, l'erreur "Nom de scanner non valide '8983'" est imprimée. La commande correcte est
Sudo tcpflow -i any -C -J port 1234
(-J
a également été remplacé par -g
dans la dernière version)
Merci à yves de m'avoir dirigé vers " tcpflow ". Voici la ligne de commande:
tcpflow -i any -C -e port 1234 # as root, or with Sudo
Cela fait tout ce que je veux
Le "-C
" lui dit de sauvegarder sur la console au lieu d'un fichier. Le "-e
" active les couleurs afin que client-> serveur et serveur-> client soient visuellement distincts.
J'ai installé tcpflow simplement en faisant
Sudo apt-get install tcpflow
socat est l'outil que vous demandez. Il peut agir en tant que proxy:
$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello
alors votre application doit connecter le port 4444 au lieu de se connecter directement à 1234
L'option -v permet à socat d'imprimer tout ce qu'il reçoit sur l'erreur standard (stderr).
Mettre à jour:
Si socat n'est pas disponible sur votre machine, vous pouvez toujours l'émuler de cette façon avec netcat:
$netcat -l -p 4444 | tee output_file | netcat localhost 1234
mises en garde: cette option est unidirectionnelle. la seconde instance netcat imprimera toute réponse de votre serveur sur la sortie standard. Vous pouvez toujours faire alors:
$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
Essayez Wireshark . C'est un excellent analyseur de protocole destiné à Linux et Windows.
tcpflow est ce que vous voulez. Extrait de la page de manuel:
LA DESCRIPTION
tcpflow est un programme qui capture les données transmises dans le cadre de TCP connexions (flux) et les stocke de manière pratique pour l'analyse de protocole ou le débogage. Un programme tel que tcpdump (4) affiche un résumé des paquets vus sur le réseau, mais ne stocke généralement pas les données réellement transmises. En revanche, tcpflow reconstruit les flux de données réels et stocke chaque flux dans un fichier séparé pour une analyse ultérieure. tcpflow comprend TCP numéros de séquence et reconstruira correctement les flux de données indépendamment des retransmissions ou des livraisons non conformes.tcpflow stocke toutes les données capturées dans des fichiers portant le nom du formulaire
192.168.101.102.02345-010.011.012.013.45103
où le contenu du fichier ci-dessus serait constitué de données transmises depuis le port 2345 de l'hôte 192.168.101.102 vers le port 45103 de l'hôte 10.11.
Configurez une connexion de votre application à votre serveur. Lorsque la connexion est opérationnelle, tcpflow est toujours capable de capturer des données à partir de celle-ci. Par exemple:
$ Sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo
Toutes les données seront stockées dans un fichier nommé 127.000.000.001.48842-127.000.000.001.05555.
Vous pouvez toujours rediriger ceci sur la sortie standard avec l'option -Cs. Lisez la page de manuel pour jouer avec expression et syntoniser les paquets que vous souhaitez capturer.
ngrep
est très gentil pour cela. Il faut une chaîne BPF et une chaîne facultative pour effectuer une recherche dans les paquets, puis afficher le contenu du paquet à l'écran dans un format très utile. En option, il copie également un fichier pcap_dump que vous pourrez examiner de plus près dans Wireshark ultérieurement.
Jetez un oeil à Chaosreader . Bien que cela fasse un peu plus que ce que vous demandez et légèrement différemment, vous pourriez probablement en modifier le code pour faire ce que vous voulez.