Làm cách nào tôi có thể liệt kê tất cả IP trong mạng được kết nối, thông qua Terminal tốt nhất?


219

Sử dụng Ubuntu 10.10, tôi đã tự hỏi liệu có một dòng lệnh có thể liệt kê tất cả IP của các thiết bị được kết nối với mạng không?

Tôi sẽ sử dụng điều này chẳng hạn, để liệt kê tất cả các máy tính được kết nối với mạng gia đình của tôi. Lý tưởng nhất, nó cần phải là dòng lệnh vì tôi sẽ chạy nó từ C ++.

Có ý kiến ​​gì không?




Câu trả lời:


243

Kiểm tra lệnh arp-scan - bạn có thể sẽ phải cài đặt nó, ví dụ:

sudo apt-get install arp-scan

http://manpages.ubfox.com/manpages/hardy/man1/arp-scan.1.html

Và để biết thêm chi tiết:

sudo arp-scan --interface=eth0 --localnet

Trong đó eth0 là thiết bị của bạn. Bạn có thể tìm thấy thiết bị của mình với:

ifconfig

Hoàn hảo, cảm ơn bạn. Trả về chính xác định dạng tôi cần.
Christopher Gwilliams

1
Hoạt động hoàn hảo trên OSX! Được cài đặt với Brew và giao diện là en0, thay vì eth0, nhưng hoạt động rất tốt.
nthonygreen

6
Nếu bạn kết nối với mạng của bạn bằng cách sử dụng wifi wlan0thay vì eth0.
Neil

3
Bạn có thể lấy cái này để liệt kê tên máy chủ cũng như địa chỉ IP không?
dùng1527227

2
Điều đáng chú ý là điều này không sử dụng bộ đệm ARP: nó thực hiện quét thực tế. Không giống như hầu hết các lần quét nmap, điều này không thể vượt qua ranh giới lớp 3, thường là những gì bạn muốn trong kịch bản này. (Nói cách khác, nó bị giới hạn trong mạng con của bạn.)
Zenexer

112

Sử dụng nmap. Ví dụ: nmap -sn 10.10.10.0/24Bộ đệm arp sẽ chỉ cho bạn biết những người mà bạn đã cố gắng liên hệ gần đây.


2
là 10.10.10.0 IP đã cho của tôi? 24 trong trường hợp này là gì? Cảm ơn.
kolonel

4
@kolonel Đó chỉ là một ví dụ. Bạn nên thay thế nó với mạng của bạn. 24 là "ký hiệu gạch chéo" của mặt nạ mạng con. Nó có nghĩa là sử dụng 24 bit từ bên trái. Nó tương đương với 255.255.255.0.
Keith

2
@Keith bạn có biết làm thế nào tôi tìm ra địa chỉ mạng của tôi để sử dụng không? Hay đó chỉ là IP của tôi với 0/24 ở cuối?
TMH


20

Trong các cửa sổ, đây sẽ là " arp -a" Tôi tin rằng tương đương với Linux sẽ là " arp -e".

Thông tin này có thể được tìm thấy từ trang man cho arp:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).

