web-dev-qa-db-ja.com

できればTerminalを通じて、接続されたネットワーク内のすべてのIPを一覧表示するにはどうすればいいですか?

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

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

何か案は?

215

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
238
Linker3000

Nmapを使用してください。例:nmap -sn 10.10.10.0/24 arpキャッシュはあなたが最近連絡を取ろうとしているものだけを教えてくれます。

110
Keith

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).
20
David

ネットワークが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
15
Anders Larsson

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を代用します)を実行すると、(私の経験では)少し正確さに欠けるネットワークのマップを得ることができます。shouldpingをすべてのマシンに発行します。ネットワーク、しかし、私の経験では、常に正しく機能するわけではありません。

12
Samadi

arp-scanはリポジトリには含まれていませんが、tmuxはIPアドレスのみを表示するので、nmapを使用してネクサス上で次のことを思いつきました:

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

接続されているデバイスのよりコンパクトなリストについては、

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

Anders Larssonの回答を詳しく説明する -

#!/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
0
Mathieu CAROFF