私はWeb開発者であり、セキュリティについてよりよく対処しようとしています。私のネットブックがあるのと同じLAN上にあるすべてのコンピュータを一覧表示する方法を見つけようとしています(Linux/Debianベースのディストリビューション)。私は "arp -n"を試しましたが、私のiPhoneは私のネットブックと同じWi-Fiルーターに接続されているので、それが完全なリストであるとは思いません。すべて同じゲートウェイを共有しているマシンの完全なリストを取得するためのより良い方法はありますか?
これは私が使っているもの、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 here を参照してください。アドレスは:
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
arp -n
はあなたのLAN上であなたのマシンがすでに話しているマシンを表示するだけです。ブロードキャストアドレスと全ホストマルチキャストアドレスをpingすることで、このリストを追加することができます。
「すべて1」(2進数)ブロードキャストアドレス。ほとんどのIPスタックはこれをあなたが接続しているすべてのサブネットのサブネットブロードキャストアドレスに変換することに注意してください:
ping 255.255.255.255
現在のサブネットのサブネットブロードキャストアドレス。だからあなたは192.168.1.0/24にいると仮定します。
ping 192.168.1.255
「全ホスト」マルチキャストアドレス。私はこれが大好きです。なぜなら、あなたと同じイーサネットLANに接続されている他のIPサブネット用に設定されたホストを見つける可能性が高いからです。
ping 224.0.0.1
この方法、そして私がこれまでに他のAnswersで述べた他の方法は現在のネットワーク上のIP到達可能なホストだけを探すことに注意してください。それだけで大丈夫ですが、攻撃者がIPを介して表示されることなくネットワークをスヌープしたり、悪いことをしたりする可能性があります。
ip neigh
とhosts
。 NO 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
...以前には見たことがありませんでした)
たとえば、小さな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
既存の答えが十分に満足できるものではなかったので、試してみることにしました。結局、FAQはリンクに コンテキストを提供することを提案します 。
少し混乱して使用するならばnmap
は素晴らしいです。これは私がローカルネットワークデバイスを発見するために実行しているもので、ほとんどコピー&ペースト可能です。 nmap -sP
(またはnmap -sn
)は ping でスキャンします。 nmap -sL
やnmap -Pn
のように、 'Host discovery'には他のオプションがあります。
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 ...>
もっと効果的な方法があるかどうか私は知りたいです。それまでは、これにこだわっています。
IPアドレスの範囲のステータスをスキャンするには、これはいいと簡単です:
Sudo nmap -sn 192.168.1.2-20
どこで:
-sn: Ping Scan - disable port scan
注意:
-sn
は-sP
として知られていました私はこれをMac OS X(BSDをベースにしている)でやった。 Linuxのバージョンに違いがあるかどうかわかりません。
接続されているデバイスのよりコンパクトなリストについては、
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
はルータに最後に接続されたものだけを表示します
Hunt は、情報をネットワーク経由でブロードキャストするときにマシンのリストを作成できるコマンドラインツールです。 TCP、UDP、ICMP、およびARPデータを使用して、ネットワーク上のアクティブなMACアドレスのリストを作成します。それはワイヤーで聞くことによって働く受動的な道具です。
fping Sudo apt-get install fping
を使うことができます(debian風OSの場合)。
fping はpingに似ていますが、複数のホストにpingを実行するときのパフォーマンスがはるかに優れています。 -r 1 フラグは、fpingに1ラウンドだけ実行するように指示します。 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。orただ尋ねるドメインネームサーバー:
seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name
2b。 awkなし
echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
pings allpingable192.168.2.0/24サブネット内のネットワークデバイスを並行して実行します(実行時間を短縮するため)。その後、arp
は、応答したすべてのデバイスを表示する必要があります。
アクティブな接続または現在の接続はチェックしませんが、ローカルドメインサービスがエントリを保持しているすべての接続をリストします(実際に古い接続であっても)。
より詳細な説明:
seq 254
は、1〜254のすべての数値を作成します(100〜150のすべての数値の場合:seq 100 150
)xargs
はping
を呼び出し、 "IP"(-iIP
)をstdinのseq
uence番号に置き換えます。したがって、192.168.2.IPは最初のseq
number、-P
は、同時実行の数を指定しますping
プロセスxargs
は、開始する必要があります。興味のあるアドレス(= 254)と同じ量+1を選択します。ping
xargsによって変更されたIPアドレス(192.168.2.IP
)で、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='