Cuando realizo el siguiente comando de Netcat y veo los paquetes con Wireshark , dice que el paquete UDP está mal formado.
$ echo "this is a test" | nc -u 127.0.0.1 53
Del mismo modo, el uso de comandos como $ echo "this is a test" > /dev/udp/127.0.0.1/53
producir errores de "paquete mal formado" en Wireshark.
El comando echo se envía / entrega al servidor Netcat sin errores. Pero esto me hizo preguntarme: ¿ es posible construir manualmente un paquete UDP adecuado con echo o alguna otra herramienta (s) nativa de Unix?
Estoy usando Debian y macOS.
echo $[61002+RANDOM%4532]
para elegir un número de puerto aleatorio en ese rango.Respuestas:
Su paquete es completamente válido, desde el punto de vista de IP y UDP. Si expande los detalles del protocolo para Ethernet / IP / UDP en el panel inferior de Wireshark, verá que el paquete se ha analizado correctamente.
Sin embargo, como está destinado al puerto 53, Wireshark intenta analizarlo como un paquete DNS, lo que no puede hacer (ya que la cadena "esto es una prueba" no es una solicitud DNS válida según la especificación RFC 1035 ).
Si sigue la especificación en ese enlace, podrá construir un paquete que sea válido cuando se analice como una solicitud DNS. Si envía el paquete a otro puerto, notará que Wireshark ya no lo analizará como una solicitud de DNS y, por lo tanto, no mostrará esa advertencia.
fuente
Puede enviarlos a Bash alias especiales con redireccionamiento.
De las páginas de manual de Bash:
Esto enviará un paquete UDP a 192.168.2.11 al puerto 8080:
fuente
Hay varias preguntas aquí; el reclamo de un "paquete con formato incorrecto" puede deberse a la descarga de la suma de comprobación y, de ser así, es un error falso, ya que refleja que la captura de paquetes no tiene una vista completa; parte del trabajo se realizó en el hardware de la red. WireShark debería tener documentación sobre esto.
De lo contrario, varias herramientas (como
socat
,nc
onetcat
, o mediante características extremadamente similares en shells comoksh93
obash
) pueden tomar bytes de la entrada estándar y volcarlos en lo que se convierte en un paquete UDP. Si esto es "apropiado" depende del protocolo; en teoría, se podría construir y enviar un paquete DNS o DHCP de esta manera, aunque con mayor frecuencia la gente usa una biblioteca o software dedicado que (con suerte) implementa correctamente el protocolo en cuestión, ya que generalmente hay mucho más involucrado que establecer algunos bits en el cuerpo de un paquete y enviarlo a través del cable, en particular manejando respuestas, reintentando después de tiempo de espera o error, campos de encabezado de paquete, etc. Los protocolos generalmente están muy bien documentados en RFC, o vea la serie de libros "TCP / IP Illustrated" por Stevens para aún más documentación.Herramientas específicas como
nmap
hacer cosas muy personalizadas con la construcción de paquetes. De lo contrario, para la construcción manual de paquetes, generalmente se usa un lenguaje de programación, aunque nuevamente la mayoría del software usará las bibliotecas existentes o los servicios del sistema para enviar DNS o DHCP u otros paquetes UDP, ya que son mucho menos trabajo y mucho menos propensos a errores que la creación manual de un raw paquete desde cero.fuente