2010-03-31 11 views
22

Sto usando netcat come backend per spalare dati avanti e indietro per un programma che sto facendo. Ho testato il mio programma sulla rete locale e, una volta funzionato, ho pensato che sarebbe stato semplicemente necessario inoltrare una porta dal mio router per far funzionare il mio programma su Internet. Ahimè! Questo sembra non essere il caso.Come posso ottenere netcat per accettare connessioni dall'esterno della LAN?

Se inizio netcat in ascolto sulla porta 6666 con:

nc -vv -l -p 6666,

poi andare a 127.0.0.1:6666 in un browser, come previsto vedo una richiesta HTTP GET venire attraverso netcat (e il mio browser si siede in attesa invano). Se vado a my.external.ip.address:6666, tuttavia, nulla viene visualizzato e il browser visualizza "Impossibile connettersi a my.external.ip.address:6666".

So che la porta è correttamente inoltrata, come www.canyouseeme.org dice che la porta 6666 è aperta (e quando netcat non è in ascolto, è chiusa).

Se eseguo netcat con -g my.adslmodem's.local.address per impostare l'indirizzo del gateway, ottengo lo stesso comportamento. Sto usando questa opzione della riga di comando correttamente? Qualche idea su cosa sto facendo male?

risposta

10

venuto fuori che non c'è nessun problema. Appare solo in questo modo perché il mio router non consente connessioni a forcina. Cioè, anche se ho impostato correttamente, il router non farebbe la connessione quando sia la fonte che la destinazione sono dietro il NAT. Semplicemente ncat -l -p 6666 funziona bene, purché la richiesta provenga dall'esterno della LAN. Per verificare questa ho passato in rassegna a my.external.ip.address:6666 con il mio telefono cellulare 3G e abbastanza sicuro, una richiesta HTTP è venuto attraverso :)

Questa risposta è arrivata da: a serverfault question, che è dove avrei dovuto chiedere a questa domanda, in primo luogo. Ci scusiamo per questo.

+0

Hah. No Ho fatto una domanda simile su SF e hanno pensato che fosse troppo nuovo, non saprei dire che cosa fosse una "forcina" (e la gente continuava a riferirsi a "hairpin NAT" e mi diceva a RTFM) finché non ho letto questa risposta Grazie. – isomorphismes

+0

Ha funzionato anche per me Non ho usato 0.0.0.0 Come hai detto, solo porta su target machine. Grazie! –

19

È necessario ascoltare l'interfaccia pubblica. Al momento stai ascoltando su localhost dove nessuno può connettersi all'esterno del tuo computer.

La tua milizia può variare, ma con la mia implementazione di netcat devo usare questa riga di comando per ascoltare tutte le interfacce pubbliche.

ncat -vv -l 0.0.0.0 6666

+2

Grazie per la risposta. Non penso che sia così, dato che netcat riceve felicemente connessioni da altri computer sulla mia rete. Inoltre, all'avvio visualizza "in ascolto su [any] 6666 ...". Ho provato il tuo suggerimento (con "-p" prima della porta, altrimenti seleziona una porta casuale) e ho ottenuto "0.0.0.0: ricerca inversa dell'host fallita: Host sconosciuto" :( – Chris

+0

Funziona anche su Cygwin (nc) – golimar

4

Per specificare un indirizzo di ascolto:

nc -l -s <LISTENING_IP_ADDR> -p <LISTENING_PORT> 

Testato su una Debian Jessie con netcat-traditional-1.10-41

+1

Non è possibile usare insieme '-l' e' -s'. – benedikt

+1

@benedikt: alcune versioni di 'nc' possono, alcune non possono, ' nc.traditional' su Debian can: 'nc -l -s 192.168.18.100 -p 6666' Invece'/bin/nc.openbsd' su Ubuntu non è possibile: 'nc -l -s 192.168.244.163 -p 6666 nc: non possono usare -s e -l' –

+0

Grazie per il chiarimento – benedikt

Problemi correlati