Redirecionar stdin e stdout para portas

6

Gostaria de ter um programa P que leia stdin & grava em stdout , mas conecta-o a nc ou qualquer outro que seja de uma determinada porta e que saia para outra porta.

# The reading is easy, here P reads from port 50505
nc -l 50505 | P

Como faço para escrever de volta para dizer a porta 60606?

    
por Yimin Rong 10.11.2014 / 22:47

2 respostas

9

Quero dizer que alguém pode abrir 2 conexões TCP para sua máquina, uma para a porta 50505 e outra para a porta 60606, enviar dados sobre a primeira destinada a ser alimentada para P e esperar ler a saída de P da segunda Conexão TCP, então isso seria:

< /dev/null nc -q -1 -l 50505 | P | nc -l 60606 > /dev/null

Ou com socat :

socat -u tcp-listen:50505,reuseaddr - | P | socat -u - tcp-listen:60606,reuseaddr

Para P enviar sua saída de volta para a mesma conexão:

socat tcp-listen:50505,reuseaddr exec:P
    
por 10.11.2014 / 23:37
3

Você não precisa de nc para trabalhar com portas. bash pode fazer isso sozinho:

Bash handles several filenames specially when they are used in redirections, as described in the following table:

/dev/fd/fd
    If fd is a valid integer, file descriptor fd is duplicated.
/dev/stdin
    File descriptor 0 is duplicated.
/dev/stdout
    File descriptor 1 is duplicated.
/dev/stderr
    File descriptor 2 is duplicated.
/dev/tcp/host/port
   If host is a valid hostname or Internet address, and port is an integer 
   port number or service name, bash attempts to open a TCP connection to
   the corresponding socket.
/dev/udp/host/port
    If host is a valid hostname or Internet address, and port is an integer 
    port number or service name, bash attempts to open a UDP connection to
    the corresponding socket.
    
por 10.11.2014 / 23:08