2011-01-11 2 views
1

Ich habe dieses Semester meinen ersten Networkingkurs begonnen. Mein Problem ist, dass immer, wenn ich versuche, meinen Socket mit einem Host außerhalb meines LAN zu verbinden, Netzwerk unerreichbar Fehler zurückgegeben wird. Ob es sich um BSD-Sockets oder Java-Sockets handelt. Darüber hinaus geben meine nmap Sonden auch den gleichen Fehler zurück. Einmal stellte ich hier eine ähnliche Frage über Ping-Probes und die Antwort war, dass mein LAN-Proxy ICMP-Anfragen ablehnt. Aber es gibt keine ICMP-Anfragen beim Aufbau von TCP-Verbindungen richtig? Warum, auf der anderen Seite, kann mein Browser eine Verbindung zu jedem Host ... obwohl es den gleichen Proxy verwendet ... Auch (bitte entschuldigen Sie mich für diesen langen Zweifel), wenn ich den Hostnamen als www.google. com in meinen Sockets, "unbekannter Host" wird zurückgegeben. Aber mein Browser erkennt glücklicherweise denselben Host.Warum können meine Socket-Programme nicht mit dem Internet verbunden werden?

Vielen Dank im Voraus ...

import java.net.*; 
import java.io.*; 

class Whois { 
public static void main(String args[]) throws Exception{ 
    int c; 
    Socket s=new Socket(args[0],Integer.parseInt((args[1]))); 
    InputStream in=s.getInputStream(); 

    while((c=in.read()) != -1) { 
     System.out.print((char) c); 
    } 
    s.close(); 
} 
} 
+1

Browser arbeitet auf Port 80, der durchgelassen wird; Ich vermute, dass Ihr Socket auf einem Port läuft, der blockiert wird. –

+0

Ich versuchte auch Port 80. selbe Fehler – pflz

+0

Sie müssen wahrscheinlich etwas Code schreiben, da es eine beliebige Anzahl von Dingen sein könnte. –

Antwort

1

Leider gibt es für dieses Verhalten viele Gründe geben kann.

Mein bester Schuss ist, dass Sie sich hinter einer Firewall sind, die alle Verbindungen blockt die 80. In diesem Fall sind nicht Hafen zu gehen, können Sie versuchen mit Ihrem Programm mit dem gleichen Netzwerk zu verbinden, aber Port 80.

Nicht sicher, warum Sie keine Namensauflösung für Google erhalten würden. Ich vermute, es ist ein Fehler in Ihrem Code, kann aber nicht sicher sagen.

Ich hoffe, es hilft.

+0

Ich versuchte Port 80 ... gleichen Fehler. Ich kopierte das Whois-Programm von The Complete Reference, keine Chance auf einen Bug. Bitte erklären Sie uns, – pflz

1

Untersuchen und verstehen Sie Ihre Netzwerkkonfiguration. Wie sind Sie mit dem Internet verbunden? Ihre Arbeitsstation hat wahrscheinlich einen default route, der wahrscheinlich wieder auf einen Rechner zeigt, der Network Address Translation (NAT) ausführt und/oder einen firewall und vielleicht den proxy Server betreibt. Finden Sie heraus, wie Sie name resolution (DNS) tun. Wenn Sie diese herausfinden, finden Sie möglicherweise, was Sie tun müssen, um sich draußen zu verbinden.

Auf der anderen Seite, Fehler im Code sind wir in der Frage nicht sehen, wahrscheinlich auch :)

+0

Ja, es ist hinter einer Firewall. Aber mein Hauptbezweifelt ist, dass mein Browser kein Problem beim Aufbau von TCP-Verbindungen hat. Ich habe versucht, Port 80, der gleiche Fehler zurückgegeben – pflz

+0

Hat Ihr Browser * Proxy * Setup? Welche Art? –

+0

Ja, der Browser ist über einen Proxy verbunden. Es entspricht den System-Proxy-Einstellungen. – pflz

1

Es ist wahrscheinlich eine Firewall, die alle Verbindungen außerhalb Hosts und ein interner DNS-Server blockiert, Sucht keine externen Hostnamen. Aus diesem Grund können Ihre Socket-Programme weder nach Hostnamen noch nach externen Diensten suchen.

Die gleiche Einschränkung gilt für Ihren Browser; Es ist nur so, dass Ihr Browser für die Verwendung eines Proxy-Servers eingerichtet ist. Dies bedeutet, dass der Browser nicht direkt nach Hostnamen oder nach externen Hosts sucht - er sucht nur den Proxy-Namen und stellt TCP-Verbindungen zum Proxy-Server her. Der Proxy macht dann die Hostnamen-Suche und macht die TCP-Verbindungen zur Außenwelt im Auftrag Ihres Browsers.

Verwandte Themen