ネットワーク上で使用されているすべてのIPアドレスを見つける方法



How Find All Used Ip Addresses Network



解決:

一般的、nmapは、ネットワークをすばやくスキャンするのに非常に便利です。

nmapをインストールするには、ターミナルで次のコマンドを入力します。



sudo apt-get install nmap

アプリケーションがインストールされたら、次のコマンドを入力します。

nmap -sn 192.168.1.0/24

これにより、192.168.1.0と192.168.1.255の間のネットワークでping要求に応答したホストが表示されます。




古いバージョンのNmapの場合は、-NS:

nmap -sP 192.168.1.0/24

その他の参考資料については、次のページを参照してください。

NMAPインストールガイド



NMAPリファレンスガイド

学ぶのにとても便利なツールです。


ネットワーク内のすべてのコンピューターがUbuntuまたはその他のディストリビューションを利用している場合avahi-daemon(DNS-SD)の場合、次のようにして、それらの詳細なリスト(ホスト名とIPアドレスを含む)を取得できます。

avahi-browse -rt _workstation._tcp

ネットワークで使用されているすべてのIPアドレスを知りたい場合は、次を使用できます。arp-scan:

sudo arp-scan 192.168.1.0/24

デフォルトではインストールされないため、でインストールする必要がありますsudo apt-get installarp-scan。arp-scanはARPパケットをローカルネットワークに送信し、受信した応答を表示するため、ファイアウォールで保護されたホスト(IPパケットに基づいてトラフィックをブロックする)も表示されます。


読者への注意 :元の回答は、少し前に、シェルスクリプトを学んでいたときに投稿されました。はるかに高速に実行される新しく改善されたスクリプトについては、以下の再検討バージョンを参照してください。

元の回答

nmapが私の一番の選択ですが、それがない場合はどうなりますか? DIYの方法は、ネットワーク上の可能な各IPアドレスを手動で通過するpingスクリプトを使用することです。ここにあるのは、アドレスの最後の番号を設定し、アドレスにサイレントシングルpingを実行し、コマンドが成功したかどうかを確認し(成功した場合は、ホストが明らかに稼働している)、whileループです。printfステートメント。迅速で汚い方法で、それを書くのに約10分かかりましたが、実行時間は少し遅いかもしれません。

#!/ bin / sh#set -x NUM = 1 while [$ NUM -lt 256]; do ping -q -c 1192.168.0。$ NUM> / dev / null RESULT = $(echo $?)if [ $ RESULT -eq 0];次にprintf192.168.0。$ NUM ' n'fi NUM = $(expr $ NUM + 1)完了

再考された答え

私はもともとこの回答を2015年8月に投稿しました。それ以来、シェルスクリプトについてもう少し学びました。このスクリプトを一度見たら、この回答に戻っていくつかの改善を加えることをお勧めします。ここにいくつかのアイデアがあります:

  • スクリプトは明らかに遅く、pingはホストからの応答を待ちます。デフォルトでは、2つのRTTにpingを実行します。これは、ネットワークの混雑度によって異なります。私が理解している限り、TCPプロトコルは毎回待機時間を2倍にします(少なくともこれによると)。だから私たちは強制することができますタイムアウトするためのping-w1フラグ。 256個のアドレスがあり、各アドレスに1秒を想定しているため、スクリプトには約256/60 = 4.27分かかります。

  • コマンドを実行してから、次のコマンドで終了ステータスをキャプチャします。$?本当に必要ではありませんでした。 NSif ... then; ... fiはコマンドを直接操作できます。言い換えれば、これを行うだけで十分です:

    ping -w 1 -q -c 1192.168.0。$ NUM> / dev / nullの場合;それからなれ
  • NSprintfコマンドは次のように書き直すことができます。

    printf'IP%sがアップしています n'192.168.0。 '$ NUM'

    これはより文体的な変更ですが、それはどのように一貫していますprintfは機能し、他の多くの言語と同じように見えます。'$ NUM'変数。ここで引用する必要はありません。数値のみを扱っているため、変数にスペースがあるために単語の分割を予測する必要はありません。

  • いくつかのバックグラウンドプロセスを生成すると、パフォーマンスが大幅に向上します。以下のスクリプト編集はまさにそれを行います。私は入れましたpingと関数へのprintf、pingf(はい、コーニー名、私は知っています)。今、シングルも1つありますのループと呼び出しを行うメイン関数pingf。

#!/ bin / sh#デバッグのコメントを解除します#set -x pingf(){if ping -w 2 -q -c 1192.168.0。 '$ 1'> / dev / null;次に、printf'IP%sがアップします n'192.168.0。 '$ 1'fi} main(){NUM = 1 while [$ NUM -lt 255]; do pingf' $ NUM '&NUM = $(expr' $ NUM '+ 1)完了待機} main

それはどれくらいうまく機能しますか?悪くはありませんが、実際には数秒で完了します。

$ time ./ping_script.sh IP192.168.0.1がアップIP192.168.0.101がアップIP192.168.0.27がアップIP192.168.0.29がアップ0m02.50s実数0m00.01sユーザー0m00.12sシステム

心に留めておくべきこと

  • Windows(Windows 7以降から)は、ICMPエコー要求への応答のブロックを開始しました。 Ask Ubuntuやその他の種類のサイトでは、これについてかなりの数の質問があります。「ねえ、私のLinuxコンピューターはpingできますが、Windowsコンピューターはpingできません。どうしたのですか?」新しいWindowsバージョンでは、ICMPエコーへの応答を有効にする必要があることに注意してください。