QA@IT

社内LAN上のIPアドレスとホスト名取得について

7062 PV

社内ネットワーク上で使用されている全PCのIPアドレスとホスト名を取得したく色々探しており、この記事を見つけました。
http://www.atmarkit.co.jp/ait/articles/0306/28/news003.html
http://www.atmarkit.co.jp/ait/articles/0010/07/news001.html

MACアドレスは不要なのですが、上記2つの記事を組み合わせて下記コマンドを作成しました。
これで社内ネットワーク上で使用されている全PCのIPアドレスとホスト名は取得できますか?
for /l %i in (0,1,255) do ping -w 1 -n 1 192.168.0.%i && nbtstat -A 192.168.0.%i arp.log

これ以外に社内LAN上全PCのIPアドレスとホスト名を取得するコマンドはありますか?

回答

そのネット内限定と言う事なら、

for /L %I in (1,1,254) do ( ping -n 1 192.168.0.%I | findstr TTL= >NUL) && echo 192.168.0.%I

で今生きているIPアドレスはわかります。(Firewallでping応答を禁止していない限り)

ホスト名は、相手が NetBIOS over TCP/IP を有効にしてあれば nbtstat -A で分かるようです。
そうでなければ分からない。

for /L %I in (1,1,254) do ( ping -n 1 192.168.0.%I | findstr TTL= >NUL) && ( echo 192.168.0.%I & nbtstat -A 192.168.0.%I | findstr "<20>" )
編集 履歴 (1)
  • 回答ありがとうございます。
    この結果をテキストファイルに書き出したい場合は、末尾に>> ipcheck.txtを付ければ良いんでしょうか?
    また、(1,1,254)の意味は0と255は除外って事ですよね?
    0と255除外の場合は(1,2,254)って書くのかと思ってましたwww
    -
  • (1,2,254)だと、1→3→5→7って2個ずつステップするって事になるんですか? -
  • ファイルに書くのはそうです。
    (1,2,254)は、「1から254まで2刻みで」という意味になってしまいます。
    -
  • ありがとうございます。
    この部分↓にはどういう意図があるんですか?
    findstr TTL= >NUL
    -
  • pingの成功失敗はステータスコードではわからないので、pingの成功を「TTL=」という文字列の有無で判断しています。 -
  • 間違ってfindstr TTL= >NUL無しで実行しちゃったんですけど、どちらも結果は同じでした^^; -
  • OSに依るんですかね。Windows7だと駄目です。 -
  • この処理に各ホストへのコマンド実行時間(時分秒)を追加する事も可能なんでしょうか? -
  • 時刻ですか?
    秒まで要るとなると、バッチスクリプトにすれば可能です。
    -
  • 時分だけならコマンドで何とかなるんですか? -
  • time/tで時分が出ます。
    -

これ以外に社内LAN上全PCのIPアドレスとホスト名を取得するコマンドはありますか?

コマンドではないですし、Windowsに標準で入っているわけでもないですが、ネットワークスキャン用のツールを使った方が簡単そうな気がします。

フリーで使えるものとしては例えばAdvanced IP Scannerなどがありますが、もし興味があれば、いろいろあると思うので探してみるとよいです。

窓の杜による上記ソフトウェアの紹介

追記
自分で管理している社内ネットワークで利用する前提なら、https://nmap.org/からWindows版のnmapを落としてきて、その中のnmapコマンドを使う手もあるかもしれません。こんな感じだと思います。日本語のホスト名はうまく表示されないようですが。参考までに。

nmap -n -sU -p137 --script nbstat.nse 192.168.0.1-254 >nmap.log 2>&1
編集 履歴 (1)
  • 回答ありがとうございます。
    Advanced IP Scannerは現在使っています。
    batファイルを作って定期的に自動起動させて収集できればな~と思い、この質問をしました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。