Menemukan komputer lain di jaringan melalui baris perintah


30

Saya punya beberapa Mac di jaringan rumah saya, dan akses shell ke salah satunya saja dari luar. Bagaimana saya bisa mengetahui apa alamat IP dari mesin lain?

Jawaban:


37

Coba arp -alihat tabel arp komputer Anda saat ini. Ini akan menunjukkan hanya alamat IP yang komputer Anda telah berinteraksi. Keluaran seperti ini (dikaburkan sedikit untuk menyembunyikan alamat MAC di jaringan saya):

$ arp -a
? (10.1.168.1) at xx:xx:9e:82:ab:f6 on en1 ifscope [ethernet]
? (10.1.168.16) at xx:xx:29:d3:17:8 on en1 ifscope [ethernet]
? (10.1.168.115) at xx:xx:2:4f:76:14 on en1 ifscope [ethernet]
? (10.1.168.131) at xx:xx:6b:d0:36:a5 on en1 ifscope [ethernet]
? (10.1.168.134) at (incomplete) on en1 ifscope [ethernet]
? (10.1.168.137) at xx:xx:65:46:cd:b8 on en1 ifscope [ethernet]
? (10.1.168.255) at ff:ff:ff:ff:ff:ff on en1 ifscope [ethernet]
? (192.168.4.255) at ff:ff:ff:ff:ff:ff on vmnet8 ifscope [ethernet]
? (192.168.110.255) at (incomplete) on vmnet1 ifscope [ethernet]

Jika Anda tidak memiliki informasi lebih lanjut tentang yang komputer yang, Anda dapat memperoleh sedikit informasi lebih lanjut dengan mengidentifikasi produsen kartu jaringan melalui alamat MAC lookup .


12
Maaf butuh hampir 4 tahun untuk menandai ini sebagai benar.
Jon Haddad

Apa artinya " arp -ahanya akan menampilkan alamat IP yang berinteraksi dengan komputer Anda." ? Haruskah saya melakukan ping siaran (192.168.110.255) pertama dan mendapatkan respon dari setiap perangkat dan kemudian menggunakan arp untuk mendapatkan daftar lengkap karena saya baru saja berinteraksi / melakukan ping semua perangkat?
Weishi Zeng

10

Dengan asumsi semua mesin lain berada dalam domain broadcast yang sama dengan yang Anda akses, ping alamat broadcast sering kali sudah cukup. Ini tidak akan menemukan mesin yang tertidur, atau mereka yang dikonfigurasi untuk tidak menanggapi ping, atau mereka yang akan menanggapi ping tetapi tidak untuk menyiarkan ping.

% ifconfig -a | grep broadcast
        inet 192.168.1.241 netmask 0xffffff00 broadcast 192.168.1.255
% ping -i 5 -c 2 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.241: icmp_seq=0 ttl=64 time=0.393 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=2.511 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=5.810 ms (DUP!)
64 bytes from 192.168.1.255: icmp_seq=0 ttl=64 time=7.886 ms (DUP!)
64 bytes from 192.168.1.241: icmp_seq=1 ttl=64 time=0.312 ms

--- 192.168.1.255 ping statistics ---
2 packets transmitted, 2 packets received, +3 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.312/3.382/7.886/3.010 ms

Respons pertama dan terakhir hampir selalu akan menjadi mesin lokal Anda. The (DUP!)tanggapan yang dari mesin lain (meskipun contoh ini juga menunjukkan beberapa mesin merespon dengan alamat broadcast itu sendiri, yang tidak terlalu berguna).

Anda juga dapat mencoba alamat siaran yang semuanya:

% ping -i 5 -c 2 255.255.255.255
PING 255.255.255.255 (255.255.255.255): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.392 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=3.053 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=8.685 ms (DUP!)
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.319 ms

--- 255.255.255.255 ping statistics ---
2 packets transmitted, 2 packets received, +2 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.319/3.112/8.685/3.401 ms

Contoh ini menunjukkan sedikit cacat. Semua ini (DUP!)adalah mesin lain dan mesin lokal mudah diidentifikasi sebagai 127.0.0.1.


8

Semua Mac Anda memiliki nama host sehingga Anda tidak perlu tahu alamat IP. Sebaliknya Anda hanya akan menggunakan nama host.

Nama host didasarkan pada nama apa pun yang Anda berikan pada komputer. Jadi, jika komputer bernama "Jon's Mac" nama host yang akan Anda gunakan adalah sesuatu seperti "jons-mac.local".

$ ssh jons-mac.local

Jika Anda belum mengetahui nama host komputer Anda, maka Anda dapat mengetahui nama host komputer dalam preferensi berbagi di komputer itu, atau Anda dapat mengetahui nama host komputer lain di jaringan menggunakan perintah dns-sd. Perintah ini menggunakan Bonjour untuk membiarkan Anda menjelajahi layanan jaringan; Anda hanya akan menemukan komputer yang benar-benar mengiklankan beberapa layanan jaringan (yang pada umumnya adalah satu-satunya yang Anda pedulikan).

Jika Anda ingin terhubung ke beberapa komputer yang menyediakan ssh, Anda dapat menemukan komputer yang tersedia menggunakan:

dns-sd -B _ssh._tcp .

Secara umum Anda dapat mencari host yang menyediakan layanan tertentu menggunakan nama layanan: http://www.dns-sd.org/ServiceTypes.html

