2010-03-31 15 views
22

Ich verwende netcat als Backend, um Daten für ein Programm, das ich mache, hin und her zu schaufeln. Ich habe mein Programm im lokalen Netzwerk getestet, und sobald es funktionierte, dachte ich, es ginge nur darum, einen Port von meinem Router weiterzuleiten, damit mein Programm über das Internet funktioniert. Ach! Dies scheint nicht der Fall zu sein.Wie bekomme ich netcat, um Verbindungen von außerhalb des LAN zu akzeptieren?

Wenn ich netcat auf Port 6666 mit Start:

nc -vv -l -p 6666,

dann in einem Browser zu 127.0.0.1:6666 gehen, da erwartete ich eine HTTP-GET-Anfrage kommen sehen, durch netcat (und mein Browser sitzt im Warte vergeblich). Wenn ich jedoch auf my.external.ip.address:6666 gehe, kommt nichts durch und der Browser zeigt 'konnte nicht mit my.external.ip.address:6666 verbinden'.

Ich weiß, dass der Port korrekt weitergeleitet wird, wie www.canyouseeme.org sagt Port 6666 ist offen (und wenn netcat nicht zuhört, dass es geschlossen ist).

Wenn ich Netcat mit -g my.adslmodem's.local.address zum Einstellen der Gateway-Adresse ausführen, bekomme ich das gleiche Verhalten. Benutze ich diese Kommandozeilenoption richtig? Irgendeine Einsicht, was ich falsch mache?

Antwort

10

Stellt sich heraus, es ist kein Problem. Es erscheint nur so, weil mein Router keine Haarnadelverbindungen zulässt. Das heißt, obwohl ich es richtig eingerichtet habe, würde der Router die Verbindung nicht herstellen, wenn sowohl Quelle als auch Ziel hinter dem NAT sind. Einfach ncat -l -p 6666 funktioniert gut, solange die Anfrage von außerhalb des LANs kommt. Um das zu testen, blätterte ich mit meinem 3G-Mobiltelefon nach my.external.ip.address:6666 und sicher genug, dass eine HTTP-Anfrage kam :)

Diese Antwort kam von: a serverfault question, wo ich diese Frage an erster Stelle hätte stellen sollen. Entschuldigung dafür.

+0

Hah. Nein Ich stellte eine ähnliche Frage zu SF und sie fanden es zu neuartig, ich konnte nicht sagen, was eine "Haarnadel" Verbindung war (und die Leute referierten immer noch auf "Haarnadel-NAT" und sagten mir zu RTFM), bis ich diese Antwort gelesen hatte Danke. – isomorphismes

+0

Es funktionierte auch für mich. Ich benutzte nicht 0.0.0.0. Wie Sie sagten, nur Hafen auf Zielmaschine. Danke! –

19

Sie müssen auf die öffentliche Schnittstelle hören. Sie hören gerade auf localhost, wo niemand außerhalb Ihres Computers eine Verbindung herstellen kann.

Ihr Kilometerstand kann variieren, aber mit meiner Implementierung von Netcat muss ich diese Befehlszeile verwenden, um auf alle öffentlichen Schnittstellen zu hören.

ncat -vv -l 0.0.0.0 6666

+2

Vielen Dank für Ihre Antwort. Ich denke nicht, dass dies der Fall ist, da netcat glücklicherweise Verbindungen von anderen Computern in meinem Netzwerk erhält. Auch wenn es startet, zeigt es "auf [alle] 6666 hören ..." an. Ich habe Ihren Vorschlag (mit "-p" vor dem Port, sonst wählt er einen zufälligen Port) und bekam "0.0.0.0: inverse Host-Lookup fehlgeschlagen: Unbekannter Host" :( – Chris

+0

Works on Cygwin auch (nc) – golimar

4

Um eine Zuhören Adresse angeben:

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

auf einem Debian Jessie Getestet mit netcat-traditional-1.10-41

+1

Es ist nicht möglich, '-l' und' -s' zusammen zu verwenden. – benedikt

+1

@benedikt: einige 'nc'-Versionen können, manche nicht. ' nc.traditional' unter Debian kann: 'nc -l -s 192.168.18.100 -p 6666' Stattdessen'/bin/nc.openbsd' auf Ubuntu kann nicht: 'nc -l -s 192.168.244.163 -p 6666 nc: kann nicht verwenden -s und -l' –

+0

Danke für die Klarstellung – benedikt

Verwandte Themen