Hiển thị danh sách các máy tính trên mạng LAN trong Linux


62

Tôi là một nhà phát triển web đang cố gắng kiểm soát an ninh tốt hơn. Tôi đang cố gắng tìm ra một cách (trên các bản phân phối dựa trên Linux / Debian) để liệt kê tất cả các máy tính trên cùng mạng LAN mà netbook của tôi đang bật. Tôi đã thử "arp -n" nhưng tôi không cảm thấy đó là một danh sách đầy đủ, vì iPhone của tôi nằm trên cùng một bộ định tuyến wi-fi với netbook của tôi và điều đó không xuất hiện. Có cách nào tốt hơn để có được một danh sách đầy đủ các máy được chia sẻ cùng một cổng không?


Câu trả lời:


58

Nhận nmap . Đó là chương trình mà Trinity sử dụng trong Ma trận và bạn có thể quét để tìm tất cả các thiết bị được kết nối với mạng LAN mà bạn đang bật và hơn thế nữa.

Đây là hướng dẫn tham khảo.


16
ĐỒNG Ý. Hình như "sudo nmap -sL 123.123.123. *" Là những gì tôi đang tìm kiếm, hoặc có thể -sP thay vì -sL. Cảm ơn!
CaptSaltyJack

2
cài đặt nmap vớisudo apt-get install nmap
Saintali

1
Tôi nghĩ rằng đây thực sự là một trang web nghiêm túc, lol +1
user10089632

38

Đây là những gì tôi sử dụng, nmap và một địa chỉ sử dụng ký hiệu khối CIDR của mạng mà bạn muốn quét. Trước tiên, bạn cần cài đặt nmap vì nó có thể không được cài đặt sẵn với bản phân phối của bạn. Trên Ubuntu:

sudo apt-get install nmap

Tiếp theo tìm ra địa chỉ mạng của bạn bằng cách sử dụng ifconfig:

ifconfig

đầu ra ifconfig cho giao diện tôi muốn quét:

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

Sử dụng addr và Mask inet để tìm ra địa chỉ mạng trong ký hiệu CIDR, thêm về CIDR tại đây . Địa chỉ là:

192.168.1.0/24

Chạy nmap bằng tham số -sP, nó sẽ quét không hơn là kiểm tra xem máy chủ có trực tuyến không:

sudo nmap -sP 192.168.1.0/24

đầu ra nmap sẽ trông giống như thế này:

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

Đó là, nếu bạn cần thêm trợ giúp với nmap, hãy xem tài liệu chính thức của nmap hoặc chạy:

nmap --help 

2
nmap -sA 192.168.1.0/24 tùy chọn nmap -sAhiển thị kết quả mô tả tương tự với khả năng đọc tốt hơn, bao gồm tên thiết bị, IP, mac, v.v. như với tùy chọn -sP.. Cá nhân tôi thích -sA hơn -sP vì lợi ích dễ đọc.
Jayzcode

@Jayzcode Trên máy của tôi -sA không bao giờ quay lại, trong khi -sP chỉ mất 3,73 giây (đã phát hiện bộ định tuyến, PC của tôi và PC khác). Bất cứ ý tưởng tại sao?
Rodrigo

17

arp -nchỉ hiển thị cho bạn các máy trên mạng LAN mà máy của bạn đã nói chuyện. Bạn có thể lấy danh sách đó để cư trú tốt hơn bằng cách ping địa chỉ quảng bá và tất cả máy chủ lưu trữ:

Địa chỉ quảng bá "tất cả những người" (trong nhị phân). Lưu ý rằng hầu hết các ngăn xếp IP sẽ dịch phần này sang các địa chỉ quảng bá mạng con cho tất cả các mạng con bạn được đính kèm:

ping 255.255.255.255

Địa chỉ quảng bá mạng con cho mạng con hiện tại của bạn. Vì vậy, giả sử bạn đang ở trên 192.168.1.0/24:

ping 192.168.1.255

Địa chỉ multicast "tất cả máy chủ". Tôi thích cái này rất nhiều vì có nhiều khả năng tìm thấy các máy chủ được cấu hình cho các mạng con IP khác, điều đó tình cờ được gắn vào cùng mạng LAN Ethernet như bạn:

ping 224.0.0.1

Lưu ý rằng phương pháp này và các phương pháp khác mà tôi đã thấy được đề cập trong các Câu trả lời khác cho đến nay, chỉ tìm kiếm các máy chủ có thể truy cập IP trên mạng hiện tại. Đó có lẽ là tất cả những gì bạn cần quan tâm, nhưng kẻ tấn công có thể rình mò hoặc làm những điều xấu đối với một mạng mà không thể nhìn thấy qua IP.


8

ip neighhosts. KHÔNG cần nmap / KHÔNG cần sudo .

Dựa trên điều này, bạn có thể xây dựng một tập lệnh 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))

Tải xuống qua

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

(hoặc đơn giản là arp... tôi đã không thấy điều đó trước đây)


hoặc chỉip neigh | awk '{ print $1 }' | xargs -n1 host
blockloop

ip ncho ngắn gọn Có lẽ tốt hơn ip n | grep REACHABLE.
Pablo A

4

Tôi không tìm thấy câu trả lời đủ thỏa mãn, vì vậy tôi nghĩ tôi sẽ thử. Rốt cuộc, FAQ gợi ý để cung cấp ngữ cảnh cho các liên kết .

