Je veux un moyen simple de montrer toutes les données TCP (pas les en-têtes TCP ou quoi que ce soit d'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:
- ne pas afficher les adresses IP ou autres métadonnées
- affiche uniquement les "données" envoyées, pas les paquets individuels et leurs en-têtes
- affiche les données telles quelles, pas en hexadécimal, ni avec des marqueurs de décalage de paquet
- sniff tout le trafic réseau (que ce soit sur eth0 ou eth1 ou lo , etc ...)
Oui, vous pouvez probablement enchaîner un ensemble canalisé de commandes unix pour le faire, 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.
la source
Réponses:
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
(a également
-J
été remplacé par-g
dans la dernière version)Merci à Yves pour m'avoir signalé " tcpflow ". Voici la ligne de commande:
Cela fait tout ce que je veux
Le "
-C
" lui dit de vider la console à la place 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
la source
-e
option est utilisée pour spécifier le nom du scanner. Ainsi, l'erreur "Nom de scanner non valide '8983'" est imprimée. Le bon commandement estsudo tcpflow -i any -C -J port 1234
-J
a été changé en-g
dans la dernière version.socat est l'outil que vous demandez. Il peut agir en tant que proxy:
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).
Mise à jour:
Si socat n'est pas disponible sur votre machine, vous pouvez toujours l'émuler de cette façon avec netcat:
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:
la source
Essayez Wireshark . C'est un excellent analyseur de protocole destiné à Linux et Windows.
la source
tcpflow est ce que vous voulez. Extrait de la page de manuel:
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:
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 voulez que tcpflow capture.
la source
ngrep
c'est très bien pour ça. Il faut une chaîne BPF et une chaîne facultative pour rechercher dans les paquets, puis affiche 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 plus en détail ultérieurement dans Wireshark.la source
Jetez un coup d'œil à 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.
la source
Peut-être que vous pouvez écrire un wrapper pour tcpdump, par exemple, qui supprimera toutes les informations redondantes
la source