Invio di contenuti di file di testo al server utilizzando netcat?


13

Esiste un processo daemon in ascolto sulla porta 5144, che non posso modificare.

Voglio usare netcat per inviare il contenuto di un file di testo al server, ma questo fa netcatbloccare il terminale fino a quando premo Ctrl+ C:

cat file.txt | nc -u 127.0.0.1 5144

L'unico modo in cui sono in grado di farlo funzionare è eseguendo nc -u 127.0.0.1 5144e copiando / incollando manualmente il contenuto del file.

Qualche idea?


Nota anche:

  1. cat file.txt | ...porta a bash: ...: command not founde posso continuare a utilizzare il terminale
  2. l'utilizzo nc -u 127.0.0.1 5144 < file.txtporta allo stesso comportamento dell'utilizzo di | sopra

Cosa succede quando dici cat file.txt | …? Che ne dici nc -u 127.0.0.1 5144 < file.txt?
Scott,

devi usare -u? Inoltre, hai provato per l'altro lato, nc -l -p? e hai provato nc -p? (c'è un nc che usa -l -p e uno penso che usi -p senza -l). Hai mostrato solo un lato, il lato client / iniziale. Cosa stai facendo per il lato server? Prova come test, facendo in modo che nc ascolti sulla porta 1234 e vedi se cat ... | nc ... ci lavora. Non l'ho mai visto prima, quindi forse è un debole, ma forse è qualcosa di peculiare per questo demone particolare che non accetta le cose catturate.
barlop

Non riesco a modificare il demone. @Scott: bash: ...: command not founde l'utilizzo di "<file.txt" fa lo stesso del | operatore (netcat si blocca)
Amil,

Puoi per favore essere più preciso? Dice " bash: ...: command not found"? Oppure dice " bash: cat: command not found" o " bash: nc: command not found"? E quindi esce a un prompt della shell o si blocca? (Ti incoraggio a modificare la domanda per aggiungere questi dettagli, quindi le persone in Australia che si stanno appena svegliando non devono leggere tutti questi commenti per scoprire quali sono i tuoi sintomi.)
Scott

@Scott: Grazie, ho integrato le mie risposte alle tue domande nella domanda originale. Qualche idea?
Amil

Risposte:


7

Se si utilizza la versione GNU di netcat, è possibile utilizzare il flag -c per chiudere la connessione su EOF.

-c, --clude la stretta connessione su EOF da stdin

Se si utilizza la versione originale dello strumento, è possibile utilizzare il flag -q.

-q secondi dopo EOF su stdin e ritardo di secondi

Un esempio per la versione originale è:

cat file.txt | nc -u -q 0 127.0.0.1 5144

Ho aggiunto "-q 0" al comando originale. Ciò chiude la connessione dopo l'invio del file.


Per distinguere: la versione originale è quella che richiede di specificare -l -p <port>per l'ascolto. La versione GNU richiede solo -l <port>.
martedì

1

Supponendo che dopo l'invio della connessione EOF rimarrà inattivo, è possibile utilizzare l' -w timeoutopzione, che funziona per timeoutessere uguale a zero (a differenza -qdell'opzione stupida ...)

cat file.text | nc -u localhost 4300 -w0

0

Se stai trasferendo da FreeBSD a Windows:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N arresta il socket di rete dopo EOF

Finestre: nc -l -p 5144 > output.txt

-linterromperà l'ascolto alla connessione chiusa (a differenza -L)

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.