nmaplà tuyệt vời, nếu một chút bối rối để sử dụng. Đây là thứ tôi chạy để khám phá các thiết bị mạng cục bộ mà hầu hết có thể sao chép-dán. nmap -sP(hoặc nmap -sn) quét bằng cách ping . Có các tùy chọn khác cho 'khám phá máy chủ', như với nmap -sLhoặc nmap -Pn.

Cách # 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

Cách # 2. Tôi biết điều này hoạt động, nhưng tôi không thể nói nếu đây là cách đúng đắn.

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

Tôi rất vui được biết nếu có nhiều cách hiệu quả hơn. Cho đến lúc đó, tôi vẫn gắn bó với điều này.


4

Ví dụ, bạn có thể thử ping tất cả một mạng con đã cho bằng một tập lệnh shell linux nhỏ

$ 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

Trong trường hợp của tôi đã nói LÊN cho tất cả và sau đó ip nnói KHÔNG ĐÚNG với tất cả.
Pablo A

3

Hunt là một công cụ dòng lệnh có khả năng xây dựng một danh sách các máy khi chúng phát qua mạng để lấy thông tin. Nó sử dụng dữ liệu TCP, UDP, ICMP và ARP để xây dựng danh sách các địa chỉ MAC hoạt động trên mạng. Nó là một công cụ thụ động hoạt động bằng cách nghe trên dây.


4
Tôi biết rằng có những trang man, nhưng sẽ hữu ích khi xem một ví dụ trong câu trả lời.
Ehtesh Choudhury

2

Đối với một danh sách nhỏ gọn hơn của các thiết bị được kết nối:

nmap -sL 192.168.0.* | grep \(1

Giải trình.

nmap -sL 192.168.0.* sẽ liệt kê tất cả các IP trong mạng con và đánh dấu những IP có tên:

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

Vì tất cả các bản ghi thú vị bắt đầu bằng dấu ngoặc đơn (và chữ số 1, chúng tôi lọc theo đó | grep \(1(dấu gạch chéo ngược là cần thiết để thoát dấu ngoặc đơn)

Quirk
Hãy coi chừng rằng nếu hai thiết bị có cùng tên, nmapsẽ chỉ hiển thị một thiết bị được kết nối với bộ định tuyến lần cuối


2

Để quét trạng thái của một loạt các địa chỉ IP, điều này thật hay và đơn giản:

sudo nmap -sn 192.168.1.2-20

Ở đâu:

         -sn: Ping Scan - disable port scan

Ghi chú:

  • Trong các bản phát hành trước của Nmap, -snđược gọi là-sP

Tôi đã làm điều này trên Mac OS X (dựa trên BSD). Tôi không chắc chắn nếu phiên bản Linux có bất kỳ sự khác biệt.


1
Rực rỡ, tất cả những gì tôi phải làm là: sudo nmap -sP 192.168.178.0-255. Điều này đã thực hiện quét trong mạng con tôi đang ở.
Leo Gerber

2

Bạn có thể sử dụng fping sudo apt-get install fping (trong các hệ điều hành giống như debian).

fping tương tự như ping, nhưng hoạt động tốt hơn nhiều khi ping nhiều máy chủ. Các -r 1 cờ nói fping để thực hiện chỉ có một vòng. Phần 2> 1 cho phép grep lọc đầu ra.

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

Sẽ hiển thị một cái gì đó như:

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

Ngoài ra còn có một cờ thú vị cho nmap sẽ cho phép bạn xem nhà cung cấp MAC - nếu biết. Sử dụng với sudo để xem địa chỉ MAC.

$ sudo nmap -sP 192.168.1.0/24

Bạn sẽ nhận được ví dụ:

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. Giải pháp thay thế nếu phát sóng và nmapkhông có sẵn:

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

2a. hoặc chỉ hỏi máy chủ tên miền của bạn :

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

2b. không có

echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
  1. ping tất cả có thể ping được Mạng-Thiết bị trong 192.168.2.0/24 subnet song song (để giảm thời gian chạy). Sau đó arpsẽ hiển thị mọi thiết bị, mà trả lời.

  2. không kiểm tra các kết nối đang hoạt động hoặc hiện tại, nhưng liệt kê tất cả các kết nối mà dịch vụ tên miền cục bộ giữ một mục, ngay cả những kết nối thực sự cũ.

Giải thích chi tiết hơn:

  • seq 254để tạo tất cả các số từ 1 đến 254 (cho tất cả các số từ 100 đến 150 seq 100 150:)
  • xargsgọi pingvà thay thế "IP" ( -iIP) bằng seqsố uence từ stdin, do đó 192.168.2.IP thay đổi thành 192.168.2.1 cho seqsố đầu tiên , -Pchỉ định số lượng pingquy trình đồng thời xargssẽ bắt đầu, tôi chọn cùng số lượng +1 làm địa chỉ ( = 254) tôi quan tâm.
  • pingvới địa chỉ IP được sửa đổi bởi xargs ( 192.168.2.IP) và chỉ ping một lần ( -c1); bạn phải sử dụng cùng một mã định danh như được chỉ định cho xargs trên -iđối số trong trường hợp nàyIP
  • grep time= để xóa mọi dòng chứa thông tin thừa, chúng tôi chỉ quan tâm đến câu trả lời, cung cấp thời gian khứ hồi (= nhận được phản hồi)
  • arp -a để hiển thị các cặp tên (ip) hợp lệ

Tôi gọi đây là lệnh pingall của mình và làm cho nó có sẵn trên một bí danh trong ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.