Prüfen Sie, ob ein port offen ist
Ich kann nicht scheinen, etwas zu finden, dass mir sagt, ob ein port in meinem router geöffnet ist oder nicht.
Ist das überhaupt möglich?
Den code habe ich jetzt nicht wirklich zu funktionieren scheint...
private void ScanPort()
{
string hostname = "localhost";
int portno = 9081;
IPAddress ipa = (IPAddress) Dns.GetHostAddresses(hostname)[0];
try
{
System.Net.Sockets.Socket sock =
new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,
System.Net.Sockets.SocketType.Stream,
System.Net.Sockets.ProtocolType.Tcp);
sock.Connect(ipa, portno);
if (sock.Connected == true) //Port is in use and connection is successful
MessageBox.Show("Port is Closed");
sock.Close();
}
catch (System.Net.Sockets.SocketException ex)
{
if (ex.ErrorCode == 10061) //Port is unused and could not establish connection
MessageBox.Show("Port is Open!");
else
MessageBox.Show(ex.Message);
}
}
Wie scheitert es? Sind die Ergebnisse nicht wie erwartet, sind Sie immer eine Ausnahme?
auch wenn der code verbindet den Hafen, es sollte sagen, der port ist offen, nicht geschlossen
Ich will es sagen, dass mein port offen ist, weil ich es weitergeleitet in meinem router, aber es ist nicht, um eine Verbindung...
auch wenn der code verbindet den Hafen, es sollte sagen, der port ist offen, nicht geschlossen
Ich will es sagen, dass mein port offen ist, weil ich es weitergeleitet in meinem router, aber es ist nicht, um eine Verbindung...
InformationsquelleAutor Yuki Kutsuya | 2012-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Sollten Sie vielleicht ändern Sie die Adresse 127.0.0.1 an so etwas wie 192.168.0.1 oder was auch immer Ihre router-IP-Adresse ist.
was passiert, wenn Sie versuchen, den code zu benutzen?
Es sagt, dass es nicht verbinden, selbst wenn der port offen ist.
das bedeutet nichts, lauscht auf diesem port. Stellen Sie sicher, dass Ihr router ist port-forwarding auf Ihrem pc und haben ein Programm zu öffnen, und lauscht auf diesem port und wird es schließen. Auch sollten Sie versuchen, eine Verbindung mit Ihrer Außenwelt-Adresse. Schauen Sie sich meine ip bei google ein und verwenden Sie diese ip-Adresse.
Ich hatte, aber dann wieder, ist es möglich zu erkennen, ob das port offen ist, ohne dass ein Programm, das mit dem port?
InformationsquelleAutor Clinton Ward
Eine bessere Lösung, wo Sie können sogar geben Sie einen timeout:
Und F#:
es sollte so performant wie C#... aber Messen Sie es selbst nur für den Fall?
könnte das gleiche Muster verwendet werden, für die System.Net.Sockets.UdpClient ?
keine Ahnung, tut mir Leid, probieren Sie es aus und lassen Sie uns wissen?
Liebe die F# - Implementierung, vielen Dank für die Bereitstellung.
InformationsquelleAutor ympostor
Wenn Sie versuchen eine Verbindung zu den loopback-adapter —
localhost
oder127.0.0.1
(es gibt keinen Platz wie 127.0.0.1!), Sie sind wahrscheinlich nicht immer gehen, um den router. Das Betriebssystem ist intelligent genug, zu erkennen, dass es eine Besondere Adresse. Keine Ahnung, ob das gilt als gut, wenn Sie tatsächlich geben Sie Ihrem Rechner die "echte" IP-Adresse.Siehe auch diese Frage: Was ist der Zweck der Microsoft Loopback-Adapter?
Beachten Sie auch, dass das laufen
traceroute localhost
(tracert localhost
in Windows) zeigt, dass das Netzwerk nur Knoten beteiligt ist, Ihre eigene Maschine. Der router ist nie beteiligt.InformationsquelleAutor Nicholas Carey
Gibt es keine Möglichkeit zu wissen, wenn der port in deinem router weiterleiten, außer, wenn es ein Programm gibt das hören im Hafen.
Wie Sie sehen können, in der Clinton-Antwort auf die .Net-Klasse verwendet wird, ist TcpClient, und das ist, weil Sie über einen TCP-socket zu verbinden. Das ist die Art wie Betriebssysteme, die verbindungen schaffen: die Verwendung eines sockets. Jedoch, wenn ein router nur leitet die Pakete (layer 3 des OSI-Modells) ein oder aus. In Ihrem Fall, was du router ist zu tun, was heißt: NAT. Es ist eine öffentliche IP-Adresse, die gemeinsam durch einen oder mehrere private IP-Adressen. Thats, warum Sie eine port-Weiterleitung.
Möglicherweise gibt es eine Menge von Routern im Pfad der Pakete und Sie werden nie wissen, was geschehen war.
Können sich vorstellen, Sie schicken einen Brief in der traditionellen Weise. Vielleicht können Sie schreiben in dem Brief, den der Empfänger beantworten muss Sie, um Sie zu prüfen, er/Sie gibt (Sie und der Empfänger sind die buchsen). Wenn Sie eine Antwort erhalten, werden Sie sicher sein, dass er/Sie es ist, aber wenn Sie nicht bekommen, was Sie nicht wissen, wenn der Postbote (in deinem Fall der router) vergessen zu liefern, Brief, oder der Empfänger nicht geantwortet. Sie würde auch nie wissen, ob der Briefträger hat einen Freund gebeten, zu liefern, dass Brief. Darüber hinaus werden die Briefträger nicht öffnen Sie den Brief, um zu wissen, dass er/Sie die Antwort, weil Sie auf eine Antwort warten. Alles, was Sie tun können, ist warten Sie einige Zeit erhalten Sie die Antwort. Wenn Sie nicht erhalten alle in dieser Zeit werden Sie davon ausgehen, dass der Empfänger nicht waren, die Sie senden den Brief. Das ist ein "timeout".
Sah ich in der Antwort zu erwähnen, die nmap-software. Es ist wirklich eine sehr gute und komplexe weich, aber ich denke, es funktioniert in der gleichen Weise. Wenn es keine app hören im Hafen, es gibt keine Möglichkeit zu wissen, ob es geöffnet ist oder nicht.
Bitte, lassen Sie mich wissen, wenn ich klar waren.
InformationsquelleAutor Ignacio
Einen port forward auf dem router getestet werden, kann nicht von innerhalb des LAN, die Sie benötigen, um eine Verbindung vom WAN - (internet -) Seite zu sehen, wenn Sie eine port-Weiterleitung funktioniert oder nicht.
Mehrere internet-sites, die Dienstleistungen anbieten, um zu überprüfen, ob ein port offen ist:
Was ist Meine IP-Port-Scanner
GRC | ShieldsUP!
Wenn Sie wollen, überprüfen Sie mit Ihrem eigenen code, dann Sie müssen sicherstellen, dass die TCP/IP-Verbindung wird umgeleitet über einen externen proxy oder setup einen tunnel. Dies hat nichts zu tun mit dem code, es ist basic networking 101.
InformationsquelleAutor Antoine Megens
InformationsquelleAutor Ravi Kumar G N
Für mich, ich brauchte etwas blockieren, bis die Verbindung zum port verfügbar ist, oder nach einer bestimmten Anzahl von Wiederholungen. So, dachte ich dieses code:
Hoffe, das hilft!
InformationsquelleAutor Mathieu Paquette
InformationsquelleAutor user11415274