Cách tìm tất cả các địa chỉ IP được sử dụng trên mạng


94

Trong công việc của tôi có rất nhiều máy tính và tôi muốn làm một trò đùa. Tôi có thể đóng máy tính qua mạng nhưng việc tìm địa chỉ IP rất khó đối với tôi.

Làm cách nào tôi có thể dễ dàng tìm thấy tất cả các địa chỉ IP trực tuyến từ 192.168.1.aa đến 192.168.1.zz?


4
thửangry ip scanner
Web-E


2
nghiêm túc? Bạn muốn sự giúp đỡ của chúng tôi để chơi khăm đồng nghiệp của bạn?
Dan H

Câu trả lời:


141

Nói chung, nmapkhá hữu ích để nhanh chóng quét các mạng.

Để cài đặt nmap, nhập lệnh sau trong thiết bị đầu cuối:

sudo apt-get install nmap

Khi ứng dụng được cài đặt, hãy nhập lệnh sau:

nmap -sn 192.168.1.0/24

Điều này sẽ cho bạn thấy máy chủ nào đã trả lời các yêu cầu ping trên mạng trong khoảng từ 192.168.1.0 đến 192.168.1.255.


Đối với các phiên bản cũ hơn của Nmap, hãy sử dụng -sP:

nmap -sP 192.168.1.0/24

Để tham khảo thêm, xem các trang sau:

Hướng dẫn cài đặt NMAP

Hướng dẫn tham khảo NMAP

Nó là một công cụ rất hữu ích để tìm hiểu.


2
Không phải tất cả các máy chủ phản ứng với ping. ARP là con đường để đi, ít nhất là trong IPv4.
Marcin Kaminski

3
Thế là đủ cho tôi và nó hoạt động trên internet

1
nó chỉ là máy tính của tôi, hay lệnh này mất mãi mãi để chạy?
JohnMerlino

4
Lưu ý, để tăng tốc độ quét nmap, bạn nên thêm cờ -T4 (tốc độ) và -n (chỉ số).
Sergiy Kolodyazhnyy

3
Hãy nhớ rằng bạn cần sudo cho lệnh nmap, nếu không kết quả sẽ được trả về.
machineaddict

40

Nếu tất cả các máy tính trong mạng của bạn là Ubuntu hoặc bất kỳ bản phân phối nào sử dụng avahi-daemon( DNS-SD ), bạn có thể nhận danh sách chi tiết về chúng (với tên máy chủ và địa chỉ IP) bằng cách thực hiện:

avahi-browse -rt _workstation._tcp

Nếu bạn muốn biết tất cả các địa chỉ IP được sử dụng trong mạng của mình, bạn có thể sử dụng arp-scan:

sudo arp-scan 192.168.1.0/24

Vì nó không được cài đặt theo mặc định, bạn sẽ phải cài đặt nó với sudo apt-get install arp-scan. arp-scangửi các gói ARP đến mạng cục bộ và hiển thị các phản hồi nhận được, để nó hiển thị ngay cả các máy chủ được tường lửa (chặn lưu lượng dựa trên các gói IP).


3
Lệnh này chắc chắn tốt hơn lệnh trên. Chạy nmap mất nhiều thời gian, nhưng cái này trả lời ngay lập tức với các nút trong mạng được chỉ định.
JohnMerlino

3
Trong trường hợp của tôi, rất thường xuyên, arp-scankhông tìm thấy tất cả các thiết bị liên quan đến mạng không dây của tôi. Bây giờ, ví dụ, sudo arp-scan 192.168.2.0/24hiển thị 2 kết quả (.1 và .1), trong khi nmap -sn 192.168.2.0/24hiển thị 4 kết quả (.1, .2, .3 và .4). Vì vậy, có vẻ như nmapchính xác hơn (tôi biết chắc chắn rằng có 4 thiết bị được gắn vào mạng). Tại sao lại thế này?
tigerjack89

2
Có lẽ tôi đã tìm thấy câu trả lời trong một bình luận cho một câu hỏi khác. "Cần lưu ý rằng một số thiết bị có thể không hiển thị trừ khi chúng được bật. Nexus 4 của tôi sẽ không hiển thị trừ khi màn hình được bật." Tuy nhiên, thật thú vị khi các thiết bị tương tự luôn phản hồi lại các lệnh ping nmap.
tigerjack89

arp-scanlà tốt đẹp
forzagreen

17

Lưu ý cho người đọc : Câu trả lời ban đầu đã được đăng cách đây một thời gian và tại thời điểm tôi chỉ học kịch bản shell. Xem phiên bản được xem lại dưới đây để biết một kịch bản mới và được cải thiện, hoạt động nhanh hơn nhiều.

Câu trả lời gốc

nmapsẽ là lựa chọn số 1 của tôi, nhưng nếu bạn không có nó thì sao? Cách DIY sẽ là với một tập lệnh ping đi qua từng địa chỉ IP có thể có trên mạng theo cách thủ công. Những gì chúng ta có ở đây chỉ là vòng lặp while, nơi chúng ta đặt số cuối cùng trong địa chỉ, tạo một ping đơn lẻ thành địa chỉ, kiểm tra xem lệnh có thành công hay không (và nếu nó đã thành công, thì máy chủ rõ ràng đã lên) và printftuyên bố. Cách nhanh và bẩn, tôi mất khoảng 10 phút để viết nó, nhưng thời gian chạy có thể hơi chậm.

#!/bin/sh
# set -x
NUM=1