Trông có vẻ như nó hoạt động (có thể cần phải chơi như tôi trên mạng công cộng nên dường như chỉ liệt kê tất cả các máy chủ trên mạng.
Christopher Gwilliams

Nếu tôi ở trên mạng gia đình, nó có liệt kê các thiết bị được kết nối với bộ định tuyến của tôi không? Cảm ơn!
Christopher Gwilliams

1
Lệnh đó sẽ chỉ liệt kê các thiết bị trong bộ đệm arp hiện tại của máy chủ và đó sẽ chỉ là những thiết bị mà máy chủ đã liên hệ gần đây.
Linker3000

Cả hai đều hoạt động trên Linux, nhưng arp -ahiển thị (tất cả) máy chủ theo kiểu thay thế (BSD). Simpy chạy arpgiống như chạy arp -ebeacuse đó là mặc định.
Simplegamer

15

Nếu mạng của bạn là 192.168.0.0/24, tạo một tệp thực thi với mã sau đây; Thay đổi 192.168.0mạng thực tế của bạn.

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done

Xin chào ... Mạng của người dùng có thể không phải là 192.168.0.0/24; Tôi đã ghi chú. Định dạng của trang web không giống như một #! và không gian có thể đã bị tước bỏ.
Nevin Williams

Đồng thời, khi cung cấp một tập lệnh cần được đưa vào một tệp và thực thi, thay vì chỉ đơn giản là cắt và dán, có lẽ tốt nhất là bạn chỉ định điều này; có thể không rõ ràng đối với một số điều tất cả là cần thiết để thực hiện giải pháp của bạn.
Nevin Williams

12
Về mặt kỹ thuật, điều này sẽ chỉ trả về các máy chủ phản hồi ping. Có thể có các máy chủ được kết nối, nhưng không trả lời các yêu cầu tiếng vang ICMP. Đồng thời, người ta có thể phát một gói đến toàn bộ mạng bằng cách chỉ định địa chỉ quảng bá, là địa chỉ cuối cùng trong mạng IP: ping -c 1 -W 1 192.168.0.255 sẽ thực hiện tương tự như vòng lặp for.
Nevin Williams

@NevinWilliams (bắt buộc -b, đã xóa -W để chờ thêm) ping -b -c 1 192.168.0.255kết quả "1 gói được truyền, 0 đã nhận, mất gói 100%, thời gian 0ms"
Sức mạnh của Bảo Bình

13

Hãy thử cài đặt nmap( sudo apt-get install nmap) và nhập nmap 192.168.1.0/24thay thế 192.168.1bằng ba phần đầu tiên của địa chỉ IP của bạn (tìm hiểu bằng cách sử dụng ip addr).

Bạn cũng có thể lấy bản đồ mạng (theo kinh nghiệm của tôi) ít chính xác hơn một chút bằng cách chạy ping 192.168.1.255(thay thế một lần nữa 192.168.1), điều này sẽ phát hành pingcho mọi máy trên mạng, nhưng, theo kinh nghiệm của tôi, không phải lúc nào cũng hoạt động chính xác.


Trên thực tế, không có câu trả lời nào sẽ luôn hoạt động chính xác. IP không được thiết kế theo yêu cầu này và có những thứ như Vlan riêng khiến không thể tìm thấy bất kỳ máy chủ nào khác trên cùng mạng LAN.
Ron Maupin

2

Đến với phần sau trên một nexus sử dụng tmuxnhư arp-scankhông có trong repo nhưng nmapđược cài đặt sẵn, chỉ hiển thị các địa chỉ IP:

nmap -sn 192.168.1.1-254/24 | egrep "scan report" | awk '{print $5}'

1

Đố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


Nếu bạn có cùng một câu trả lời cho hai câu hỏi thì có thể nên xem xét việc gắn cờ các câu hỏi là trùng lặp thay vì đăng các câu trả lời trùng lặp. Bằng cách đó, kiến ​​thức có thể được chia sẻ khi các câu hỏi tương tự được liên kết với nhau.
Mokubai

1
@Mokubai Bạn nói đúng, tôi đã thêm nhận xét vào OP. Điều này cho thấy một vấn đề thú vị. Một tìm kiếm nhanh đã phát hiện ra 6 bản sao (liên kết Q và 5 này) trên 4 trang web mạng (SU, Hỏi Ubuntu, SF, Unix). Chắc chắn có nhiều hơn nữa! Làm thế nào để tôi xử lý này? Lý tưởng nhất, mỗi bài trong số 6 bài này nên liên kết với 5 bài khác. Thêm tất cả các liên kết này bằng tay rõ ràng không quy mô. Vì vậy, hiện tại tôi đã liên kết với bài đăng này (hầu hết được nâng cấp). Một vấn đề khác là không thể đánh dấu Q trên AskUbfox là bản sao của Q trên SU. Hừm ... Có lẽ, điều này đã được thảo luận trên meta?
Alexander Malakhov

không hoạt động với tôi trên Centos 7, chỉ liệt kê mọi địa chỉ IP có thể có trong mạng mà không có tên. arp-scan làm việc cho tôi.
Jeff

0

Ellaborating trên câu trả lời của Anders Larrson -

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    scan 192.168.1
fi
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.