ユーザーを支援するために、コードでLAN上のOracleデータベースを検出したいと思います。これを行うには、最初にすべてのホストを検出し、次に各ホストをチェックして、Oracleのデフォルトポートでリッスンしているかどうかを確認します。
これについてどうやって行くのかアイデアはありますか?できればJavaで。ただし、どの言語やアルゴリズムでもかまいません。
ユーザーを支援するために、コードでLAN上のOracleデータベースを検出したいと思います。これを行うには、最初にすべてのホストを検出し、次に各ホストをチェックして、Oracleのデフォルトポートでリッスンしているかどうかを確認します。
これについてどうやって行くのかアイデアはありますか?できればJavaで。ただし、どの言語やアルゴリズムでもかまいません。
DHCP を使用していますか? その場合、DHCP サーバーには、渡されたリースのリストがあります。これで、LAN 上のホストのリストが表示されます。次に、これらの各ホストで Oracle ポートへの接続を開き、接続が受け入れられるかどうかを確認します。
半ダースほどの行でシェル スクリプトとして実装するのは非常に簡単なはずです。Javaは、このようなものにはやり過ぎのようです。リース ファイルをループし、各リースから IP を取得して、Oracle ポートに telnet します。接続されている場合は、切断して IP を標準出力に出力します。
プラットフォームに依存しないようにしたい場合、およびホストを一覧表示するある種のデータベースにアクセスできない限り、一覧を取得する唯一の方法は、ローカルネットワーク内の各IPアドレスを試すことです。それぞれのOracleポート。
このアプローチには多くの問題があります。
あなたがツールを探している場合、Loo@Lanはあなたのためにこれを行うことができます。残念ながら、利用可能なソースはありません...
brazzy が指摘しているように、特にスキャナーにバグがある場合、ホストのスキャンは問題を引き起こす可能性があります。
より良いアプローチは、データベースの所有者にデータベースをどこかに登録してもらうことです。たとえば、ローカルの DNS サービス (または Oracle は zeroconf をサポートしていますか?)、または単純にイントラネットの Web ページや wiki などです。
SID名/アドレスを固定アドレス(おそらく単純なWebサービスを使用)でサーバーに登録し、そこからリストを照会することをお勧めします。もう 1 つのアプローチは、1 つ以上のサブネットをスキャンすることによるブルートフォース アプローチ (@brazzy によって説明されています) ですが、これは実際には良いことではありません。
これらの賢明な答えはすべて、多くの企業がデフォルトのポートを使用しない理由です。データベースごとに異なるポートを使用することは完全に可能です。