while [ $NUM -lt 256  ];do 
    ping -q -c 1 192.168.0.$NUM > /dev/null 
    RESULT=$(echo $?)
    if [ $RESULT -eq 0 ]; then 
        printf 192.168.0.$NUM"\n"
    fi
    NUM=$(expr $NUM + 1)
done

Trả lời lại

Ban đầu tôi đã đăng câu trả lời này vào tháng 8 năm 2015. Kể từ đó tôi đã tìm hiểu thêm một chút về kịch bản shell, và một khi tôi đã xem kịch bản này, tôi nghĩ sẽ là một ý tưởng tốt để xem lại câu trả lời này để thêm một vài cải tiến. Dưới đây là một vài ý tưởng:

  • Kịch bản rõ ràng là chậm và pingchờ phản hồi từ chủ nhà. Theo mặc định, pingđối với hai RTT, có thể thay đổi tùy thuộc vào mức độ tắc nghẽn của mạng của bạn và theo như tôi hiểu giao thức TCP nhân đôi thời gian chờ mỗi lần (ít nhất là theo điều này ). Vì vậy, chúng tôi có thể buộc pingphải hết thời gian với -w 1cờ. Vì chúng tôi có 256 địa chỉ và chúng tôi giả sử 1 giây cho mỗi địa chỉ, tập lệnh sẽ mất khoảng 256/60 = 4,27 phút.

  • Thực hiện một lệnh và sau đó nắm bắt trạng thái thoát của nó $?là không thực sự cần thiết. Có if ... then;...fithể hoạt động trên các lệnh trực tiếp. Nói cách khác, nó đủ để làm điều này:

    if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
    then
         <some other code here>
    fi
    
  • Các printflệnh có thể được viết lại như vậy:

    printf "IP %s is up\n" 192.168.0."$NUM"
    

    Đây là một sự thay đổi về phong cách, nhưng nó phù hợp với cách printfhoạt động và trông giống như trong nhiều ngôn ngữ khác, với "$NUM"biến trích dẫn . Trích dẫn ở đây là không cần thiết - vì chúng tôi chỉ xử lý các số, chúng tôi không cần phải dự đoán việc chia từ do có khoảng trắng trong một biến.

  • Cải thiện hiệu suất tốt hơn nhiều có thể đạt được nếu chúng ta sinh ra một số quy trình nền. Các kịch bản chỉnh sửa dưới đây thực hiện chính xác điều đó. Tôi đặt pingprintfvào một chức năng, pingf(vâng, tên Corny, tôi biết). Bây giờ, cũng có một mainchức năng duy nhất thực hiện vòng lặp và gọi pingf.

#!/bin/sh
# Uncomment for debugging
#set -x
pingf(){
    if ping -w 2 -q -c 1 192.168.0."$1" > /dev/null ;
    then 
        printf "IP %s is up\n" 192.168.0."$1"
    fi
}

main(){

    NUM=1
    while [ $NUM -lt 255  ];do 
        pingf "$NUM" &
        NUM=$(expr "$NUM" + 1)
    done
    wait
}

main

Làm thế nào tốt hơn làm việc đó? Không tệ, thực sự, mất một vài giây.

$ time ./ping_script.sh                                                                      
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
    0m02.50s real     0m00.01s user     0m00.12s system

Những điều cần lưu ý

  • Windows (bắt đầu từ Windows 7, tôi nghĩ) đã bắt đầu chặn phản hồi đối với các yêu cầu tiếng vang ICMP. Có khá nhiều câu hỏi về vấn đề đó trên Ask Ubuntu và các trang web khác thuộc loại "Này, máy tính Linux của tôi có thể được ping, nhưng không phải là Windows, có chuyện gì vậy?" Chỉ cần lưu ý rằng thực tế là đối với các phiên bản Windows mới hơn, bạn cần phải kích hoạt phản hồi cho tiếng vang ICMP.

2
Tôi thích loại giải pháp này
Szenis

15

Netdiscover có thể là câu trả lời của bạn.

Để cài đặt qua thiết bị đầu cuối:

sudo apt-get install netdiscover

sử dụng ví dụ:

sudo netdiscover -r 192.168.1.0/24 -i wlan0

Một IP với MAC Addreses sẽ hiển thị trên thiết bị đầu cuối của bạn. Xem ảnh chụp màn hình

nhập mô tả hình ảnh ở đây

mong giúp bạn

tài liệu tham khảo


Có vẻ rất lỗi, lần đầu tiên thử *** buffer overflow detected ***: netdiscover terminated .
Pablo A

Công cụ này không tìm thấy một số thứ trên mạng của tôi.
Anthony

4

fpinglà một công cụ tuyệt vời để quét nhiều máy chủ trên mạng thông qua ICMP. Nếu không được cài đặt, bạn có thể cài đặt nó bằng cách:

sudo apt-get install fping

fping gửi các gói ICMP ECHO_REQUEST và đánh dấu máy chủ là Up nếu nó nhận ECHO_RESPONSE từ máy chủ.

Ví dụ: để quét các máy chủ của mạng con 192.168.1.0/24, bạn có thể làm:

fping -g 192.168.1.0/24

Đối với một số lượng cụ thể của máy chủ, ví dụ từ 192.168.1.15đến 192.168.1.140:

fping -g 192.168.1.15 192.168.1.140

fping có cấu hình cao, ví dụ có bao nhiêu gói sẽ được gửi, thời gian chờ phản hồi, định dạng đầu ra, v.v.

Kiểm tra man fpingđể có thêm ý tưởng.

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.