2017-01-05 4 views
0

私のネットワークに接続されているIPアドレスのリストもあるユーティリティを作成しています。私のWindowsシステムがネットワークに接続されていることを確認する方法

このリストを更新して、そのリストに有効なIPだけが存在するようにするモジュールを作成する必要があります。 私はそれぞれのIPでPINGを使用してこれを実現し、非応答のものを削除することを考えました。

問題は、自分のシステム自体がネットワークに接続されていないときにIPを削除したくないということです。この場合、すべてのIPが明白な理由で削除されるためです。

システムがネットワークに接続されていることを確認するにはどうすればよいですか? 私はJavaを使用しています。 他の質問を探してみましたが、関連するものは見つかりませんでした。

[EDIT1] IPリストは手動で追加されます。サーバーにはいくつかのIPがありますので、気にする必要はありません。@Hoijfで提案されているようにサーバー全体でルックアップを行うことはできません。また、IPの変化は一貫しているので、リストを更新して、応答しないサーバ/ IPを置き換える必要があるのです。

+0

すべてのローカルネットワークインターフェイスまたはIPアドレスを列挙するAPIがある場合は、JDKを見てください。彼らはOS側に存在するが、私はJavaについて知らない。存在する場合は、マシンにまだ予期されたIPアドレスが割り当てられているかどうか、およびアダプターの状況がまだUPであるかどうかを調べます。 – Matthias247

+0

もう1つの方法は、コマンドラインツールの1つを使用して情報を照会する方法です。例: 'ipconfig'。サブプロセスとして起動することができます。関連情報を解析して、ネットワークアダプタがまだ接続されていて、IPアドレスが割り当てられているかどうかを確認します。ただし、これは直接Java/OS APIよりもオーバーヘッドになる可能性があります。 – Matthias247

答えて

0

問題は、私はIPの私のシステム自体が、その場合のように、ネットワークに 接続されていない削除したいいけないということです は明白なため削除されますIPのすべての理由。

これは一般的なネットワーク隔離の問題です。あなたのLANがまだアップしている(ipconfigはNICのステータスをUPと表示する)場合は考慮する必要がありますが、アップストリームのルータではインターネット接続が失われています。解決策として、いつも起きているはずの参照IP /ホストに対してpingを実行することを検討することができます。 したがって、プログラムでこの参照ホストにpingを実行して、アクティブリストからホストを削除する必要があるかどうかを確認するポリシーを作成する必要があります。

+0

ネットワーク隔離の問題は、このシナリオでは正当な用語です。私はいくつかの保証されたIPを把握し、参照として使用しなければなりません。 –

0
  1. アクティブなIPをネットワークでスキャンして保存します。
  2. IPを配列に格納し、ユーザーが停止またはリフレッシュを選択するまで(手順1に戻る)、この配列を反復処理します。
  3. 各IPのステータスを表示します。

    public class temp 
    { 
    static ArrayList<InetAddress> history = new ArrayList<InetAddress>(); 
    static Timer timer; 
    static InetAddress add; 
    public static void main(String[] args) 
    { 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
        int timeout = 25; 
        timer = new Timer(1000, new ActionListener() 
        { 
         @Override 
         public void actionPerformed(ActionEvent e) 
        { 
         for(InetAddress ii : history) 
         { 
          try 
          { 
           System.out.println(ii+" >> "+ii.isReachable(timeout)); 
          } catch (IOException e1){System.out.println(ii+" >>       Failed");} 
         } 
        } 
    }); 
    Thread t = new Thread(new Runnable() 
    { 
        @Override 
        public void run() 
        { 
         while(true) 
         { 
          try 
          { 
           history.add(InetAddress.getByName(br.readLine())); 
          } catch (UnknownHostException e) 
          { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } catch (IOException e) 
          { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 
         } 
        } 
        }); 
        t.start(); 
        timer.start(); 
    } 
    

    }

+0

戻してくれてありがとう。 問題がある場合は、私のネットワークに1000以上のシステムがあり、最初は手動でリストに追加された既存のIPについてのみ気にする必要があります。これは、一度に使用する特定のIP(IPから仮想サーバー)のみを取得し、それらの仮想サーバーがしばしば削除されるためです。これは不合理な取り決めですが、いくつかの特定の要件については私たちの組織にうまく収まります。私の質問はおそらく、その要件、更新と明確ではありません。 –

+0

それでは、ipのユーザー入力方法があります。IPをファイルに保存し、必要に応じて後で再ロードすることができます。ネットワークをスキャンする必要はなく、原則は同じです。 – Hoijf

+0

#hoijfあなたが示唆したことはすべて正しいですが、私の特定のユースケースに合っていません。とにかく@ sanjayk79で提案されているように、私たちのネットワークが本当にダイナミックなので、常に危険なケースであることが保証されているIPを把握する必要があるようです。 –

関連する問題