Come reindirizzare i dati su tcp dalla riga di comando?


3

Vorrei inviare i dati da una macchina della riga di comando a un'altra macchina tramite TCPC. Immagino di poter scrivere un server socket ma questo deve già essere implementato. Ad esempio, potrei usarlo in xzun file e inviarlo in rete dall'altra parte su una porta specificata, dove potrei decodificarlo e salvarlo:

macchina A: strarc -c -d:c:/windows | xz -c -z - | magicsend -p 80 -h 192.168.1.100 macchina B:magicreceive -p 80 | xz -d -f - | strarc -x -d:x:/windows

Vorrei farlo in Linux e / o Windows con strumenti open source. Quindi sono preferibili strumenti Linux che hanno una porta di Windows [non ufficiale]. :)

Una riga di comando di esempio funzionante è molto apprezzata.

(Nota che su un esempio di Linux farei cat /vmlinuzinvece di strarc , certo che non è del tutto equivalente.;))

Risposte:


3

Usa netcat. Vedi la sezione "CLIENT / SERVER" di "man netcat". Una macchina B:

nc -l 1234 | xz -c > sammy.xz

e sulla macchina A:

cat sammy | nc 192.168.1.100 1234

Si noti che ci possono essere implicazioni di sicurezza nel lasciare le porte aperte in questo modo.

Come sottolinea mpy , è più efficiente in termini di larghezza di banda della rete comprimere sul lato di invio:

xz -c sammy | nc 192.168.1.100 1234

E basta salvare sul lato ricevente:

nc -l 1234 > sammy.xz

funziona abbastanza bene, tuttavia per qualche motivo questo non mi uscirà dopo che sammysarà stato letto completamente. Penso di si netcat. Può essere l'implementazione che utilizzo a causare il problema o è prevista la progettazione di questo netcat ? Posso farlo uscire in qualche modo una volta che sammy è letto ( EOF ), (a dimensioni di file e tempi di lettura arbitrari)?
n611x007

@naxa: Hmm .. non è chiaro il motivo per cui questo dovrebbe essere. Non ho Windows a portata di mano, ma tutta la documentazione sembra dire che anche su Windows il server (B) dovrebbe uscire dopo che il client (A) ha finito di scrivere sulla pipe. puoi pubblicare i tuoi comandi? Sicuro che stai usando -l e non -L?
Jonathan Ben-Avraham,

2
Sono perplesso, perché usi xz dal lato del ricevitore ?! Sarebbe molto più efficiente se comprimessi sul mittente (macchina A): xz -c sammy | nc 192.168.1.100 1234e gonfiassi sul ricevitore (macchina B): nc -l 1234 | xzcat > sammye IMHO l'intenzione di OP.
mpy

@mpy: ho aggiunto il tuo commento alla mia risposta, grazie.
Jonathan Ben-Avraham,

Lo apprezzo, già votato.
mpy

2

Netcat dovrebbe soddisfare le tue esigenze; Non ho la documentazione a portata di mano, quindi non posso esserne certo, ma penso che il comando della parte di invio lo sarebbe [...] | nc -h192.168.1.100 -p80, mentre la parte di ricezione userebbe nc -l -p80 | [...].


1

Dato che devi accedere in remoto ad almeno una delle macchine (per eseguire magicsend o magicreceive) potresti usare ssh?

I client ssh sono facili da trovare su Windows (basta installare cygwin, per esempio.) I server ssh sono anche facili da trovare, ma possono essere più difficili da installare / configurare.

qualcosa del genere se si è attualmente sulla console della macchina A e la macchina B è remota:

macchina A: strarc whatever | xz -c -z - | ssh me@machineB '(xz -d -f - | strarc somethingelse)'

o se sei sulla console della macchina B e devi accedere in remoto alla macchina A, allora:

macchina B: ssh me@machineA '(strarc whatever | xz -c -z -)' | xz -d -f - | strarc somethingelse


but may be harder to install/configureper curiosità hai fatto questo? Ho fatto con Cygwin e mi è sembrato un po 'limitato e ingombrante.
n611x007
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.