免責事項
著者には、ネットワーク管理に関連する専門的な教育がないため、おそらく不正確さがあり、言及されているすべてが言及されているわけではありません。
発見
デバイスを検出するには、つまり 選択したIPアドレスに何かがあるかどうかを判断するには、次の方法を適用できます。
- pingスキャン
奇妙なことに、これが最も簡単で最も一般的な方法です。
- 開いているTCPポートを確認する
デバイスでping応答が無効になっている場合、TCPポートを使用して接続を確立しようとすることができます。 多くのポートがあり、それぞれのチェックにはかなりの時間がかかるという事実を考慮すると、通常、たとえば最も一般的なポートのみがチェックされます。 デバイスのWebインターフェースに使用される80または443。 - UDPサービスを確認する
UDPプロトコルは、要求の受信の確認を送信しないため、一般に、UDPポートのスキャンは不可能です。 ただし、UDPポートでリッスンし、リクエストへの応答を送信するポーリングサービスなどを試すことができます。 SNMP (ポート161)またはIPMI (ポート623)。 タイムアウト以外の応答を受信すると、デバイスが検出されます。 - ARPスキャン
pingユーティリティが使用する通常のICMP要求に加えて、同じブロードキャストL2ドメイン内のデバイスに対して、より高速なarpingを使用できます。「IPアドレスXXXのコンピューター、ブロードキャストMACアドレスをリクエスターのMACアドレス。応答が受信された場合、デバイスは検出されたと見なされます。 - CDP / LLDP
ネットワークがLLDPプロトコル(またはCDPの類似物)を使用している場合、デバイスは近隣に関する情報を収集できます。 このデータは、SNMPを介して利用できます。
traceroute
の結果とともに、近隣に関する情報は、ネットワークの物理マップを構築するための基礎として使用できることに注意してください。 - NetBIOSスキャン
NetBIOSプロトコルは、たとえばnbtscan
ユーティリティを使用して、Windowsマシンを検索するために使用できます。 - DHCPログ ( alexansterが推奨 )
DHCPサーバーのログには、MACアドレスによるIPアドレスの発行に関する情報があります。 最近のログエントリについては、これらのデバイスが検出されたと想定できます。 - ARPWatch ( TaHKucTによって記述されたalexansterが推奨 )
ArpwatchはIPアドレス(MACアドレスのペア)を監視し、新しいペア、欠落したペア、および変更されたペアをログに記録します。 ログに該当するデバイスは、検出されたと見なすことができます。
- FDBスイッチテーブルの分析 ( mickvavが推奨 )
管理対象スイッチのFWBテーブル(Forwarding DataBase)には、サブスクライバーとデバイスのMACアドレスの切り替えに関するデータが含まれています。 デバイスのコンプライアンスMACアドレス-スイッチのポート。
データはSNMPおよびtelnetを介して利用でき、ネットワークの物理マップを作成するために使用できます。
データ収集
デバイスが検出されたら、デバイスに関する情報の収集に進むことができます。
ARPプロトコルを使用すると、ipからMACアドレスを取得できます。また、製造元からIPアドレスを取得できます(一部の機器ではアドレスの変更が許可されているため、この方法はあまり信頼できません)。 次に、 nmapユーティリティを使用できます。nmapユーティリティは、開いているポートをスキャンし、その指紋データベースをチェックして、使用されているオペレーティングシステム、バージョン、およびデバイスタイプに関する仮定を行います。
nmapで使用されるデバイスタイプとOSの取得
nmap -O -v 192.168.0.1 Starting Nmap 7.60 ( https://nmap.org ) at 2018-03-04 01:17 RTZ 2 (ceia) Initiating ARP Ping Scan at 01:17 Scanning 192.168.0.1 [1 port] Completed ARP Ping Scan at 01:17, 0.70s elapsed (1 total hosts) Initiating Parallel DNS resolution of 1 host. at 01:17 Completed Parallel DNS resolution of 1 host. at 01:17, 0.00s elapsed Initiating SYN Stealth Scan at 01:17 Scanning 192.168.0.1 [1000 ports] Discovered open port 80/tcp on 192.168.0.1 Discovered open port 49152/tcp on 192.168.0.1 Discovered open port 1900/tcp on 192.168.0.1 Completed SYN Stealth Scan at 01:17, 0.13s elapsed (1000 total ports) Initiating OS detection (try #1) against 192.168.0.1 Retrying OS detection (try #2) against 192.168.0.1 WARNING: OS didn't match until try #2 Nmap scan report for 192.168.0.1 Host is up (0.00s latency). Not shown: 997 closed ports PORT STATE SERVICE 80/tcp open http 1900/tcp open upnp 49152/tcp open unknown MAC Address: A0:F3:C1:35:21:58 (Tp-link Technologies) Device type: WAP Running: Linux 2.4.X OS CPE: cpe:/o:linux:linux_kernel:2.4.36 OS details: DD-WRT v24-sp1 (Linux 2.4.36) Network Distance: 1 hop
デバイスに関する詳細情報を取得するには、次のいずれかの方法が必要です。
- SNMP
SNMPはほとんどの場合、ルーターとスイッチでサポートされています。 Windowsで使用可能(対応するサービスはデフォルトで無効になっています); Linuxでは、snmpdデーモンのインストールが必要です。 どうやら、最後の3番目のバージョンを実装するのは非常に難しいので、以前のバージョン2cは引き続き関連していますが、データ転送中の暗号化の欠如により推奨されません。 プロトコルは、デバイスの161 UDPポートで実行されます。
SNMPを使用するには、 Net-SNMPユーティリティパッケージを使用できます。 たとえば、デバイスの説明を取得するには、OID(オブジェクト識別子)と呼ばれ、数字とドットで構成されるSNMP表記で、プロトコルバージョン、読み取りパスワード(コミュニティ読み取り、デフォルトではパブリック)、およびアドレスを指定する必要があります。 すべてのデバイスアドレスはツリー形式で表すことができ、アドレスは辞書式順序でソートされます。 このプロトコルを使用すると、アドレスの現在の値と、現在の値に続くアドレスを要求できます。
snmpgetを使用してデバイスの説明を取得するsnmpget -v 2c -c public 192.168.0.102 1.3.6.1.2.1.1.1.0 SNMPv2-MIB::sysDescr.0 = STRING: Linux debian 3.16.0-4-586 #1 Debian 3.16.43-2+deb8u2 (2017-06-26) i686
アドレスの標準セットは非常に限られており、デバイス、連絡先、場所、稼働時間の説明が含まれています。 残りのアドレスはデバイスの製造元によって異なり、たとえばsnmpwalkユーティリティを使用してスキャンすることで取得できます。 幸いなことに、LinuxとWindowsにはネットワークインターフェイスとCPU /メモリ負荷の一般的なアドレスがあるため、使用しているオペレーティングシステムを知る(または特定する)だけで済みます。
snmpwalkを使用したLinuxディスク記述の取得snmpwalk -v 2c -c public 192.168.0.102 1.3.6.1.4.1.2021.9.1.2 UCD-SNMP-MIB::dskPath.1 = STRING: / UCD-SNMP-MIB::dskPath.2 = STRING: /var UCD-SNMP-MIB::dskPath.3 = STRING: / UCD-SNMP-MIB::dskPath.4 = STRING: /run UCD-SNMP-MIB::dskPath.5 = STRING: /dev/shm UCD-SNMP-MIB::dskPath.6 = STRING: /run/lock UCD-SNMP-MIB::dskPath.7 = STRING: /sys/fs/cgroup
snmpwalkを使用してWindowsドライブの説明を取得するsnmpwalk -v 2c -c public localhost 1.3.6.1.2.1.25.2.3.1.3 HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: C:\ Label: Serial Number a65ceb77 HOST-RESOURCES-MIB::hrStorageDescr.2 = STRING: D:\ Label: Serial Number ded9f83e HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: E:\ Label: Serial Number 8e764a1 HOST-RESOURCES-MIB::hrStorageDescr.4 = STRING: I:\ HOST-RESOURCES-MIB::hrStorageDescr.5 = STRING: Virtual Memory HOST-RESOURCES-MIB::hrStorageDescr.6 = STRING: Physical Memory
- Wmi
WMIテクノロジは、 WBEM標準のWindows実装に拡張および適応されており、パラメータの読み取りだけでなく、デバイスの制御もリモートで実行できます。 WMIはRPC (TCPポート135)およびDCOM (1024を超える任意のTCPポート)で実行され、 Power Shellスクリプト(以前のWindows Script Host)で積極的に使用されます。
もちろん、データはWindowsマシンからのみ要求できます。
PowerShellでRAM情報を取得するGet-WmiObject win32_OperatingSystem |%{"Total Physical Memory: {0}KB`nFree Physical Memory : {1}KB`nTotal Virtual Memory : {2}KB`nFree Virtual Memory : {3}KB" -f $_.totalvisiblememorysize, $_.freephysicalmemory, $_.totalvirtualmemorysize, $_.freevirtualmemory} Total Physical Memory: 2882040KB Free Physical Memory : 612912KB Total Virtual Memory : 5762364KB Free Virtual Memory : 1778140KB
wmicコンソールユーティリティとそのLinuxポートもあります
wmicを使用してデバイスメーカーを取得するwmic /USER:admin /PASSWORD:mypassword /NODE:"192.168.0.100" computersystem get Manufacturer Manufacturer Gigabyte Technology Co., Ltd.
- 監視システムエージェント、たとえば ZabbixまたはCheck_MK
可能であれば、バックグラウンドで動作し、データを収集する小さなプログラムがデバイスにインストールされます。 エージェントを使用する利点は、デバイスで使用される機器やオペレーティングシステムに関係なくデータが統合されることです。また、ローカルでのみ使用可能なデータ(コンソールプログラムの結果など)を収集することもできます。 - Ssh
最初は、 SSHデータはLinuxおよびiOSデバイスから取得できます。 WindowsおよびAndroidの場合、SSHサーバーをインストールする必要があります。
SSHを介したCPU情報の取得cat /proc/cpuinfo processor : 0 Processor : AArch64 Processor rev 4 (aarch64) Hardware : sun50iw1p1 BogoMIPS : 48.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 4 processor : 1 ...
- 仮想マシンハイパーバイザーなどの管理サービスからデータを要求する
Zabbixの例での動作
ご存じのように、 Zabbixはネットワーク上の新しいデバイスを個別に検出し、それらのパラメーターの一部を自動的にポーリングできます。 これはLow Level Discoveryと呼ばれます 。
デバイス検出は、上記の検出方法を組み合わせたネットワーク検出ルールによって定義され、デバイスが使用可能かどうか、および適用するテンプレートを決定します(デバイスの説明は通常調べられます)。 テンプレートには、デバイスから取得できるプロパティのリストと、新しいプロパティを検出および作成するためのタイマールールが含まれています。
SNMPの場合、このルールは次のようになります。ノード
1.3.6.1.2.1.2.2.1.8
(検出ルール)のすべての子を反復処理し、検出された各要素(
{#SNMPINDEX}
配置された番号)で指定された新しいメトリックを追加しますデータ要素のプロトタイプ、
1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX}
および
1.3.6.1.2.1.2.2.1.16.{#SNMPINDEX}
まだない場合)。 詳細はこちら 。
エージェントの場合、ルールは少し異なって見えます。例えば、
system.cpu.discovery
などのディスカバリー・プロパティーのいずれかをエージェントに要求し、jsonの形式でプロセッサーのリストを取得します
[ {"NUMBER": 0, "STATUS": "online"}, {"NUMBER": 1, "STATUS": "online"} ]
そのようなメトリックがまだない場合は、各要素に
system.cpu.load[{#CPU.NUMBER}]
追加します。 Zabbixエージェントを使用すると、要求可能な独自の要素(
UserParameter
)を作成できるため、たとえば、特定のフォルダー内のファイルの検出やサイズの追跡など、実装が簡単です。 詳細はこちら 。
おわりに
ご覧のとおり、すべてが非常にシンプルで、魔法はありません。 デバイスを検出またはプロパティを取得する他の方法をまだ知っている場合は、それらを報告してください。