Bueno, como se documenta en Wikipedia y en la netcatdocumentación, existe una -eopción que hace que genere ( e xecute) un programa al recibir una conexión, conectando el socket a stdin, stdout y stderr del proceso. Ejemplo de uso:
nc -l -pnúmero_puerto -enombre_programa
Los ejemplos comúnmente se muestran /bin/sho bashse usan como nombre_programa . Se desaconseja el uso de esta opción porque básicamente abre un portal de acceso anónimo y sin contraseña en su máquina. Por supuesto, esto se mitiga mediante el uso de un programa con menos poder que el shell (uno que no tiene la capacidad de escapar a un shell), minimizando su uso y manteniéndolo en secreto. Sin embargo, los desarrolladores originales netcatsintieron con la suficiente firmeza que esta opción era una mala idea de que la deshabilitaron por defecto y la condicionaron bajo la opción de compilación "GAPING_SECURITY_HOLE". Esto se menciona brevemente en este Tutorial de NetCat y otra netcatdocumentación.
Una búsqueda en Google me llevó a debatir este problema en otros sitios de Stack Exchange: desbordamiento de pila y falla del servidor . Múltiples contribuyentes ofrecieron la siguiente técnica para hacer lo mismo sin usar la -eopción (es decir, en una versión netcatque tiene la -eopción deshabilitada):
En el servidor:
mkfifopipe_name
nc -l -pnúmero_puerto <pipe_name | nombre_programa >pipe_name
En el cliente:
nc server_machine_name número_puerto
Un par de notas:
- En algunas versiones de
netcat, -limplica -p, por lo que debe decir justo -ly luego el número de puerto.
- Es posible que desee envolver su solución en un
while truebucle.