2011-01-11 18 views
1

私は今学期のネットワーキングに関する最初のコースを開始しました。 私の問題は、自分のソケットをLAN外のホストに接続しようとすると、 ネットワーク到達不能エラーが返されることです。それらがBSDソケットであろうとJavaソケットであろうと。 また、私のnmapプローブも同じエラーを返します。 私はここでpingプローブについて同様の質問をしましたが、私のLANプロキシがICMPリクエストを拒否しているという回答がありました。しかし、TCP接続を正しく確立するためのICMP要求はありませんか? なぜなら、私のブラウザはどんなホストにも接続できます...同じプロキシを使用しているにもかかわらず... www.googleとしてホスト名を付けると、(この長い疑問を私に許してください)私のソケットのcomは、 "不明なホスト"が返されます。しかし、私のブラウザは同じホストをうれしく認識しています。私のソケットプログラムがインターネットに接続できないのはなぜですか?

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

ブラウザは、通過するポート80で動作します。私の推測ではあなたのソケットはブロックされているポートで動作しています。 –

+0

私はポート80も試しました。同じエラー – pflz

+0

いくつかのコードを投稿する必要があるでしょう。 –

答えて

1

...事前にありがとう残念ながら、この行動には多くの理由があるかもしれません。

80番ポートに接続されていない接続をブロックしているファイアウォールの背後にいることをお勧めします。この場合、同じネットワーク、ポート80に接続しようとする可能性があります。

Googleの名前解決が得られない理由がわかりません。私はそれがあなたのコードのバグだと思っていますが、確かに言えません。

希望します。

+0

私はポート80 ...同じエラーを試みました。私はThe Complete ReferenceのWhoisプログラムを、バグの可能性なしにコピーしました。親切に説明する – pflz

1

ネットワーク設定を調査し、理解してください。どのようにインターネットに接続していますか?おそらくNetwork Address Translation(NAT)を実行しているか、firewall、おそらくはproxyというサーバを実行しているマシンに、おそらくdefault routeというマシンがあります。どのようにあなたがname resolution(DNS)を行うかをご覧ください。あなたはあなたが外に接続するためにあなたがする必要があるものを見つけるかもしれないこれらを把握する。

一方、我々は質問に表示されていないコードのエラーも可能性があります:)

+0

はい、そのファイアウォールの背後にある。しかし、私の主な疑問は、私のブラウザがTCP接続を確立するのに何の問題もないということです。私はポート80を試しましたが、同じエラーが返されます – pflz

+0

ブラウザに* proxy *の設定がありますか?どのような種類ですか? –

+0

はいブラウザはプロキシ経由で接続されています。システムプロキシの設定と同じです。 – pflz

1

外部ホストへのすべての接続をブロックするファイアウォール、および内部DNSサーバーはおそらくあり外部ホスト名を検索しません。これは、ソケットプログラムがホスト名の外側を調べたり、外部サービスに接続したりすることができない理由です。

ブラウザにも同じ制限が適用されます。ブラウザがプロキシサーバーを使用するように設定されているだけです。これは、ブラウザがホスト名の外を直接調べたり、外部ホストに接続していないことを意味します。プロキシ名を検索し、プロキシサーバーとのTCP接続を行うだけです。プロキシは、ブラウザに代わって、ホスト名のルックアップを行い、外部とのTCP接続を行います。

関連する問題