できればターミナルを介して、接続されたネットワーク内のすべてのIPを一覧表示するにはどうすればよいですか?


219

Ubuntu 10.10を使用して、ネットワークに接続されているデバイスのすべてのIPを一覧表示できるコマンドラインコマンドがあるかどうか疑問に思っていましたか?

たとえば、これを使用して、ホームネットワークに接続されているすべてのコンピューターを一覧表示します。理想的には、C ++から実行するため、コマンドラインである必要があります。

何か案は?




回答:


243

arp-scanコマンドを確認してください-たとえば、次のようにインストールする必要があります。

sudo apt-get install arp-scan

http://manpages.ubuntu.com/manpages/hardy/man1/arp-scan.1.html

さらに詳細を示すには:

sudo arp-scan --interface=eth0 --localnet

eth0はデバイスです。次の方法でデバイスを見つけることができます。

ifconfig

パーフェクト、ありがとう。必要な形式を正確に返します。
クリストファーグウィリアムス

1
OSXでも完璧に動作します!Brewとともにインストールされ、インターフェースはeth0ではなくen0でしたが、うまく機能します。
nthonygreen

6
WiFiを使用してネットワークに接続している場合は、のwlan0代わりにを使用しますeth0
ニール

3
これを取得して、ホスト名とIPアドレスを一覧表示できますか?
user1527227 14

2
これはARPキャッシュを使用しないことに注意してください。実際のスキャンを実行します。ほとんどのnmapスキャンとは異なり、これはレイヤー3の境界を越えることはできません。これは通常、このシナリオで必要なことです。(つまり、サブネットに限定されます。)
Zenexer 14

112

nmapを使用します。例:nmap -sn 10.10.10.0/24arpキャッシュは、最近連絡しようとしたもののみを通知します。


2
私の与えられたIPは10.10.10.0ですか?この場合の24は何ですか?ありがとう。
コロネル

4
@kolonelこれはほんの一例です。ネットワークで置き換える必要があります。24は、サブネットマスクの「スラッシュ表記」です。これは、左から24ビットを使用することを意味します。255.255.255.0と同等です。
キース

2
@キース使用するネットワークアドレスを見つける方法を知っていますか?または、最後に0/24が付いたIPだけですか?
TMH


20

Windowsでは、これは " arp -a" Linuxでの同等のものになると思いますarp -e

この情報はarpのmanページから見つけることができます:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).

それは動作しているように見えます(私はパブリックネットワークにいるので、プレイする必要があるかもしれないので、ネットワーク上のすべてのサーバーのみをリストしているようです。
ChristopherGwilliams

ホームネットワークを使用している場合、ルーターに接続されているデバイスのみが表示されますか?ありがとう!
クリストファーグウィリアムス

1
このコマンドは、ホストの現在のarpキャッシュ内のデバイスのみをリストし、ホストが最近接続したデバイスのみをリストします。
リンカー3000

どちらもLinuxで動作しarp -aますが、(すべての)ホストを代替(BSD)スタイルで表示します。Simpyの実行arparp -e、デフォルトであるbeacuseの実行と同じです。
simplegamer

15

ネットワークがの場合192.168.0.0/24、次のコードを使用して実行可能ファイルを作成します。を192.168.0実際のネットワークに変更します。

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done

こんにちはAnders ...ユーザーのネットワークは192.168.0.0/24ではない可能性があります。メモしました。サイトの書式設定は裸の#!を好まなかったため、コードスニペットの書式設定を覆しました:コードを入力するときは、ブロック引用符または書式設定済みのテキストボタンを使用し、キャリッジリターン、タブ、スペースが削除された可能性があります。
ネビンウィリアムズ

また、単純にカットアンドペーストするのではなく、ファイルに入れて実行可能にする必要があるスクリプトを提供する場合は、おそらくこれを指定するのが最適です。ソリューションを実装するためにすべてが必要なことは、一部には明らかではありません。
ネビンウィリアムズ

12
技術的には、これはpingに応答するホストのみを返します。接続されているが、ICMPエコー要求に応答していないホストが存在する場合があります。同様に、IPネットワークの最後のアドレスであるブロードキャストアドレスを指定することにより、1つのパケットをネットワーク全体にブロードキャストできます。ping-c 1 -W 1 192.168.0.255は、forループと同じことを行います。
ネビンウィリアムズ

@NevinWilliams(必要-b、より待機する-Wを除去)ping -b -c 1 192.168.0.255「0送受信1つのパケット、100%のパケット損失、時間は0ms」をもたらす
アクエリアス電源

13

nmapsudo apt-get install nmap)をインストールして、IPアドレスの最初の3つの部分にnmap 192.168.1.0/24置き換え192.168.1て入力してみてください(を使用して確認してくださいip addr)。

また、ネットワーク上のすべてのマシンにを発行する必要がありますping 192.168.1.255(代わりに192.168.1)を実行すると、ネットワークのマップの精度がやや低下します(経験上)。ただし、経験上、常に正しく機能するとは限りません。ping


実際、どの答えも常に正しく機能するわけではありません。IPはこの要件を念頭に置いて設計されたものではなく、同じVLAN上で他のホストを見つけられないようにするプライベートVLANなどがあります。
ロンモーピン

2

tmuxas arp-scanがレポジトリにないが、nmapプレインストールされた状態で使用しているネクサスで次のようになり、IPアドレスのみを表示します。

nmap -sn 192.168.1.1-254/24 | egrep "scan report" | awk '{print $5}'

1

接続されたデバイスのよりコンパクトなリスト:

nmap -sL 192.168.0.* | grep \(1

説明。

nmap -sL 192.168.0.* サブネットワーク内のすべてのIPをリストし、それらに名前を付けます:

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

興味深いレコードはすべて括弧(と数字1で始まるので、それをフィルタリングし| grep \(1ます(括弧をエスケープするにはバックスラッシュが必要です)

癖は、
2つのデバイスが同じ名前を持っている場合、ことに注意してくださいnmapそれがルータに接続して、1つしか表示されません最後


2つの質問に対してまったく同じ回答がある場合は、重複した回答を投稿するのではなく、質問に重複としてフラグを立てることを検討する価値があります。こうすることで、同様の質問がリンクされたときに知識を共有できます。
木梅

1
@Mokubaiそうですね、OPにコメントを追加しました。これは興味深い問題を示しています。迅速な検索は(Ubuntuの、SF、Unixのを掲載し、SU)4つのネットワークサイト全体で6つの重複(このQおよび5リンク)を発見しました。もちろんもっとたくさんあります!これをどのように処理しますか?理想的には、これら6つの投稿のそれぞれが他の5つの投稿にリンクする必要があります。これらのすべてのリンクを手動で追加しても、明らかにスケーリングしません。それで、今のところ私はこの投稿にリンクしました(最も賛成です)。別の問題は、AskUbuntuのQをSUのQの複製としてマークすることができないことです。うーん...おそらく、これはすでにメタで議論されたのでしょうか?
アレクサンダーマラホフ

Centos 7では動作しません。名前なしでネットワーク内のすべての可能なIPアドレスをリストするだけです。arp-scanがうまくいきました。
ジェフ

0

アンダース・ラーソンの答えについて詳しく説明する-

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    scan 192.168.1
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.