私はWeb開発者であり、セキュリティの改善に努めています。私のネットブックが置かれている同じLAN上のすべてのコンピューターをリストする方法(Linux / Debianベースのディストリビューション)を見つけようとしています。「arp -n」を試しましたが、完全なリストだとは感じません。iPhoneがネットブックと同じwi-fiルーター上にあり、それが現れなかったからです。すべてが同じゲートウェイを共有しているマシンの完全なリストを取得するより良い方法はありますか?
私はWeb開発者であり、セキュリティの改善に努めています。私のネットブックが置かれている同じLAN上のすべてのコンピューターをリストする方法(Linux / Debianベースのディストリビューション)を見つけようとしています。「arp -n」を試しましたが、完全なリストだとは感じません。iPhoneがネットブックと同じwi-fiルーター上にあり、それが現れなかったからです。すべてが同じゲートウェイを共有しているマシンの完全なリストを取得するより良い方法はありますか?
回答:
nmapを取得します。これは、Matrixで使用されているプログラムTrinityであり、スキャンを実行して、使用しているLANなどに接続されているすべてのデバイスを見つけることができます。
これがリファレンスガイドです。
sudo apt-get install nmap
これは私が使用するもの、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
nmap -sA 192.168.1.0/24
nmapオプション-sA
は、オプションと同様にデバイス名、IP、macなどを含む読みやすさで同様の記述結果を示します-sP
。
arp -n
LAN上のマシンが既に通信したマシンのみを表示します。ブロードキャストアドレスと全ホストマルチキャストアドレスに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索したり、悪意のある行為をしたりする可能性があります。
ip neigh
およびhosts
。nmapは不要/ 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
ip n
要するに。たぶん良いip n | grep REACHABLE
。
既存の回答が十分に満足できるものではなかったため、試してみようと思いました。結局のところ、FAQはリンクのコンテキストを提供することを提案しています。
nmap
少し混乱する場合は、素晴らしいです。コピーアンドペーストが可能なローカルネットワークデバイスを見つけるために実行するものを次に示します。nmap -sP
(またはnmap -sn
)pingによるスキャン。nmap -sL
またはのような「ホスト検出」には他のオプションがありますnmap -Pn
。
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
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 ...>
もっと効果的な方法があるかどうか知りたいです。それまで、私はこれに固執しています。
ハントは、情報を求めてネットワークを介してブロードキャストするマシンのリストを作成できるコマンドラインツールです。TCP、UDP、ICMP、およびARPデータを使用して、ネットワーク上のアクティブなMACアドレスのリストを作成します。これは、有線で聞くことで機能する受動的なツールです。
接続されたデバイスのよりコンパクトなリスト:
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つしか表示されません最後
IPアドレスの範囲のステータスをスキャンするには、これは便利で簡単です。
sudo nmap -sn 192.168.1.2-20
どこ:
-sn: Ping Scan - disable port scan
注意:
-sn
として知られていました-sP
これはMac OS X(BSDベース)で行いました。Linuxバージョンに違いがあるかどうかはわかりません。
(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.ブロードキャストで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
(実行時間を短縮するために)192.168.2.0/24サブネット内のすべてのping可能なネットワークデバイスを並行してpingします。その後arp
、応答したすべてのデバイスが表示されます。
アクティブな接続または現在の接続はチェックしませんが、ローカルドメインサービスがエントリを保持しているすべての接続をリストします(実際に古い接続も)。
より詳細な説明:
seq 254
(100〜150からのすべての番号について:1から254までのすべての数字を作成しますseq 100 150
)xargs
呼び出しping
て「IP」(-iIP
)をseq
stdin のuence番号に置き換えます。したがって、192.168.2.IPは最初のseq
番号で192.168.2.1に変わり-P
、同時ping
プロセスの数をxargs
開始するように指定します。アドレスと同じ量+1を選択します( = 254)興味がある。ping
xargs(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='