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 -i
en otra terminal, luego pegar en elnc
terminal, pero la configuración de entrada del terminal se está interponiendo y no sé cómonc
establece 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
nc
no 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
nc
Lo 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
nc
y 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
nc
salida; depende de lo que hiciste y lo que todavía estás haciendo con el fifo. Por esta razón elegí matar alnc
explícitamente.Elimine el directorio temporal y su contenido (es decir, el fifo):
Nota final:
No es necesario poner
nc
en 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/fifo
mantenié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
\xNN
Escape 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 -r
y$REPLY
En 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
n
opción delecho
comando o para escribir\x0a
donde quieres una nueva lineaNo puedo configurar
nc
en la actualidad, pero he probado con:Para las pruebas, puede utilizar
od -ct x1
si no tienesxxd
; o usarod -c
Si 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