Quiero una manera simple de mostrar todos los datos de TCP (no los encabezados de TCP o cualquier otra cosa) sobre cualquier interfaz en mi caja de Linux.
Por ejemplo, quiero un comando mágico que si lo hago:
magic_commmand_I_want port=1234
entonces si había un servidor escuchando en el puerto 1234 en mi máquina, y alguien hizo:
echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port
Entonces el comando mágico simplemente se imprimiría:
hello
He intentado "tcpdump", "ethereal", "tethereal", "tshark" y otros, pero no es obvio cómo los llevas a:
- no mostrar direcciones IP u otros metadatos
- solo muestra los "datos" que se envían, no los paquetes individuales y sus encabezados
- imprima los datos tal cual, no en hexadecimal y no con marcadores de desplazamiento de paquetes
- oler todo el tráfico de red (ya sea en eth0 o eth1 o lo , etc.)
Sí, probablemente podría unir un conjunto de comandos unix para hacer esto, pero eso no es muy fácil de recordar para la próxima vez :)
Si tiene un ejemplo simple de una línea de comandos exacta que hace esto, eso es lo que me gustaría.
linux
networking
Dustin Boswell
fuente
fuente
Respuestas:
Actualizar:
Como señaló Michal en los comentarios: desde tcpflow versión 1.3, la opción -e se usa para especificar el nombre del escáner. Por lo tanto, se imprime el error "Nombre de escáner no válido '8983'". El comando correcto es
sudo tcpflow -i any -C -J port 1234
(también
-J
se ha cambiado a-g
en la última versión)Gracias a yves por señalarme a " tcpflow ". Aquí está la línea de comando:
Esto hace todo lo que quiero
El "
-C
" le dice que descargue en la consola en lugar de un archivo. El "-e
" habilita los colores para que cliente-> servidor y servidor-> cliente sean visualmente distintos.Instalé tcpflow simplemente haciendo
fuente
-e
opción se utiliza para especificar el nombre del escáner. Por lo tanto, se imprime el error "Nombre de escáner no válido '8983'". El comando correcto essudo tcpflow -i any -C -J port 1234
-J
se ha cambiado a-g
en las últimas versiones.socat es la herramienta que está solicitando. Puede actuar como un proxy:
entonces su aplicación debe conectar el puerto 4444 en lugar de conectarse directamente a 1234
La opción -v es que socat imprima todo lo que recibe en el error estándar (stderr).
Actualizar:
Si socat no está disponible en su máquina, aún puede emularlo de esa manera con netcat:
advertencias: esta opción es unidireccional. la segunda instancia de netcat imprimirá cualquier respuesta de su servidor a la salida estándar. Todavía puede hacer entonces:
fuente
Prueba Wireshark . Es un excelente analizador de protocolos dirigido tanto para Linux como para Windows.
fuente
tcpflow es lo que quieres. Extracto de la página del manual:
Configure una conexión desde su aplicación de aplicación a su servidor. Cuando la conexión está en funcionamiento, tcpflow aún puede capturar datos de ella. Por ejemplo:
Todos los datos se almacenarán en un archivo llamado 127.000.000.001.48842-127.000.000.001.05555.
Aún puede redirigir esto en la salida estándar con la opción -C. Lea la página del manual para jugar con expresión para ajustar los paquetes que desea que tcpflow capture.
fuente
ngrep
es muy bueno para esto Se necesita una cadena BPF y una cadena opcional para buscar dentro de los paquetes, y luego se vuelca el contenido del paquete a la pantalla en un formato bastante útil. Opcionalmente, también se vuelca en un archivo pcap_dump que puede examinar más detenidamente en Wireshark más adelante.fuente
Echa un vistazo a Chaosreader . Aunque hace un poco más de lo que pides y de manera ligeramente diferente, probablemente puedas modificar el código para hacer lo que quieras.
fuente
Tal vez pueda escribir un contenedor para tcpdump, por ejemplo, que eliminará toda la información redundante
fuente