スクリプト内のLANのサーバーIPを見つける

スクリプト内のLANのサーバーIPを見つける

クライアントコンピュータのスクリプトが同じネットワーク上でサーバーIPを自動的に検索する方法を探しています。

Ubuntu 14.04.1を実行している複数のメディア拡張クライアントと、単一のLAN上で同じサーバーを実行しているサーバーがあります。クライアントが起動時にネットワーク上のサーバーを検索したい。静的IP設定は、サーバーやDHCPで利用可能なソリューションではありません。

ホスト名で検索するのは便利ですが、両方のデバイスのホスト名が同じか(可能性は低いが可能です)、ホスト名が変更された場合は、クライアントがそのようにブロードキャストして検索できるようにサーバーに何かをしたいと思います。そしてLANは常に同じイーサネットではないかもしれません。 (例えば192.168.1。、10.0.0。、等)

クライアントは最終的にサーバー上で実行されているmysqlサーバーを探しますが、実際にはスクリプトがサーバー上のデータベースを使用するようにソフトウェアを構成できるようにIPだけが必要です。

助けてくれてありがとう。

編集:サードパーティのプログラムは大丈夫です。クライアントはいつでもすべてのサブネット上の任意のサーバーに接続できます。サーバーを探すものがある場合は、サーバーとの接続が失われた後に検索を再開するためにKeepaliveを使用できます。 MAC または他のハードウェア識別子のリストを維持することはオプションではありません。

答え1

あなたの要求によると、それはMulticast DNS (i.e. Bonjour)正義の目的だと思います。 Ubuntuシステムを使用している場合は、すでにあふれすでにインストールされているサーバーavahi-daemonとクライアントavahi-discover

デフォルトでは、次のように設定できます。

  • サーバーに(デフォルトのホスト名の代わりに)クールな名前を割り当てるには、Avahiデーモンでその名前を正しく設定するだけです。この構成は、/etc/avahi/avahi-daemon.confデスクトップを介して実行するか、構成ファイルを変更し、以下を定義することを確認することによって実行できます。

    [server]
    host-name=database
    domain-name=local
    


  • クライアントはその名前のIPアドレスを確認してdatabase.localIPアドレスを取得します。たとえば、ping database.localAvahi ツールを実行または使用します。avahi-resolve -4 -n database.local

これは、ローカルDNSドメインがマルチキャストドメインとして定義されているために可能です。クライアントは、接続されているすべてのシステムに到達するマルチキャストクエリをLANに送信します。サーバーのAvahiデーモンはクエリに応答し、IPアドレスを提供します。

の詳細情報をご覧ください。ここでZeroConfを設定する方法

修正したい場合は、mDNS同時にインストールすることもできます。顧客ハバヒツールそしてMDNSスキャン。最初のものはサービスを宣伝するために使用でき、もう1つはネットワーク上でそのサービスを見つけるために使用できます。たとえば、

MySQL データベースに関連付けられた新しい名前を登録するためにサーバー上でサービスを実行するには、次のようにします。

    $ mzclient -p "_sql._tcp 3306 database"
    *** Registering name = 'database', type = '_sql._tcp', domain = 'local.'
    *** Registered name = 'database'
    (...)

Avahiワンタイムルックアップサービスを試すには:

$ avahi-browse -t _sql._tcp 
+   eth0 IPv4 database    _sql._tcp            local

または、継続的にネットワークを検索して利用可能なmDNサービスを探します。

    $ mdns-scan 
    + server [xx:xx:xx:xx:xx:xx]._workstation._tcp.local
    + database._sql._tcp.local
    Browsing ... \           
[ interrupt with Ctrl+Z]


この構成では、不要な中央 DNS サーバーは使用されません。すべてのクエリは、マルチキャストトラフィックを使用してローカルLANで実行されます。

答え2

サーバーのMACは少なくとも頻繁に変わらないと予想されるため、これを使用してサーバーのIPを識別します。同様の方法を使用して、arpwatchサーバーIP / MACペアが識別されるまでネットワークを監視してサーバーIPを取得します。

答え3

nmapを使用したネットワークスキャンが機能する必要があります。より簡単な最初のステップは、arp -aブロードキャストネットワーク上のすべてのMacとIPを提供するコマンドを実行することです(ICMP要求がブロックされていない場合)。

次に、現在のブロードキャストアドレスに対してpingを試してみてください(ICMP要求をブロックしないでください)。たとえば、サーバーが192.168.1.10でネットマスクが255.255.255.0の場合ping -b 192.168.1.255(Windowsの場合ping -a 192.168.1.255)、ネットワーク上の他のすべてのデバイス(サーバー、ルーター、シンクライアントなど)から応答を呼び出す必要があります。

もちろん、これはサブネット内のデバイスのみを提供します。 「ネットワーク」にさらにサブネットがある場合は、これらのping 他のネットワークにブロードキャストアドレスを実行し、各ネットワークで同様のデバイスのリストを作成することもできます。

答え4

編集2(会話に基づく):

これがあなたにとってより効果的であることを確認してください(追加情報を含む)。

  nmap -p 22 --open -sV 192.168.1.0/24

awk以前と同じように IP のみをご希望の場合は、以下を追加してください。

  nmap -p 22 --open -sV 192.168.1.0/24 | 
        awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'

どこ:

nmap : the executable name
-p 22 : specifies the port to test
--open : suppress output for clients that are not listening
-sV : display the version string reported by the scanned server

編集する:

ローカルコンピュータが通信できるネットワークのすべてのIPアドレスを取得したい場合は、次の手順を試してくださいnmap

nmap -sP -PA21,22,25,3389 192.168.1.1-254 | 
    awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'

サーバーが-PA21,22,25,3389(ブロードキャストネットワーク上で192.168.1.1-254)動作しているかどうかをテストするためにカスタムポート範囲を試しましたが、接続したい特定のポートがある場合はそれを変更できます。awkIPアドレス以上が必要な場合は削除でき、ホスト名などが印刷されます。


から来るサーバーのIPアドレスだけが必要な場合は、次をifconfig実行できます。

ifconfig | awk '/inet addr/{print substr($2,6)}'
[OR]
/sbin/ifconfig | awk '/inet addr/{print substr($2,6)}'

これにより、次の結果が印刷されます。

10.0.0.XX1
10.0.0.XX2
10.0.0.XX3
127.0.0.1

localhost - 127.0.0.1結果から削除するには、次を使用します。

ifconfig | awk '/inet addr/{print substr($2,6)}' | awk '!/127.0.0.1/'

Result:
192.168.1.XXX

この行をそのままスクリプトに入れ、ローカルコンピュータで実行してIPアドレスを取得するか、シェルスクリプトに入れて次のようにリモートアドレスを取得できますssh

#!/bin/sh
#getremoteips.sh
#chmod 700 getremoteips.sh ##Root should only be running this

ssh $1 "/sbin/ifconfig |
awk '/inet addr/{print substr(\$2,6)}' |
awk '!/127.0.0.1/'"

スクリプトを実行します。./getremoteips.sh <enter hostname or ip>

関連情報