LinuxでLAN上のコンピューターのリストを表示する


62

私はWeb開発者であり、セキュリティの改善に努めています。私のネットブックが置かれている同じLAN上のすべてのコンピューターをリストする方法(Linux / Debianベースのディストリビューション)を見つけようとしています。「arp -n」を試しましたが、完全なリストだとは感じません。iPhoneがネットブックと同じwi-fiルーター上にあり、それが現れなかったからです。すべてが同じゲートウェイを共有しているマシンの完全なリストを取得するより良い方法はありますか?


回答:


58

nmapを取得します。これは、Matrixで使用されているプログラムTrinityであり、スキャンを実行して、使用しているLANなどに接続されているすべてのデバイスを見つけることができます。

これがリファレンスガイドです。


16
OK。「sudo nmap -sL 123.123.123。*」が探しているように見えます。または、-sLではなく-sPかもしれません。ありがとう!
CaptSaltyJack

2
nmapのインストールsudo apt-get install nmap
saintali

1
これは実際には深刻なウェブサイトだと思いました、笑+1
user10089632

38

これは私が使用するもの、nmap、およびスキャンしたいネットワークのCIDRブロック表記を使用したアドレスです。最初にnmapをインストールする必要があります。これは、ディストリビューションにプリインストールされていない場合があるためです。Ubuntuの場合:

sudo apt-get install nmap

次に、ifconfigを使用してネットワークアドレスを計算します。

ifconfig

スキャンしたいインターフェースのifconfig出力:

wlan1     Link encap:Ethernet  HWaddr 00:1f:3b:03:d2:bf  
          inet addr:192.168.1.104  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21f:3bff:fe03:d2bf/64 Scope:Link
          ...

inet addrとMaskを使用して、CIDR表記でネットワークアドレスを調べます。CIDRの詳細については、こちらをご覧ください。アドレスは:

192.168.1.0/24

-sPパラメーターを使用してnmapを実行します。これは、ホストがオンラインであるかどうかを確認するだけでスキャンします。

sudo nmap -sP 192.168.1.0/24

nmapの出力は次のようになります。

