Cara menemukan semua alamat IP yang digunakan di jaringan


94

Dalam pekerjaan saya ada banyak komputer dan saya ingin membuat lelucon. Saya dapat menutup komputer melalui jaringan tetapi menemukan alamat IP sulit bagi saya.

Bagaimana saya dapat dengan mudah menemukan semua alamat IP online dari 192.168.1.aa hingga 192.168.1.zz?


4
cobaangry ip scanner
Web-E


2
serius? Anda ingin bantuan kami untuk mengerjai rekan kerja Anda?
Dan H

Jawaban:


141

Secara umum, nmapcukup berguna untuk memindai jaringan dengan cepat.

Untuk menginstal nmap, masukkan perintah berikut di terminal:

sudo apt-get install nmap

Setelah aplikasi diinstal, masukkan perintah berikut:

nmap -sn 192.168.1.0/24

Ini akan menunjukkan kepada Anda host mana yang merespons permintaan ping di jaringan antara 192.168.1.0 dan 192.168.1.255.


Untuk versi Nmap yang lebih lama, gunakan -sP:

nmap -sP 192.168.1.0/24

Untuk referensi tambahan, lihat halaman berikut:

Panduan Instalasi NMAP

Panduan Referensi NMAP

Ini adalah alat yang sangat berguna untuk dipelajari.


2
Tidak semua host merespons ping. ARP adalah cara untuk pergi, setidaknya di IPv4.
Marcin Kaminski

3
itu cukup bagi saya dan bekerja di internet

1
apakah ini hanya komputer saya, atau apakah perintah ini membutuhkan waktu lama untuk dijalankan?
JohnMerlino

4
Catatan, untuk mempercepat pemindaian nmap, Anda harus menambahkan flag -T4 (kecepatan) dan -n (hanya numerik).
Sergiy Kolodyazhnyy

3
Ingat bahwa Anda memerlukan sudo untuk perintah nmap, jika tidak, hasil nol akan dikembalikan.
machineaddict

40

Jika semua komputer di jaringan Anda adalah Ubuntu atau distribusi lain yang menggunakan avahi-daemon( DNS-SD ), Anda bisa mendapatkan daftar terperinci dari mereka (dengan nama host dan alamat IP) dengan melakukan:

avahi-browse -rt _workstation._tcp

Jika Anda ingin mengetahui semua alamat IP yang digunakan di jaringan Anda, Anda dapat menggunakan arp-scan:

sudo arp-scan 192.168.1.0/24

Karena tidak diinstal secara default, Anda harus menginstalnya dengan sudo apt-get install arp-scan. arp-scanmengirim paket ARP ke jaringan lokal dan menampilkan respons yang diterima, sehingga itu menunjukkan host bahkan firewall (yang memblokir lalu lintas berdasarkan paket IP).


3
Perintah ini jelas lebih baik daripada yang di atas. Menjalankan nmap butuh waktu lama, tetapi yang ini langsung menjawab dengan node di jaringan yang ditentukan.
JohnMerlino

3
Dalam kasus saya, sangat sering, arp-scantidak menemukan semua perangkat yang terkait dengan jaringan nirkabel saya. Sekarang, misalnya, sudo arp-scan 192.168.2.0/24menunjukkan 2 hasil (.1 dan .1), sementara nmap -sn 192.168.2.0/24menunjukkan 4 hasil (.1, .2, .3 dan .4). Jadi, sepertinya itu nmaplebih akurat (saya tahu pasti ada 4 perangkat yang terpasang pada jaringan). Kenapa ini?
tigerjack89

2
Mungkin saya menemukan jawabannya dalam komentar untuk pertanyaan lain. "Perlu dicatat bahwa beberapa perangkat mungkin tidak muncul kecuali jika dihidupkan. Nexus 4 saya tidak akan muncul kecuali layar menyala." Namun, menarik bahwa perangkat yang sama selalu merespons ping nmap.
tigerjack89

arp-scanitu bagus!
forzagreen

17

Catatan untuk pembaca : Jawaban orisinal telah diposting beberapa waktu yang lalu dan pada saat saya hanya belajar skrip shell. Lihat versi yang ditinjau di bawah untuk skrip baru dan lebih baik yang berkinerja lebih cepat.

Jawaban Asli

