Reindirizza stdin e stdout alle porte


10

Mi piacerebbe prendere un programma Pche legge stdine scrive stdout, ma collegalo a ncqualsiasi cosa tale da leggere da una determinata porta e l'output a un'altra porta.

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

Come faccio a farlo riscrivere per dire porta 60606?


La tua domanda non è chiara come indicato. Vuoi dire che qualcuno può aprire 2 connessioni TCP alla tua macchina, una alla porta 50505 e un'altra alla porta 50506, inviare dati sul primo destinato a essere alimentato Pe aspettarti di leggere l'output della Pseconda connessione TCP? Perché il tag UDP?
Stéphane Chazelas,

Sì! Per quanto UDPmi pare ports, volevo , ma quella non era una parola chiave esistente, quindi ho pensato TCP, e penso di aver aggiunto UDPper riflesso.
Yimin Rong,

Risposte:


12

Intendi dire che qualcuno può aprire 2 connessioni TCP alla tua macchina, una alla porta 50505 e un'altra alla porta 60606, inviare dati sul primo destinato ad essere alimentato a P e aspettarsi di leggere l'output di P dalla seconda connessione TCP, allora quello sarebbe:

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

O con socat:

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

Per Prinviare il suo output alla stessa connessione:

socat tcp-listen:50505,reuseaddr exec:P

3

Non è necessario ncper lavorare con le porte. bashpuò farlo da solo:

Bash gestisce diversi nomi di file specialmente quando vengono utilizzati nei reindirizzamenti, come descritto nella tabella seguente:

/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.

3
/dev/tcpè spesso disabilitato e non può essere utilizzato per l' ascolto . È necessario zshse si desidera una shell in grado di creare socket tcp in ascolto.
Stéphane Chazelas,

@ StéphaneChazelas Devo ammettere che non ho mai provato. Non dice nulla su questa restrizione nella pagina man, vero?
Hauke ​​Laging,

Bene, come lo faresti? Un socket listener è una porta per creare più socket accettabili, i reindirizzamenti non funzionano altrettanto bene. zsh usa un builtin per quello ( ztcp -lper ascoltare e ztcp -aaccettare connessioni sulla presa di ascolto).
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.