2011-07-15 17:51:44 +0000 2011-07-15 17:51:44 +0000
65
65

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

私は、セキュリティをより良く管理しようとしているウェブ開発者です。私のネットブックが置かれているLAN上の全てのコンピュータのリストを表示する方法を(Linux/Debianベースのディストロで)考えています。私は “arp -n "を試してみましたが、私のiPhoneは私のネットブックと同じwi-fiルータ上にあるので、それが完全なリストだとは感じません, そして、それは出てきませんでした。すべてが同じゲートウェイを共有しているマシンの完全なリストを取得するためのより良い方法はありますか?

回答 (11)

61
61
61
2011-07-15 17:55:50 +0000
41
41
41
2014-12-09 15:56:20 +0000

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

sudo apt-get install nmap

次に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
          ...

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

192.168.1.0/24

CIDR表記でネットワークアドレスを把握するためにinet addrとマスクを使用して、CIDR ここでの詳細。アドレスは次のとおりです:

sudo nmap -sP 192.168.1.0/24

ホストがオンラインであるかどうかを確認することよりそれ以上スキャンしない -sP パラメータを使用して 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 --help

それはあなたが nmap のより多くの助けを必要とすれば、 nmap の公式文書 を見るか、または実行しますそれです:

&001

18
18
18
2011-07-15 19:12:18 +0000

arp -n は、あなたのマシンが既に通信した LAN 上のマシンのみを表示します。ブロードキャストとオールホストのマルチキャストアドレスを ping することで、そのリストをより良く表示させることができます:

“all ones” (バイナリ) ブロードキャストアドレス。ほとんどの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経由で見えなくてもネットワークを盗み見したり、悪いことをしたりすることは可能です。

8
8
8
2017-04-03 21:54:39 +0000

ip neighhosts。**この上に構築すると、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 … 私は前にそれを見ていなかった)

4
4
4
2016-05-10 08:21:24 +0000

例えば

$ 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
``` のような小さな linux シェルスクリプトを使って、指定されたすべてのサブネットに ping してみることができます。
4
4
4
2013-12-18 01:44:36 +0000

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

nmapは、使用するには少し混乱する場合は、素晴らしいです。ここでは、ほとんどコピーペースト可能なローカルネットワークデバイスを発見するために実行しているものがあります。ホスト発見」には、nmap -sPnmap -snのように、他のオプションがあります。

方法#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

もっと効果的な方法があれば教えていただけると嬉しいです。それまではこれに固執しています。

3
3
3
2011-07-15 18:16:48 +0000

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

3
3
3
2019-05-23 17:18:32 +0000

fping は ping に似ていますが、複数のホストに ping する場合にはより良い性能を発揮します。r 1** フラグは、fping が 1 ラウンドのみを実行するように指示します。2>1**部分は、grepが出力をフィルタリングすることを可能にします。

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

のようなものが表示されます。MAC アドレスを見るために sudo と使用します。

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

あなたはインスタンスのために得るでしょう:

$ sudo nmap -sP 192.168.1.0/24
3
3
3
2017-11-08 13:22:31 +0000

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

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

2a. orただあなたのドメインネームサーバーに依頼してください。その後 arp は答えたすべてのデバイスを表示するべきである。

  1. アクティブか現在の接続をチェックしないが、ローカルドメインサービスがエントリを保持しているすべての接続をリストアップする、本当に古いものであっても。

より詳細な説明:

  • 1から254までのすべての番号を作成するためのseq 254 (100から150までのすべての番号のために: seq 100 150)
  • xargspingを呼び出し、"IP" (-iIP)をstdinからのsequence番号に置き換えますので、192.168.2.IPは192.168.2.IPに変化します。 168.2.IPが192.168.2.1に変更されているので、最初のseqの番号は192.168.2.1に変更され、-Ppingの同時処理数を指定しているので、興味のあるアドレス(=254)と同数の+1を選択しています。2.002 - xargs(xargs)で変更されたIPアドレスでpingを起動し、一度だけPING(192.168.2.IP)を行う。この場合、xargsで指定されたものと同じ識別子を、-c1の引数で使用しなければなりません。
  • -iの場合、余計な情報を含むすべての行を削除します。
seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name
3
3
3
2016-07-25 17:31:07 +0000

IPアドレスの範囲の状態をスキャンするには、以下のようにすればよい。

sudo nmap -sn 192.168.1.2-20

ここでは:

-sn: Ping Scan - disable port scan

注意:

  • Nmapの以前のリリースでは、-sn-sP

として知られていたが、これはMac OS X(BSDベース)で行った。Linux版に違いがあるかどうかはわからない。

2
2
2
2016-10-20 10:28:47 +0000

接続された装置のよりコンパクトなリストのため:

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でフィルタリングします(括弧をエスケープするためにバックスラッシュが必要です)

Quirk 2つのデバイスが同じ名前を持っている場合、nmapは、ルータlastに接続されていた1つだけを表示することに注意してください。