ventajas utiliza usar tutorial ncat kali desventajas como comando linux bash netcat

linux - utiliza - ¿Cómo puedo cerrar una conexión netcat después de que se devuelve un determinado carácter en la respuesta?



netcat tutorial (6)

¿Qué tal esto?

Lado del cliente:

awk -v RS=$''/x1c'' ''NR==1;{exit 0;}'' < /dev/tcp/host-ip/port

Pruebas:

# server side test script while true; do ascii -hd; done | { netcat -l 12345; echo closed...;} # Generate ''some'' data for testing & pipe to netcat. # After netcat connection closes, echo will print ''closed...'' # Client side: awk -v RS=J ''NR==1; {exit;}'' < /dev/tcp/localhost/12345 # Changed end character to ''J'' for testing. # Didn''t wish to write a server side script to generate 0x1C.

El lado del cliente produce:

0 NUL 16 DLE 32 48 0 64 @ 80 P 96 ` 112 p 1 SOH 17 DC1 33 ! 49 1 65 A 81 Q 97 a 113 q 2 STX 18 DC2 34 " 50 2 66 B 82 R 98 b 114 r 3 ETX 19 DC3 35 # 51 3 67 C 83 S 99 c 115 s 4 EOT 20 DC4 36 $ 52 4 68 D 84 T 100 d 116 t 5 ENQ 21 NAK 37 % 53 5 69 E 85 U 101 e 117 u 6 ACK 22 SYN 38 & 54 6 70 F 86 V 102 f 118 v 7 BEL 23 ETB 39 '' 55 7 71 G 87 W 103 g 119 w 8 BS 24 CAN 40 ( 56 8 72 H 88 X 104 h 120 x 9 HT 25 EM 41 ) 57 9 73 I 89 Y 105 i 121 y 10 LF 26 SUB 42 * 58 : 74

Después de que aparezca ''J'', el lado del servidor se cierra y se imprime ''cerrado ...'', asegurando que la conexión se haya cerrado.

Tenemos un script de mensajería tcp muy simple que envía parte del texto a un puerto de servidor que devuelve y muestra una respuesta.

La parte del guión que nos importa se parece a esto:

cat someFile | netcat somehost 1234

La respuesta que el servidor devuelve es ''completa'' una vez que obtenemos un código de carácter determinado (específicamente &001C ) devuelto.

¿Cómo puedo cerrar la conexión cuando recibo este carácter especial?

(Nota: el servidor no cerrará la conexión por mí. Aunque actualmente solo presiono CTRL + C la secuencia de comandos cuando puedo saber que está hecha, deseo poder enviar muchos de estos mensajes, uno tras otro).

(Nota: netcat -wx no es lo suficientemente bueno porque deseo enviar estos mensajes lo más rápido posible)


Crea un script bash llamado client.sh:

#!/bin/bash cat someFile while read FOO; do echo $FOO >&3 if [[ $FOO =~ `printf ".*/x00/x1c.*"` ]]; then break fi done

Luego invoca netcat desde tu script principal así:

3>&1 nc -c ./client.sh somehost 1234

(Necesitará la versión 3 de bash para la coincidencia de expresiones regulares).

Esto supone que el servidor está enviando datos en líneas; de lo contrario, tendrá que modificar client.sh para que lea y haga eco de un carácter a la vez.


Esto funcionó mejor para mí. Simplemente lea la salida con un bucle while y luego verifique "0x1c" usando una sentencia if.

while read i; do if [ "$i" = "0x1c" ] ; then # Read until "0x1c". Then exit break fi echo $i; done < <(cat someFile | netcat somehost 1234)


Esto funciona muy bien:

echo ^C | nc -v 29.7.144.21 1364

Vea la salida a continuación:

[root @ localhost ~] # echo ^ C | nc -v 29.7.144.21 1364 Ncat: Versión 6.40 ( http://nmap.org/ncat ) Ncat: Conectado al 29.7.144.21:1364. ^ C Ncat: 3 bytes enviados, 0 bytes recibidos en 0.01 segundos.

[root @ localhost ~] #


Tal vez también eche un vistazo a Ncat:

"Ncat es la culminación de muchas características clave de varias encarnaciones de Netcat como Netcat 1.x, Netcat6, SOcat, Cryptcat, GNU Netcat, etc. Ncat tiene una serie de nuevas características como" Intermediación de conexiones ", Redirección de TCP / UDP, Soporte para cliente y servidor SOCKS4, capacidad para "encadenar" procesos Ncat, proxy HTTP CONNECT (y encadenamiento de proxy), conexión / escucha SSL, filtrado de conexión / dirección IP, y mucho más ".

http://nmap-ncat.sourceforge.net


Tratar:

(cat somefile; sleep $timeout) | nc somehost 1234 | sed -e ''{s//x01.*//;T skip;q;:skip}''

Esto requiere GNU sed.

Cómo funciona:

{ s//x01.*//; # search for /x01, if we find it, kill it and the rest of the line T skip; # goto label skip if the last s/// failed q; # quit, printing current pattern buffer :skip # label skip }

Tenga en cuenta que esto supone que habrá una nueva línea después de / x01 - sed no la verá de otra manera, ya que sed opera línea por línea.