Puedo hacer lo siguiente para enviar datos binarios en netcat:
echo -e '\x80' | nc host port
Pero no quiero hacerlo de esta manera, lo que quiero es conectarme a un servidor:
nc 192.168.1.115 12345
Y luego enviar algún texto:
aaaaaaaaaabbbbbbbbbbccccccccccc
Y luego enviar algunos datos binarios:
0x80 0xF4 0x12
¿Cómo puedo hacer eso?
linux
networking
tcp
netcat
user887437
fuente
fuente

echo -e '\x80\xF4\x12' | xclip -ien otra terminal, luego pegar en elncterminal, pero la configuración de entrada del terminal se está interponiendo y no sé cómoncestablece esto, ni puedo encontrar configuraciones que funcionen constty ... ; cat | xxd ; stty sane.Respuestas:
Nota: mientras sigue esta solución, escriba los comandos en una sola sesión de shell (o use un solo script) a menos que se indique lo contrario. Esto se debe a que utiliza variables y descriptores de archivo, no están disponibles directamente fuera de su sesión original.
Crear un fifo temporal. La forma correcta de crear un archivo temporal es con
mktemp. Desafortunadamente no se puede crear quince. Puede crear un directorio temporal aunque:Alternativamente, puede crear un fifo nombrado a mano en alguna ubicación fija o ad-hoc. Tu decides.
Cree un proceso en segundo plano que lea el fifo y pase los datos a un servidor:
Prestar atención si
ncno sale prematuramente Suponiendo que no haya problemas con la conexión en sí misma ni con el servidor, el comando de fondo anterior permanecerá conectado hasta que termine de enviar el primer grupo de datos a través del fifo. Pero desea que permanezca abierto y acepte escrituras múltiples, así que abra el fifo y no lo cierre (todavía):Ahora puedes enviar lo que quieras a través del fifo y la conexión de fondo persiste:
Cualquiera de estos comandos puede invocarse con la ruta al fifo en lugar de
&3, si tan solo conoces el camino. Conociendo el camino, puedes escribir al fifo desde el mismo o otro sesión de shell:O puede abrir un descriptor en otra sesión de una manera similar a la original. De cualquier forma que escribas a la fifo, la
ncLo pasará al servidor remoto en una sola conexión.Pero cuidado con las condiciones de la raza. Usar un solo descriptor dentro de una sola sesión de shell es una buena manera de evitarlos.
Después de pasar los datos que necesita, finalice la
ncy cierre el descriptor en la sesión de shell original:Tenga en cuenta en algunas circunstancias que el único último comando es suficiente para hacer el fondo
ncsalida; depende de lo que hiciste y lo que todavía estás haciendo con el fifo. Por esta razón elegí matar alncexplícitamente.Elimine el directorio temporal y su contenido (es decir, el fifo):
Nota final:
No es necesario poner
ncen el fondo en primer lugar. Puede ejecutarlo en un terminal, escribir en el fifo (conociendo su ruta) desde otro. De esta manera usted puede monitorear fácilmente su estado. Adapte esta solución a sus necesidades.fuente
Puedes obtener ayuda de una tubería con nombre para hacerlo, con un pequeño truco:
Es importante abrir el fifo de lectura-escritura (o bien tener otro proceso neutral como
sleep 9999 >/tmp/fifomanteniéndolo abierto para la escritura) de lo contrario, la primera (finalización) de la escritura terminará con el ciclo de lectura de netcat. Por lo tanto, la<>.fuente
Lo siguiente parece funcionar:
Esto le permite incluir
\xNNEscape las secuencias con sus datos normales, como en:Recuerda doblar cualquier literal
\caracteres en su entrada de texto. Tenga en cuenta que el uso deread -ry$REPLYEn lugar de una variable se detiene la eliminación de los espacios en blanco iniciales y finales.Esto no agrega una nueva línea al final del búfer, por lo que debe omitir la
nopción delechocomando o para escribir\x0adonde quieres una nueva lineaNo puedo configurar
ncen la actualidad, pero he probado con:Para las pruebas, puede utilizar
od -ct x1si no tienesxxd; o usarod -cSi estás contento de ver caracteres binarios en octal. Puedes omitircat |desde la tubería: lo incluí como posiblemente una mejor simulación del uso denc.fuente
Si conoce los dos datos de antemano, intente esto:
Si desea poder tener más control (use el teclado, etc.), intente esto:
Nota: necesitas presionar Ctrl + re para terminar cada
cat... así que aquí escribí (incluyendo el Regreso s - EOT debe aparecer al principio de la línea):fuente