Starting Nmap 5.21 ( http://nmap.org ) at 2014-12-09 10:52 EST
Nmap scan report for 192.168.1.1
Host is up (0.013s latency).
MAC Address: -MAC ADDRESS- (Cameo Communications)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.26 seconds

nmapの詳細なヘルプが必要な場合は、nmap公式ドキュメントを参照するか、次を実行します:

nmap --help 

2
nmap -sA 192.168.1.0/24 nmapオプション-sAは、オプションと同様にデバイス名、IP、macなどを含む読みやすさで同様の記述結果を示します-sP
Jayzcode

私のマシンでは@Jayzcode -sAが戻ることはありませんが、-sPはたった3.73秒しかかかりませんでした(ルーター、私のPC、別のPCを検出しました)。理由は何ですか?
ロドリゴ

17

arp -nLAN上のマシンが既に通信したマシンのみを表示します。ブロードキャストアドレスと全ホストマルチキャストアドレスにpingを実行することにより、そのリストをより適切に設定できます。

「すべて」(バイナリ)ブロードキャストアドレス。ほとんどのIPスタックは、これを接続しているすべてのサブネットのサブネットブロードキャストアドレスに変換することに注意してください。

ping 255.255.255.255

現在のサブネットのサブネットブロードキャストアドレス。したがって、192.168.1.0 / 24にいると仮定します。

ping 192.168.1.255

「すべてのホスト」マルチキャストアドレス。他のIPサブネット用に構成されたホストを見つける可能性が高いため、これが非常に好きです。たまたま同じイーサネットLANに接続されています。

ping 224.0.0.1

この方法、およびこれまでに他の回答で言及した他の方法は、現在のネットワーク上のIP到達可能ホストのみを探すことに注意してください。おそらくあなたが気にする必要があるのはこれだけでしょうが、攻​​撃者がIPを介して可視にならずにネットワークをsn索したり、悪意のある行為をしたりする可能性があります。


8

ip neighおよびhostsnmapは不要/ sudoは不要

これに基づいて、Pythonスクリプトを作成できます。

#!/usr/bin/env python

"""List all hosts with their IP adress of the current network."""

import os

out = os.popen('ip neigh').read().splitlines()
for i, line in enumerate(out, start=1):
    ip = line.split(' ')[0]
    h = os.popen('host {}'.format(ip)).read()
    hostname = h.split(' ')[-1]
    print("{:>3}: {} ({})".format(i, hostname.strip(), ip))

経由でダウンロード

wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py

(または単にarp...私は前にそれを見なかった)


またはちょうどip neigh | awk '{ print $1 }' | xargs -n1 host
blockloop

ip n要するに。たぶん良いip n | grep REACHABLE
パブロA

4

既存の回答が十分に満足できるものではなかったため、試してみようと思いました。結局のところ、FAQはリンクのコンテキストを提供することを提案しています

nmap少し混乱する場合は、素晴らしいです。コピーアンドペーストが可能なローカルネットワークデバイスを見つけるために実行するものを次に示します。nmap -sP(またはnmap -snpingによるスキャン。nmap -sLまたはのような「ホスト検出」には他のオプションがありますnmap -Pn

方法#1。

ehtesh@x200arch:~$ # my wireless interface is listed as wlp3s0. Yours could be wlan0 or eth1.
ehtesh@x200arch:~$ ip addr show wlp3s0 | grep "inet "
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ arp -a
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
ehtesh@x200arch:~$ nmap -sP 172.18.72.0/24
Starting Nmap 6.41SVN ( http://nmap.org ) at 2013-12-17 20:08 EST
Nmap scan report for 172.18.72.2
Host is up (0.017s latency).
<... 15 IP addresses snipped ...>
Nmap scan report for 172.18.72.253
Host is up (0.13s latency).
Nmap done: 256 IP addresses (17 hosts up) scanned in 5.74 seconds
ehtesh@x200arch:~$ arp -a | sort -n -k 1,1                            
? (172.18.72.126) at ec:35:86:4a:37:d2 [ether] on wlp3s0
? (172.18.72.148) at 10:9a:dd:b8:79:71 [ether] on wlp3s0
? (172.18.72.178) at 9c:20:7b:7b:08:ba [ether] on wlp3s0
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
? (172.18.72.253) at b8:78:2e:19:05:0b [ether] on wlp3s0
? (172.18.72.2) at 00:14:1c:da:e1:c2 [ether] on wlp3s0
? (172.18.72.40) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.43) at d8:c7:c8:ce:0f:60 [ether] on wlp3s0
? (172.18.72.44) at d8:c7:c8:ce:0f:68 [ether] on wlp3s0
? (172.18.72.45) at 6c:f3:7f:c6:71:16 [ether] on wlp3s0
? (172.18.72.46) at 6c:f3:7f:c4:4c:b3 [ether] on wlp3s0
? (172.18.72.47) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.48) at 24:de:c6:c6:b6:78 [ether] on wlp3s0
? (172.18.72.49) at 24:de:c6:c6:b6:e6 [ether] on wlp3s0
? (172.18.72.51) at 00:9c:02:d0:4c:4e [ether] on wlp3s0
? (172.18.72.54) at 00:23:76:99:99:bf [ether] on wlp3s0
? (172.18.72.62) at 8c:70:5a:0d:06:18 [ether] on wlp3s0
? (172.18.72.63) at 7c:e9:d3:51:86:55 [ether] on wlp3s0
? (172.18.72.64) at a0:88:b4:47:eb:c8 [ether] on wlp3s0

方法#2。これが機能することは知っていますが、これが正しい方法であるかどうかはわかりません。

ehtesh@x200arch:~$ #ifconfig | grep broadcast
ehtesh@x200arch:~$ ip address show wlp3s0 | grep brd
    link/ether 00:1e:65:bf:1b:42 brd ff:ff:ff:ff:ff:ff
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ ping -b -c 3 -i 20 172.18.75.255
<... similar output to above ...>

もっと効果的な方法があるかどうか知りたいです。それまで、私はこれに固執しています。


4

たとえば、小さなLinuxシェルスクリプトを使用して、指定されたサブネットすべてにpingを試行できます。

$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done

私の場合、すべてに対してUPとip n言ってから、すべてにFAILEDと言います。
パブロA

3

ハントは、情報を求めてネットワークを介してブロードキャストするマシンのリストを作成できるコマンドラインツールです。TCP、UDP、ICMP、およびARPデータを使用して、ネットワーク上のアクティブなMACアドレスのリストを作成します。これは、有線で聞くことで機能する受動的なツールです。


4
私はマニュアルページがあることを知っていますが、答えの例を見ると便利でしょう。
Ehteshチョードリー

2

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

nmap -sL 192.168.0.* | grep \(1

説明。

nmap -sL 192.168.0.* サブネットワーク内のすべてのIPをリストし、名前のある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

IPアドレスの範囲のステータスをスキャンするには、これは便利で簡単です。

sudo nmap -sn 192.168.1.2-20

どこ:

         -sn: Ping Scan - disable port scan

注意:

  • Nmapの以前のリリースでは、-snとして知られていました-sP

これはMac OS X(BSDベース)で行いました。Linuxバージョンに違いがあるかどうかはわかりません。


1
素晴らしい、私がしなければならなかったのは、タイプ:sudo nmap -sP 192.168.178.0-255だけでした。これは、サブネット内のスキャンをした私にしています。
レオ・ガーバー

2

(debianのようなOSで)fpingを 使用できますsudo apt-get install fping

fpingはpingと似ていますが、複数のホストにpingを実行するときのパフォーマンスがはるかに優れています。-r 1フラグは一つだけのラウンドを実行するためにfping伝えます。2> 1 の部分は、grepの出力をフィルタリングすることを可能にします。

$ fping -g -r 1 192.168.1.0/24 2>1 | grep "alive"

次のようなものが表示されます:

192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

nmapには、MACベンダーを確認できる興味深いフラグもあります(既知の場合)。MACアドレスを表示するには、sudoで使用します。

$ sudo nmap -sP 192.168.1.0/24

たとえば、次のようになります。

Starting Nmap 7.40 ( https://nmap.org ) at 2019-05-23 18:49 CEST
Nmap scan report for 192.168.1.14
Host is up (-0.036s latency).
MAC Address: 20:F4:1B:E5:8F:7B (Shenzhen Bilian electronic)
Nmap scan report for 192.168.1.15
Host is up (-0.084s latency).
MAC Address: A4:31:35:E8:58:9E (Apple)
Nmap scan report for 192.168.1.27
Host is up (-0.15s latency).
MAC Address: 34:8A:7B:38:E3:14 (Samsung Electronics)
Nmap scan report for 192.168.1.29
Host is up (0.010s latency).
MAC Address: 80:2B:F9:75:F8:FF (Unknown)
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 25.52 seconds

1

1.ブロードキャストでnmap利用できない場合の代替ソリューション:

seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time=
arp -a

2a。または単にドメインネームサーバーに尋ねてください:

seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name

2b。awkなし

echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
  1. (実行時間を短縮するために)192.168.2.0/24サブネット内のすべてのping可能なネットワークデバイスを並行してpingします。その後arp、応答したすべてのデバイスが表示されます。

  2. アクティブな接続または現在の接続はチェックしませんが、ローカルドメインサービスがエントリを保持しているすべての接続をリストします(実際に古い接続も)。

より詳細な説明:

  • seq 254(100〜150からのすべての番号について:1から254までのすべての数字を作成しますseq 100 150
  • xargs呼び出しpingて「IP」(-iIP)をseqstdin のuence番号に置き換えます。したがって、192.168.2.IPは最初のseq番号で192.168.2.1に変わり-P、同時pingプロセスの数をxargs開始するように指定します。アドレスと同じ量+1を選択します( = 254)興味がある。
  • pingxargs(192.168.2.IP)によって変更されたip-addressを使用して、pingを1回だけ実行します(-c1)。-iこの場合、引数に対してxargsに指定されたものと同じ識別子を使用する必要がありますIP
  • grep time= 余分な情報を含むすべての行を削除するために、往復時間(=応答を取得)を提供する回答のみに関心があります。
  • arp -a 有効な名前(IP)ペアを表示するには

これをpingallコマンドと呼び、次のエイリアスで使用できるようにしました~/.bashrc

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.