Bagaimana saya bisa mendaftar semua IP di jaringan yang terhubung, melalui Terminal lebih disukai?

219

Menggunakan Ubuntu 10.10, saya bertanya-tanya apakah ada perintah baris perintah yang dapat mencantumkan semua IP perangkat yang terhubung ke jaringan?

Saya akan menggunakan ini misalnya, untuk membuat daftar semua komputer yang terhubung ke jaringan rumah saya. Idealnya, perlu baris perintah karena saya akan menjalankannya dari C ++.

Ada ide?

Christopher Gwilliams
sumber
1
askubuntu.com/questions/82480/… || serverfault.com/questions/72380/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

243

Periksa perintah arp-scan - Anda mungkin harus menginstalnya misalnya:

sudo apt-get install arp-scan

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

Dan untuk memberikan detail lebih lanjut:

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

Di mana eth0 adalah perangkat Anda. Anda dapat menemukan perangkat Anda dengan:

ifconfig
Linker3000
sumber
Sempurna, terima kasih. Mengembalikan persis format yang saya butuhkan.
Christopher Gwilliams
1
Bekerja dengan baik di OSX juga! Diinstal dengan Brew, dan antarmuka en0, bukan eth0, tetapi berfungsi dengan baik.
nthonygreen
6
Jika Anda terhubung ke jaringan Anda menggunakan penggunaan wifi wlan0bukan eth0.
Neil
3
Bisakah Anda mendapatkan ini untuk daftar nama host serta alamat IP?
user1527227
2
Perlu dicatat bahwa ini tidak menggunakan cache ARP: ini melakukan pemindaian yang sebenarnya. Tidak seperti kebanyakan pemindaian nmap, ini tidak dapat melewati batas layer 3, yang biasanya Anda inginkan dalam skenario ini. (Dengan kata lain, ini terbatas pada subnet Anda.)
Zenexer
112

Gunakan nmap. contoh: nmap -sn 10.10.10.0/24Cache arp hanya akan memberi tahu Anda yang baru saja Anda coba hubungi.

Keith
sumber
2
Apakah 10.10.10.0 IP yang saya berikan? Apa 24 dalam hal ini? Terima kasih.
kolonel
4
@ Kolonel Itu hanya sebuah contoh. Anda harus menggantinya dengan jaringan Anda. 24 adalah "notasi slash" dari subnet mask. Ini berarti menggunakan 24 bit dari kiri. Ini setara dengan 255.255.255.0.
Keith
2
@Keith Anda tahu bagaimana saya bisa mengetahui alamat jaringan saya untuk digunakan? Atau hanya IP saya dengan 0/24 di akhir?
TMH
20

Di windows ini akan menjadi " arp -a" Saya percaya bahwa setara dengan yang ada di Linux adalah " arp -e".