nmapakan menjadi pilihan # 1 saya, tetapi bagaimana jika Anda tidak memilikinya? Cara DIY akan dengan skrip ping yang melewati setiap alamat ip yang mungkin pada jaringan secara manual. Apa yang kita miliki di sini adalah hanya sementara loop, di mana kita menetapkan angka terakhir di alamat, melakukan ping tunggal diam ke alamat, memeriksa apakah perintah berhasil atau tidak (dan jika itu berhasil, maka host jelas naik), dan printfpernyataan. Cara cepat dan kotor, butuh sekitar 10 menit untuk menulisnya, tetapi runtime mungkin agak lambat.

#!/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

Jawaban yang Telah Direvisi

Saya awalnya memposting jawaban ini pada Agustus 2015. Sejak itu saya telah belajar sedikit lebih banyak tentang skrip shell, dan saya pernah melihat skrip ini, saya pikir akan lebih baik untuk meninjau kembali jawaban ini untuk menambahkan beberapa perbaikan. Berikut beberapa ide:

  • Scriptnya jelas lambat dan pingmenunggu respons dari tuan rumah. Secara default, pinguntuk dua RTT, yang dapat bervariasi tergantung pada seberapa padat jaringan Anda, dan sejauh yang saya mengerti protokol TCP menggandakan waktu tunggu setiap kali (setidaknya sesuai dengan ini ). Jadi kami bisa memaksakan pingwaktu dengan -w 1bendera. Karena kami memiliki 256 alamat dan kami mengasumsikan 1 detik untuk setiap alamat, skrip akan memakan waktu sekitar 256/60 = 4,27 menit.

  • Melakukan perintah dan kemudian menangkap status keluarnya dengan $?benar-benar tidak perlu. The if ... then;...fidapat beroperasi pada perintah langsung. Dengan kata lain, cukup untuk melakukan ini:

    if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
    then
         <some other code here>
    fi
    
  • The printfperintah dapat ditulis ulang sebagai begitu:

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

    Ini lebih merupakan perubahan gaya, tapi ini konsisten dengan cara printfkerjanya dan terlihat seperti di banyak bahasa lain, dengan "$NUM"variabel kutip . Mengutip di sini tidak perlu - karena kita hanya berurusan dengan angka, kita tidak perlu mengantisipasi pemisahan kata karena memiliki spasi dalam variabel.

  • Peningkatan kinerja yang jauh lebih baik dapat dicapai jika kita menelurkan beberapa proses latar belakang. Sunting script di bawah ini tidak persis seperti itu. Saya menempatkan pingdan printfke dalam fungsi, pingf(ya, nama klise, saya tahu). Sekarang, ada juga satu mainfungsi tunggal yang melakukan perulangan dan pemanggilan 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

Seberapa baik cara kerjanya? Tidak buruk, sebenarnya, membutuhkan waktu beberapa detik.

$ 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

Hal-hal yang Perlu Diingat

  • Windows (mulai sejak Windows 7, saya pikir) sudah mulai memblokir respons terhadap permintaan gema ICMP. Ada beberapa pertanyaan tentang hal itu di Ask Ubuntu dan situs lain yang sejenis, "Hei, komputer Linux saya bisa di-ping, tetapi tidak pada Windows, ada apa dengan itu?" Perlu diketahui fakta bahwa untuk versi Windows yang lebih baru Anda perlu mengaktifkan respons terhadap gema ICMP.

2
Saya suka solusi semacam ini
Szenis


4

fpingadalah alat yang hebat untuk memindai banyak host di jaringan melalui ICMP. Jika tidak diinstal, Anda dapat menginstalnya dengan:

sudo apt-get install fping

fping mengirimkan paket ICMP ECHO_REQUEST dan menandai sebuah host sebagai Naik jika menerima ECHO_RESPONSE dari host.

Misalnya, untuk memindai host subnet 192.168.1.0/24, Anda dapat melakukan:

fping -g 192.168.1.0/24

Untuk jumlah host tertentu misalnya dari 192.168.1.15ke 192.168.1.140:

fping -g 192.168.1.15 192.168.1.140

fping sangat dapat dikonfigurasi misalnya berapa banyak paket akan dikirim, waktu untuk menunggu respons, format output dll.

Periksa man fpinguntuk mendapatkan lebih banyak ide.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.