Come usare nc per ascoltare su una porta TCP indefinitamente?


0

Voglio leggere i dati che arrivano su una porta TCP specifica a tempo indeterminato e scaricare i dati in un file. Ho provato diverse varianti di ncma non funziona per me. Per la maggior parte non ho riscontrato alcun errore sulla console. Di seguito è quello che ho provato:

nc -lv 12345 >> ../myfile
nc -v 12345 >> ../myfile
nc -v -p 12345 >> ../myfile
nc -v localhost -p 12345 >> ../myfile

Apprezzo il tuo aiuto ..


Qual era la tua intenzione con l'utilizzo -ve -p?
Attie,

@Attie -v per vedere cosa sta ricevendo e -p per il numero di porta.
user422171

Sì, ma perché sarebbe utile provare a farlo continuare ad ascoltare?
Attie,

@Attie Era solo per testare il comando se funziona e per sapere come funziona. Alla fine l'
avrei

Risposte:


0

Voglio leggere i dati che arrivano su una porta TCP specifica a tempo indeterminato

Questo non ha davvero senso ... se stavi cercando tutti i dati che arrivano su una porta UDP, allora va bene - TCP è comunque un protocollo basato sulla connessione. Una volta che un client si connette e tu accept()finisci con due socket: uno in ascolto e uno connesso al client ... ncchiuderai il socket di ascolto originale e gestirai uno contro uno con il client.


Se desideri essere in grado di ascoltare la connessione di più client, prova a utilizzare socat:

socat TCP-LISTEN:12345,fork FD:1 >> ../myfile

Ciò imposterà una presa di ascolto e interromperà un nuovo processo sulla connessione - mantenendo in ascolto la presa di ascolto. Tutti i dati ricevuti verranno scritti su stdout (descrittore di file 1), che viene reindirizzato ../myfileper l'aggiunta.

NOTA : i dati verranno ricevuti da qualsiasi numero di client, in nessun ordine garantito senza inquadramento ... ovvero: sarà un casino di dati confusi se hai più di un client alla volta.


Se vuoi socatgestire il file per te, puoi usare uno CREATEo OPEN(vedi la pagina man ):

socat TCP-LISTEN:12345,fork OPEN:../myfile,append

Se ti accontenti di un approccio " un client alla volta ", inserisci ncun ciclo:

while :; do nc -l 12345; done >> ../myfile

Prova questo con nc:

nc localhost 12345

Avrei dovuto chiarire la questione. Ho un solo client che invia su quella porta. Ho solo bisogno di prendere tutto ciò che arriva su quella porta e metterlo nel file
user422171

... allora cosa c'è che non va nc -l 12345 >> ../myfile?
Attie,

Crea il file ma non viene mai scritto. Ho controllato il client inviando una stringa ogni 2 secondi.
user422171

Immagino che ciò che hai menzionato nella risposta sia la causa. Non sto creando il socket. Sto tentando di
abbonarmi

0

lo schermo a sinistra

nc -l 1234 avvia il server.

lo schermo a destra si nc 127.0.0.1 1234collega.

sembra che tu abbia sbagliato i tuoi comandi.

Vale la pena sapere anche se stai usando quello gnu o quello bsd, il mio è quello bsd. man nc mostra "NC (1) BSD General Commands Manual". Per avviare il server su GNU potrebbe essere necessario -l con -p. Per connettere il client al server su qualunque porta, non userà mai -p.

inserisci qui la descrizione dell'immagine

Puoi usare anche -v

inserisci qui la descrizione dell'immagine

Il tuo problema immediato era che non lo facevi funzionare affatto.

La tua domanda ti chiede se è indefinito e noterò che se fai ctrl-c sul lato client, oltre a interrompere la connessione, arresta il server. Puoi mettere quel server in ascolto in loop. Che funzioni. Quindi il server continua ad ascoltare ed è ancora lì se provi a riconnetterti dopo un ctrl-c dal client.

inserisci qui la descrizione dell'immagine


Quando avvio il server ottengo questo: "Avvertenza: la ricerca del nome inverso non è riuscita per` 0.0.48.56 '"
user422171

Anche il comando client non fa nulla
user422171

@ user422171 hai provato ad aggiungere -n es. nc -lvn 12345 e $ nc -vn 127.0.0.1 12345 stackoverflow.com/questions/48779583/… E sul lato client dopo il collegamento, prova a digitare le cose e a premere INVIO. Dovrebbe essere quello che penso possa essere chiamato un server echo, cioè qualsiasi cosa digiti (e premi invio dopo), sul client, verrà ripetuta sul server.
barlop

Provato nc -lvn 12345e ottenutoError: Couldn't resolve host "12345"
user422171

@ user422171 hai idea di quale versione di nc debian utilizza per impostazione predefinita o quale versione hai? e se ci provi nc -n -l -p 12345 ? o nc -n -p 12345?
barlop
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.