Informasi ini dapat ditemukan dari halaman manual untuk arp:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).
David
sumber
Kelihatannya berfungsi (mungkin perlu bermain karena saya berada di jaringan publik sehingga sepertinya hanya mencantumkan semua server di jaringan.
Christopher Gwilliams
Jika saya berada di jaringan rumah, apakah itu hanya daftar perangkat yang terhubung ke router saya? Terima kasih!
Christopher Gwilliams
1
Perintah itu hanya akan mencantumkan perangkat di cache arp host saat ini dan itu hanya akan menjadi yang dihubungi tuan rumah baru-baru ini.
Linker3000
Keduanya bekerja di Linux, tetapi arp -amenampilkan (semua) host dengan gaya alternatif (BSD). Menjalankan Simpy arpmelakukan hal yang sama dengan menjalankan arp -ekarena itu adalah default.
simplegamer
15

Jika jaringan Anda 192.168.0.0/24, buat file yang dapat dieksekusi dengan kode berikut; Ubah 192.168.0ke jaringan Anda yang sebenarnya.

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done
Anders Larsson
sumber
Hai Anders ... Jaringan pengguna mungkin bukan 192.168.0.0/24; Saya membuat catatan. Pemformatan situs tidak seperti # yang kosong !, dan karenanya memformat potongan kode: ketika memasukkan kode, gunakan tombol blokquote atau teks yang telah diformat sebelumnya, dan tinjau jawaban Anda untuk pemformatan yang tepat sebelum mengirimkannya, saat carriage kembali, tab, dan spasi mungkin telah dilucuti.
Nevin Williams
Selain itu, saat menyediakan skrip yang perlu dimasukkan ke dalam file dan dapat dieksekusi, bukan hanya memotong & menempel, mungkin sebaiknya Anda menentukan ini; mungkin tidak jelas bagi sebagian orang apa yang diperlukan untuk mengimplementasikan solusi Anda.
Nevin Williams
12
Secara teknis, ini hanya akan mengembalikan host yang merespons ping. Mungkin ada host yang terhubung, tetapi tidak membalas permintaan gema ICMP. Selain itu, seseorang dapat menyiarkan satu paket ke seluruh jaringan dengan menentukan alamat broadcast, yang merupakan alamat terakhir dalam jaringan IP: ping -c 1 -W 1 192.168.0.255 akan melakukan hal yang sama seperti for loop.
Nevin Williams
@NevinWilliams (wajib -b, dihapus -W untuk menunggu lebih banyak) ping -b -c 1 192.168.0.255menghasilkan "1 paket ditransmisikan, 0 diterima, kehilangan paket 100%, waktu 0ms"
Aquarius Power
13

Coba instal nmap( sudo apt-get install nmap) dan ketik nmap 192.168.1.0/24substitusi 192.168.1dengan tiga bagian pertama dari alamat ip Anda (cari tahu menggunakan ip addr).

Anda juga bisa mendapatkan peta jaringan yang sedikit kurang akurat (menurut pengalaman saya) dengan menjalankan ping 192.168.1.255(lagi-lagi mengganti 192.168.1), yang seharusnya mengeluarkan a pinguntuk setiap mesin di jaringan, tetapi, menurut pengalaman saya, tidak selalu berfungsi dengan benar.

Samadi
sumber
Sebenarnya, tidak ada jawaban yang akan selalu berfungsi dengan benar. IP tidak dirancang dengan mempertimbangkan persyaratan ini, dan ada beberapa hal seperti Private VLAN yang membuatnya tidak mungkin menemukan host lain di LAN yang sama.
Ron Maupin
2

Muncul dengan yang berikut ini di nexus menggunakan tmuxkarena arp-scantidak ada dalam repo tetapi nmapdatang pra-instal, hanya menampilkan alamat ip:

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

Untuk daftar perangkat terhubung yang lebih ringkas:

nmap -sL 192.168.0.* | grep \(1

Penjelasan.

nmap -sL 192.168.0.* akan mendaftar semua IP di subnetwork dan menandainya, yang memiliki nama:

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

Karena semua catatan menarik dimulai dengan tanda kurung (dan angka 1, kami memfilternya dengan | grep \(1(backslash diperlukan untuk keluar dari tanda kurung)

Quirk
Berhati-hatilah bahwa jika dua perangkat memiliki nama yang sama, nmapakan menampilkan hanya satu, yang terhubung ke router lalu

Alexander Malakhov
sumber
Jika Anda memiliki jawaban yang sama persis untuk dua pertanyaan, mungkin perlu mempertimbangkan menandai pertanyaan sebagai duplikat daripada memposting jawaban duplikat. Dengan begitu pengetahuan bisa dibagikan ketika pertanyaan serupa dihubungkan bersama.
Mokubai
1
@Mokubai Anda benar, saya sudah menambahkan komentar ke OP. Ini menunjukkan masalah yang menarik. Sebuah cepat pencarian ditemukan 6 duplikat (Q ini dan 5 link) di 4 situs jaringan (SU, Ask Ubuntu, SF, Unix). Tentu masih banyak lagi! Bagaimana saya menangani ini? Idealnya, masing-masing dari 6 posting ini harus terhubung ke 5 orang lainnya. Menambahkan semua tautan ini dengan tangan jelas tidak berskala. Jadi, untuk saat ini saya telah ditautkan ke pos ini (paling banyak dipilih). Masalah lain adalah bahwa tidak mungkin untuk menandai Q pada AskUbuntu sebagai duplikat dari Q pada SU. Hm ... Mungkin ini sudah dibahas di meta?
Alexander Malakhov
tidak berfungsi untuk saya di Centos 7, cukup daftarkan setiap alamat IP yang mungkin dalam jaringan tanpa nama. arp-scan bekerja untuk saya.
Jeff
0

Menguraikan jawaban 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
Mathieu CAROFF
sumber