2020年末にある相談を頂きました。その相談とは、社内のLANセグメント上で稼働中のネットワークデバイスから情報を取得したい、それも認証を必要としない方法で、ネットワーク情報だけでなく、OSの種類やバージョン、ネットワークプリンタやルーターの情報まで取得したいというものでした。さて、どうしましょうか。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
相談には、「残念ながら参考情報程度しか取得できない」とお答えしました。企業にLANが普及し始めた20〜30年前とは異なり、現在のネットワークでは、境界だけでなく、デバイスのエンドポイントでもファイアウォールが有効になっているのが当然であり、ネットワークを介して“認証なし”で得られる情報は多くありません。逆に、得られる情報が少ない方が、良いともいえます。ネットワークデバイスが誰にでも自らの情報をおしゃべりするような状態は、決して健全なネットワーク環境とはいえません。
よく知られた方法として、IPv4アドレスに対して「Ping」コマンドを実行し、応答のTTL(Time to Live)値を調べる方法があります。TTL値が「128」ならWindows、TTL値が「64」ならLinuxやmacOSとざっくりと判断できるというものです(画面1)。
しかしながら、現在はプライベートなネットワークにおいてもPingやICMPが許可されていないことがあります。TTL値を得られたとしても、Windowsかそうでないかを判断できるくらいで、Windowsクライアントなのか、Windows Serverなのか、Windowsのどのバージョンなのかまで知ることはできません。
Ping/ICMPが利用可能であれば、Pingコマンドや「arp」コマンドでIPv4アドレスやIPv6アドレス、MACアドレスを調査することができますし、さらに「nslookup」コマンド(Windows、レガシーなLinux/UNIX)、「dig」コマンド(Linux)、Windows PowerShell(「Windows 8」および「Windows Server 2012」以降)の「Resolve-DnsName」コマンドレットなどを利用して、ホスト名やDNSドメイン名などの情報を取得することができます。
さらに、MACアドレスを入手できれば、MACアドレスのベンダーコード(OUI)からネットワークアダプターのベンダーを特定できる場合があります。仮想マシンの場合は、既定値を変更していない限り、MicrosoftのOUIである「00-15-5D」(Hyper-Vの仮想マシン)や「00-1D-D8」(System Center Virtual Machine ManagerやAzure Stackで管理されている仮想マシン)、VMwareのOUIである「00-15-5D」や「00:0C:29」で識別することもできます。
SNMP(簡易ネットワーク管理プロトコル)を利用できれば、ネットワークデバイスからさらに詳細な情報を入手できる場合もありますが、コミュニティー名とパスワードによる認証が必要ですし、情報を取得するためのSNMP対応ツールも必要です。そもそも、デバイス側でSNMPのエージェントを適切にセットアップしてなければ、何も情報は得られません。
ポートスキャンを用いたツールを利用すれば、アプリケーションのプロトコルのバージョンや特性からOSの詳細な識別に役立つ情報を得られる場合があります。
例えば、オープンソースのネットワークツール「Nmap」(https://nmap.org/)は、「-A(または-O)」パラメーターのOS検出オプションを提供します。主要なLinuxであれば標準のリポジトリから簡単にインストール(Ubuntuの場合は「sud apt install nmap」)できますし、Windowsであればインストーラーを使用してGUIツールの「Zenmap」とともに簡単にインストールできます。
Copyright © ITmedia, Inc. All Rights Reserved.