Protokol Bonjour juga menyediakan kemampuan untuk menelusuri semua layanan, bukan hanya layanan tertentu. Anda dapat melakukan ini dengan menjelajahi layanan khusus_services._dns-sd._udp

dns-sd -B _services._dns-sd._udp .

Pertanyaannya adalah bertanya tentang menemukan komputer lain di jaringan dari baris perintah, tetapi Anda juga dapat menelusuri layanan yang diiklankan dns-sd di GUI. Misalnya Terminal.app> Koneksi Jarak Jauh Baru ... menampilkan jendela yang menampilkan layanan ssh, sftp, ftp, dan telnet yang diiklankan.


Seberapa cepat Anda bisa mengharapkan perintah ini dns-sd -B _ssh._tcp .dijalankan?
AJP

1
@AJP Jika ada layanan ssh yang diiklankan, maka harus segera mulai memberikan hasil. Tetapi jika dengan 'selesai' maksud Anda keluar, itu tidak keluar; perintah menjalankan permintaan berumur panjang dan menghasilkan perubahan secara terus menerus ketika layanan muncul dan menghilang dari jaringan sampai Anda membunuhnya.
bames53

7

Anda dapat mencoba menggunakan dns-sduntuk melakukan permintaan Bonjour di LAN.


3
Saya suka bahwa jawaban ini adalah OS X khusus dan terhubung ke Bonjour untuk menghindari mendapatkan detail jaringan tambahan yang saya tidak peduli (dalam konteks pertanyaan ini). Perintah khusus yang bekerja untuk kebutuhan saya adalah:dns-sd -B _ssh._tcp .
stevenhaddox

6

Mungkin sedikit berlebihan tetapi Anda bisa menggunakan nmap


1
Meskipun ini mungkin menjawab pertanyaan, itu akan menjadi jawaban yang lebih baik jika Anda bisa memberikan penjelasan mengapa itu bisa terjadi.
DavidPostill

4

CLI satu liner cepat untuk melewati / 24 subnet ping setiap alamat IP. Cepat dan agak kotor, tetapi berhasil.

for (( x=1; x <= 254; x++ )); do ping -c 3 192.168.0.$x; done

Penjelasan: Untuk mengubah rentang, ubah x = 1 ke x = 130, atau apa pun yang Anda ingin mulai, dan 254 sampai akhir, katakan 135.

for (( x=130; x <= 135; x++ ));

ping -c 3 mengirim tiga ping. Untuk mengubah jumlah ping, ubah 3 ke yang lain, dan untuk mengubah kisaran alamat, ubah 192.168.0 menjadi sesuatu yang lain.

do ping -c 30 10.10.0.$x;

1
Anda bisa menggunakan fping untuk melakukan ini:fping -ag 172.16.0.0/16
22ɾɾ

Bagi saya ini cepat, tapi ...
Max Williams

Ini solusi cepat dan kotor. Seperti pada, ini cepat diimplementasikan dengan tidak adanya alat yang benar seperti nmap, dan tidak sebagus alat yang benar, seperti nmap. Host ping dapat membutuhkan waktu beberapa saat ketika mereka tidak merespons, dan karena ini bukan multithreaded, itu akan memakan waktu ketika host tidak merespons. Di sisi positifnya, itu tidak memerlukan apa pun selain bash.
quinnr

2

Jika Anda tahu nama komputer lain di LAN, cara paling sederhana adalah dengan melakukan ping:

$ ping foobar

Pinging foobar.lan [192.168.0.25] with 32 bytes of data:

Reply from 192.168.0.25: bytes=32 time<1ms TTL=64
Reply from 192.168.0.25: bytes=32 time<1ms TTL=64

Ini mungkin tergantung pada router lokal Anda atau server DHCP. Jika nama host kosong tidak berfungsi, coba tambahkan .local (mis. Ping hostname.local ).

Jelas ini tidak bekerja dengan baik untuk LAN besar atau orang dengan ingatan yang buruk.


1

Jika Anda menggunakan Mac, (dengan asumsi 10,5 atau lebih besar), cukup aktifkan VNC untuk akses desktop dan gunakan Flame.app.

http://husk.org/apps/flame/

Ini adalah utilitas kecil yang sangat bagus yang memberi Anda apa yang Anda butuhkan, sangat cepat. Satu-satunya hal adalah Anda harus pergi lebih jauh dari SSH.


1

Untuk Windows:

1) Tulis: untuk / L% I di (1,1.254) DO ping -w 30 -n 1 168.29.0.% I Ini akan melakukan ping ke semua alamat di jaringan lokal Anda

2) Kemudian tulis: arp -a Ini akan memberi Anda semua alamat yang menjawab


Tentu saja itu tergantung pada alamat jaringan lokal Anda. Dalam kasus saya ini adalah 168.29.0.xxx. Milik Anda mungkin seperti 192.168.0.xxx
Chavdar

1
Jawaban Anda didasarkan pada Windows sementara OP menyatakan ia menggunakan Mac. Bisakah Anda mengedit pertanyaan Anda untuk memperhitungkan ini atau menyatakan apakah solusi Anda akan berfungsi pada Mac.
Matthew Williams

Setiap pengguna MAC memiliki sistem operasi Windows ... Anda tidak dapat hidup tanpanya ...: D
user2173353
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.