Wireshark es una herramienta poderosa, pero tiene sus limitaciones. A menos que tenga un equipo de red profesional, es difícil analizar el tráfico que no involucra su computadora. A veces, la solución más fácil es usar tcpdump para capturar el tráfico en el servidor remoto y luego ejecutar Wireshark para echarle un vistazo.
¿Qué son Wireshark y tcpdump??
Wireshark es un analizador de protocolos, una pieza de software que captura y presenta los datos que fluyen a través de su red de manera legible. Con Wireshark, puede analizar las entradas y salidas de los servicios de red y las aplicaciones web..
Si bien Wireshark hace un gran trabajo al capturar cada paquete que fluye más allá, en algunos casos deberá analizar una sesión desde un servidor remoto. A menos que tenga un equipo de red especial, esto puede ser difícil. A veces es más fácil capturar el tráfico en el servidor remoto y luego analizarlo en su escritorio.
tcpdump es un analizador de paquetes de línea de comandos. No es tan fácil de usar como Wireshark, pero es tan capaz de capturar tráfico. Como tcpdump se ejecuta en modo terminal, es posible iniciarlo a través de una sesión SSH. Con las opciones de línea de comandos adecuadas, puede exportar una sesión tcpdump que sea compatible con Wireshark.
SolarWinds lleva a Wireshark al siguiente nivel
Wireshark y tcpdump son utilidades poderosas, pero tienen algunos puntos débiles. En particular, es muy difícil detectar problemas de latencia en su red utilizando Wireshark de fábrica. Por ejemplo, puede estar sufriendo tiempos de ping altos en su LAN, y Wireshark no puede hacer mucho para ayudarlo..
SolarWinds Response Time Viewer para Wireshark (herramienta gratuita)
En ese caso, recomiendo Visor de tiempo de respuesta de SolarWinds para Wireshark. Este complemento extiende Wireshark, permitiéndole diagnosticar la causa de los picos de ping y la velocidad general de la red lenta.
SolarWinds Response Time Viewer para WiresharkDescargar herramienta 100% GRATUITA
SolarWinds Network Performance Monitor (PRUEBA GRATUITA)
SolarWinds también es una excelente solución todo en uno para su red. Se llama el Monitor de rendimiento de red (NPM), y hace que administrar una red sea mucho más fácil. Por ejemplo, con SolarWinds Network Performance Monitor, puede monitorear y administrar su LAN inalámbrica, generar una línea de base de rendimiento y recibir alertas de seguridad en tiempo real.
Monitor de rendimiento de red de SolarWinds está disponible para probar sin riesgo durante 30 días. Regístrate aquí gratis.
SolarWinds Network Performance Monitor: descargue una prueba GRATUITA de 30 días
Antes de que empieces
Para seguir las instrucciones de esta guía, necesitará lo siguiente:
- Una computadora remota con un servidor SSH y tcpdump instalado
- Acceso raíz
- Servicios que generan tráfico de red, como Apache o node.js, que se ejecutan en la computadora remota
- Una computadora local con un cliente SSH y Wireshark instalado
El objetivo es utilizar tcpdump en la computadora remota, a través de SSH, para capturar el tráfico de la red. Luego, el tráfico capturado se puede copiar a la computadora local para su análisis con Wireshark.
Esto es útil cuando no tiene acceso físico a la computadora remota o la está ejecutando “sin cabeza”, es decir, sin teclado ni monitor.
Captura de paquetes con tcpdump
Para capturar el tráfico con tcpdump, deberá conectarse a la computadora remota a través de SSH. También necesitará acceso a la raíz, de lo contrario, tcpdump no podrá capturar tráfico y verá un error que indica No tienes permiso para capturar en ese dispositivo.
Una vez que se haya conectado, ejecute el siguiente comando para comenzar a capturar el tráfico con tcpdump:
sudo tcpdump -s 0 -i eth0 -w tcpdump.pcap
Las opciones de línea de comando que he usado para capturar esta sesión se explicarán a continuación. En resumen, el comando anterior capturará todo el tráfico en el dispositivo Ethernet y lo escribirá en un archivo llamado tcpdump.pcap en un formato compatible con Wireshark.
Una vez que haya terminado de capturar el tráfico, finalice la sesión tcpdump con Ctrl + C. Verá una breve lectura que muestra información sobre la sesión de captura.
Antes de que pueda copiar el tráfico de su computadora remota al local para su análisis con Wireshark, deberá cambiar los permisos. De manera predeterminada, las sesiones tcpdump capturadas por la raíz utilizada no se pueden copiar. Usa este comando:
sudo chmod 644 tcpdump.pcap
Eso le permitirá copiar el archivo a su computadora local usando scp, como se describe en el siguiente paso.
Copiando una sesión tcpdump para análisis
Una vez que haya terminado una sesión de captura con tcpdump, le queda un problema. ¿Cómo se copia en la máquina que ejecuta Wireshark para su análisis? Hay muchas formas, pero creo que la más fácil es con scp. Como ya capturó paquetes en una máquina sin cabeza utilizando SSH, todo lo que necesita para usar scp ya está instalado y ejecutándose.
Los usuarios de Windows deberán descargar pscp y luego copiar el archivo a C: \ Windows \ System32. La mayoría de los usuarios de Mac y Linux ya tienen todo lo que necesitan.
En Mac o Linux, abra una ventana de terminal y ejecute el siguiente comando para copiar el archivo de captura de sesión:
scp [email protected]: / path / to / file ./
O en Windows, abra PowerShell y ejecute este comando:
pscp.exe [email protected]: / ruta / al / archivo. \
Sustituya con su información cuando corresponda. Se le pedirá que ingrese su contraseña. Los comandos que utilicé están en la captura de pantalla anterior para referencia.
Verifique que el archivo se haya copiado como se esperaba y está listo para analizar la sesión tcpdump con Wireshark.
Analizando una sesión de tcpdump capturada con Wireshark
El análisis funciona igual que con cualquier captura tradicional de Wireshark; lo único que necesita saber es cómo importar el archivo.
Inicie Wireshark, luego importe la sesión capturada tcpdump usando Archivo -> Abierto y busque su archivo. Tú también puedes haga doble clic el archivo de captura para abrirlo en Wireshark, siempre que tenga la extensión de archivo * .pcap. Si usaste el -w opción cuando ejecutó tcpdump, el archivo se cargará normalmente y mostrará el tráfico.
En mi caso, estoy ejecutando un servidor Apache en el host remoto, y estoy interesado en mirar datos HTTP. Configuré el filtro de vista Wireshark apropiado y puedo examinar los fotogramas capturados como de costumbre..
Como prueba, he incrustado un elemento en el código HTML que no se muestra en la página. Debería poder ubicarlo en el flujo de datos y verlo con Wireshark.
Como puede ver, Wireshark puede analizar cada cuadro y mostrar los datos perfectamente. El elemento que he ocultado se muestra en el ejemplo anterior. El proceso de captura es un poco más complicado cuando usa tcpdump, pero todo en Wireshark funciona como de costumbre.
Usar opciones de línea de comando para tcpdump
La mayoría de las veces, cuando ejecutas tcpdump, querrás tener cierto control sobre cómo capturas los paquetes y dónde almacenas la sesión. Puedes controlar cosas así usando las opciones de la línea de comandos. Estas son algunas de las opciones de línea de comando más útiles para tcpdump.
tcpdump -w
los -w La opción de línea de comando habilita la salida compatible con Wireshark. Toma una sola variable, que es el nombre de archivo de salida. Los registros de captura guardados con esta opción no serán legibles por humanos fuera de Wireshark, ya que se almacenan en formato binario en lugar de ASCII.
tcpdump -C
los -C La opción de línea de comando le permite establecer un tamaño máximo de archivo en bytes. Esta opción solo funciona junto -w. Por ejemplo, el comando tcpdump -C 1048576 -w capture.pcap especifica un tamaño de captura máximo de 1 MB (1.048.576 bytes) de salida al archivo capture.pcap.
Si la sesión genera una mayor cantidad de salida, creará nuevos archivos para almacenarla. Por lo tanto, se generaría una captura de 3 MB capture.pcap, capture1.pcap, y capture2.pcap cada uno con un tamaño de archivo de 1 MB.
tcpdump -s
los -s La opción de línea de comando establece una longitud máxima para cada paquete en bytes, y trunca el paquete cuando se alcanza el máximo. El comando tcpdump -s 0 establece una longitud ilimitada para garantizar que se capture todo el paquete.
tcpdump -i
los -yo la opción de línea de comando especifica qué dispositivo de red desea que tcpdump monitoree. Si no se especifica ninguna interfaz, la predeterminada es la interfaz con el número más bajo que se está ejecutando actualmente.
tcpdump -list-interfaces
La opción de línea de comando tcpdump -list-interfaces imprimirá una lista de todas las interfaces disponibles para que tcpdump las adjunte. Tenga en cuenta que esto no inicia una sesión de captura, pero le dará una lista de interfaces para usar con -yo opción anterior.
tcpdump -c
los -C la opción de línea de comando le dice a tcpdump que salga de la sesión después de capturar un número específico de paquetes.
tcpdump -n
los -norte la opción de línea de comando instruye a tcpdump no para resolver direcciones IP a nombres de host. Esto es útil cuando se solucionan problemas de sitios web detrás de un servidor de equilibrio de carga, y en algunos otros casos cuando se usa un nombre de host daría resultados ambiguos.
tcpdump -v | -vv | -vvv
Las tres opciones de línea de comando, -v, -vv, y -vvv le permite aumentar la verbosidad de su sesión de captura. -v guardará valores TTL para cada paquete, junto con información de ToS. -vv generará TTL y ToS junto con información adicional en paquetes NFS. Y -vvv registrará todo lo que hagan las dos primeras opciones, junto con información adicional de las sesiones de telnet.
tcpdump -F
los -F la opción de línea de comando le indica a tcpdump que use filtros de captura del archivo especificado. Puede encontrar más información sobre cómo escribir un archivo de captura en la siguiente sección.
Usando filtros de captura para tcpdump
Los filtros de captura le permiten reducir los datos que almacena tcpdump en una sesión. Son una forma útil de facilitar un poco el análisis y mantener pequeños los archivos de captura. Estos son algunos de los filtros de captura más útiles para tcpdump.
anfitrión
Este filtro especifica que solo se debe capturar el tráfico hacia y desde el host de destino. Toma una dirección IP o nombre de host como argumento.
red
El filtro de red le indicará a su computadora que solo capture el tráfico en una subred determinada, y toma una dirección IP como argumento. Por ejemplo, 192.168.1.0/24 especifica que se capturará el tráfico hacia o desde todos los hosts en la subred. Tenga en cuenta que se requiere una máscara de subred en notación diagonal.
dst host
Similar a anfitrión, Este filtro de captura especifica que solo se capturará el tráfico con un destino del host dado. También se puede usar con red.
host src
Como en el caso anterior, pero este filtro solo captura el tráfico que se origina en el host o la dirección IP especificados. También se puede usar con red.
Puerto
Este filtro le dice a tcpdump que capture el tráfico hacia y desde un número de puerto dado. Por ejemplo, puerto 443 capturará el tráfico TLS.
rango de puertos
Similar al filtro de puerto, portrange establece un rango de puertos en los que se captura el tráfico. Para usar el filtro de rango de puertos, especifique el puerto inicial y el puerto final separados por un guión. Por ejemplo, Portrange 21-23.
puerta
El filtro de puerta de enlace especifica que su computadora solo debe capturar el tráfico que utilizó un nombre de host dado como puerta de enlace. El nombre de host debe encontrarse en / etc / hosts.
transmitir
El filtro de difusión especifica que tcpdump solo debe capturar el tráfico que se está transmitiendo a todos los hosts en una subred.
Multidifusión IP
Este filtro le dice a tcpdump que capture solo el tráfico de multidifusión en la subred de la máquina host.
y / o / no operadores
Los filtros se pueden encadenar juntos usando el y, o, o no operadores. Por ejemplo, para capturar todo el tráfico web en un host determinado, puede usar el filtro puerto 80 o puerto 443. O puede capturar todo el tráfico en una subred dada, excepto los paquetes de difusión mediante el uso del filtro neto 192.168.1.0/24 y no transmitido.
Es muy común utilizar operadores de filtro en la práctica, ya que proporcionan una capa adicional de granularidad a sus capturas. Puede capturar exactamente el tráfico que necesita, sin mucha charla de red adicional.
Expresiones complejas con múltiples operadores.
Incluso se pueden construir expresiones más complejas rodeando múltiples operaciones en apóstrofes y paréntesis individuales. Por ejemplo, puede monitorear todo el tráfico de correo, incluidos SMTP, IMAP, IMAP sobre TLS, POP3 y POP3 sobre TLS, a través de múltiples hosts y subredes, utilizando un comando como este:
tcpdump ‘(host 10.0.0.1 y net 192.168.1.0/24) y ((puerto 25 o puerto 143 o puerto 443 o puerto 993 o puerto 995))’
Las expresiones complejas con múltiples operadores pueden ser muy útiles, pero generalmente se guardan en un archivo de filtro para su reutilización, ya que un solo error tipográfico hará que la captura falle. Con frecuencia, deberán prepararse con anticipación y depurarse.
Usar archivos de filtro para tcpdump
Los filtros anteriores se pueden ejecutar en la línea de comando cuando se inicia tcpdump, pero a menudo es útil crear un archivo de filtro. Un archivo de filtro facilita la reproducción de la configuración de filtro entre capturas, ya que es reutilizable. Estos son los pasos para escribir y usar un archivo de filtro.
Escribe el archivo de filtro
Los archivos de filtro usan exactamente la misma notación que la línea de comando. No requieren caracteres especiales ni números mágicos en la parte superior del archivo.
Por ejemplo, aquí hay un archivo de filtro que he escrito que capturará todo el tráfico web saliente desde mi servidor Apache a un host determinado. En este caso, el Chromebook en el que estoy escribiendo.
Mientras el usuario pueda leer el archivo que ejecuta tcpdump, el programa intentará analizar todo en el archivo de filtro y usarlo como un filtro válido. Cuando un el archivo de filtro se usa junto con el filtrado de la línea de comando, se ignorará todo el filtrado de la línea de comando.
Indique a tcpdump que use cualquier archivo de filtro dado usando -F opción de línea de comando, seguida de la ruta al archivo. En el ejemplo anterior, el archivo de filtro se encuentra en el mismo directorio en el que estoy ejecutando tcpdump.
Aquí está la salida sin procesar de la sesión filtrada. Puede ver que los únicos paquetes que se registran se originan en puerto 80 o 443, y son salientes al host en 192.168.1.181.
Una vez que vea que su filtro funciona según lo previsto, capture una sesión para analizarla con Wireshark usando un comando similar a este:
sudo tcpdump -i eth0 -s 0 -w wireshark.pcap -F filtro-archivo
Wireshark y tcpdump
A menos que esté ejecutando un conmutador administrado con un puerto de administración, tarde o temprano deberá capturar el tráfico en un servidor remoto. Cuando Wireshark solo no hará el trabajo, Wireshark con tcpdump es una opción popular. Los dos funcionan muy bien juntos y, con algunas opciones simples de línea de comandos, tcpdump exportará sesiones de captura que se pueden analizar fácilmente en Wireshark.
olarWinds lleva a Wireshark al siguiente nivel con herramientas como el Visor de tiempo de respuesta de SolarWinds para Wireshark y el Monitor de rendimiento de red de SolarWinds. Aunque Wireshark es una herramienta poderosa, tiene sus limitaciones, especialmente cuando se trata de detectar problemas de latencia en la red. En algunos casos, es más fácil capturar el tráfico en el servidor remoto con tcpdump y luego analizarlo en Wireshark en su escritorio. Con las opciones de línea de comandos adecuadas, puede exportar una sesión tcpdump que sea compatible con Wireshark. En general, estas herramientas son útiles para analizar las entradas y salidas de los servicios de red y las aplicaciones web.