ローカルネットワークスキャンの仕組み

Kompira cloud にてローカルネットワークのスキャンを行うと、接続された ksocket にて以下のフローに従ってスキャンが行われます。

  1. スキャン候補 IP アドレスの取得

    • 調査対象として考えられる IP アドレスの取得ステップ
    • このステップで得られた IP アドレスが「スキャン候補 IP アドレス」として次のステップに利用される
  2. 対象として不適切な IP アドレスの除外

    • 調査対象として不適切な IP アドレスの除外ステップ
    • このステップで除外されなかった IP アドレスが「対象 IP アドレス」として次のステップに利用される
  3. 対象 IP アドレスの生存確認

    • 現在ネットワーク上に存在していない IP アドレスの除外ステップ
    • このステップで生存確認が取れた IP アドレスが Kompira cloud に報告される
    • このステップで生存確認が取れた IP アドレスが「生存 IP アドレス」として次のステップに利用される
  4. 生存 IP アドレスに対する新規 IP アドレスの検索

    • SNMP/SSH/WinRM 等を用いて新規の IP アドレスを取得するステップ
    • このステップで新たに発見された IP アドレスが「スキャン候補 IP アドレス」としてステップ 2. に適用される
      • 「スキャン候補 IP アドレス」が見つかる間は最後のステップに移行せずステップ 2. から処理を繰り返す
    • このステップで情報が得られた IP アドレスが「詳細情報取得可 IP アドレス」として最後のステップに利用される
  5. 詳細情報取得可 IP アドレスに対する詳細情報取得

    • SNMP/SSH/WinRM 等を用いて詳細情報を取得するステップ
    • このステップで得られた情報が Kompira cloud に報告される

スキャン候補 IP アドレスの取得

Kompira cloud にてスキャンを行うと、まず以下の情報から対象として考えられる IP アドレスが取得されます。

  • ユーザーにより指定された queries の値
  • ksocket 動作マシンの ARP キャッシュ(取得可能な場合のみ)
  • ksocket 動作マシンのデフォルトゲートウェイ(取得可能な場合のみ)

また、ksocket は上記情報の取得前にローカルネットワークに対して Broadcast Ping を送信します。

対象として不適切な IP アドレスの除外

「スキャン候補 IP アドレスの取得」にて取得した IP アドレスリストから、以下のルールに従って ksocket がパケット送信を行わないほうが良い IP アドレスを除外し「対象 IP アドレス」として確定します。

  • IANA IPv4 Special-Purpose Address Registry に従ったフィルタ
    • 非プライベートアドレスは除去
    • 予約済みアドレスは除去
    • ループバックアドレスは除去
    • マルチキャストアドレスは除去
  • ユーザーにより指定された許可・除外リストに従ったフィルタ
    • 許可リストに無い IP は除外(includes
    • 除外リストに有る IP は除外(excludes

対象 IP アドレスの生存確認

「対象として不適切な IP アドレスの除外」にて確定された「対象 IP アドレス」に対する生存確認を行います。 生存確認は以下のプロトコルにより行われ、生存確認が取れた IP が次の「生存 IP アドレスに対する新規 IP アドレスの検索」ステップに利用されます。

  • ローカルネットワーク内の IP アドレスが対象の場合
    • ARP リクエストに対する返答
  • ローカルネットワーク外の IP アドレスが対象の場合
    • ICMP echo リクエストに対する返答
    • ICMP timestamp リクエストに対する返答
    • ksocket が Linux 上で動作している場合
      • TCP の SYN リクエストに対する SYN/ACK もしくは RST/ACK 返答
      • TCP の SYN/ACK リクエストに対する RST 返答
    • ksocket が Windows 上で動作している場合
      • TCP connect の成否

TCP 接続試行対象ポート一覧

TCP を利用した生存確認では以下のポートに対して接続試行を行います。

ポート番号 説明
21 FTP
22 SSH
23 Telnet
25 SMTP
53 DNS
80 HTTP
135 MS-RPC
139 NetBIOS Session Service
443 HTTPS
445 SMB
587 SMTP
5985 WinRM

生存 IP アドレスに対する新規 IP アドレスの検索

広域のネットワークを全て探索するために「生存 IP アドレス」に対して SSH/WinRM/SNMP を用いて、以下の情報取得を行います。

  • ARP キャッシュテーブル
  • NextHop
  • Ethernet

上記にて取得できた IP アドレスの内、新規に発見できたものに対して「対象として不適切な IP アドレスの除外」から処理を繰り返します。 新規に発見できた IP アドレスがなくなるまで繰り返されます。

詳細情報取得可 IP アドレスに対する詳細情報取得

「調査対象 IP アドレスの生存確認」にて生存確認が取れた IP アドレスに対して SSH/WinRM/SNMP を用いて詳細情報の取得を行います。

SNMP に応答する場合

標準 MIB より以下の情報を取得します。

  • 機種名
  • バージョン
  • シリアル番号

SNMP で利用するコミュニティ名の指定方法等は ksocket ドキュメントを参照してください。

SSH に応答する場合

SSH にてログインが成功した場合は以下の情報を取得します。

  • OS 名称
  • OS バージョン
  • RPM/deb パッケージ一覧

また、対象機器の同一性判断のため /var/tmp/cloud.fixpoint.jp/footprint_00000000-0000-0000-0000-0000000000000 はランダムな値で置換される)という空のファイルを作成します。

SSH のログイン情報の指定方法は ksocket ドキュメントを参照してください。

WinRM に応答する場合

WinRM にてログインが成功した場合は以下の情報を取得します。

  • OS 名称
  • OS バージョン
  • シリアル番号
  • WMI パッケージ一覧
  • 適用済み Windows アップデート一覧

WinRM のログイン情報の指定方法は ksocket ドキュメントを参照してください。