ค้นหาคอมพิวเตอร์เครื่องอื่นบนเครือข่ายผ่านบรรทัดคำสั่ง


30

ฉันมี Macs จำนวนหนึ่งในเครือข่ายในบ้านของฉันและใช้การเข้าถึงเพียงหนึ่งในนั้นจากภายนอก ฉันจะทราบได้อย่างไรว่าที่อยู่ IP ของเครื่องอื่นเป็นอย่างไร

คำตอบ:


39

ลองarp -aดูตาราง arp ปัจจุบันของคอมพิวเตอร์ มันจะแสดงเฉพาะที่อยู่ IP ที่คอมพิวเตอร์ของคุณมีปฏิสัมพันธ์ เอาต์พุตเช่นนี้ (บดบังเล็กน้อยเพื่อซ่อนที่อยู่ MAC บนเครือข่ายของฉัน):

$ 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]

หากคุณไม่ได้มีข้อมูลเพิ่มเติมเกี่ยวกับการที่คอมพิวเตอร์ซึ่งคุณสามารถได้รับเพียงเล็กน้อยข้อมูลเพิ่มเติมโดยการระบุผู้ผลิตของการ์ดเครือข่ายผ่านการค้นหาที่อยู่ MAC


12
ขออภัยใช้เวลาเกือบ 4 ปีในการทำเครื่องหมายว่าถูกต้อง
Jon Haddad

หมายความว่าอะไร " arp -aจะแสดงเฉพาะที่อยู่ IP ที่คอมพิวเตอร์ของคุณโต้ตอบด้วย" ? ฉันควรส่งสัญญาณออกอากาศ (192.168.110.255) ก่อนและรับการตอบกลับจากทุกอุปกรณ์แล้วใช้ arp เพื่อรับรายการทั้งหมดเนื่องจากฉันเพิ่งมีการโต้ตอบ / ping อุปกรณ์ทั้งหมดหรือไม่
Weishi Zeng

10

สมมติว่าเครื่องอื่น ๆ ทั้งหมดอยู่ในโดเมนการออกอากาศเดียวกันกับเครื่องที่คุณเข้าถึงการส่ง 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

การตอบกลับครั้งแรกและครั้งสุดท้ายมักจะเป็นเครื่องของคุณ การ(DUP!)ตอบสนองมาจากเครื่องอื่น ๆ (แม้ว่าตัวอย่างนี้จะแสดงเครื่องบางเครื่องที่ตอบกลับด้วยที่อยู่การออกอากาศด้วยตนเองซึ่งไม่มีประโยชน์มากนัก)

คุณอาจลองที่อยู่ที่ออกอากาศทั้งหมด:

% 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

ตัวอย่างนี้แสดงว่า cruft น้อยลง ทั้งหมด(DUP!)เป็นเครื่องอื่น ๆ และเครื่องท้องถิ่นได้อย่างง่ายดายระบุว่าเป็น 127.0.0.1


8

Mac ของคุณทั้งหมดมีชื่อโฮสต์ดังนั้นคุณไม่จำเป็นต้องรู้ที่อยู่ IP แต่คุณจะใช้ชื่อโฮสต์แทน

ชื่อโฮสต์จะขึ้นอยู่กับชื่อที่คุณให้กับคอมพิวเตอร์ ดังนั้นหากคอมพิวเตอร์ชื่อ "Jon's Mac" ชื่อโฮสต์ที่คุณจะใช้คือ "jons-mac.local"

$ ssh jons-mac.local

หากคุณยังไม่ทราบชื่อโฮสต์ของคอมพิวเตอร์คุณสามารถค้นหาชื่อโฮสต์ของคอมพิวเตอร์ในการตั้งค่าการแชร์ในคอมพิวเตอร์เครื่องนั้นหรือคุณสามารถค้นหาชื่อโฮสต์ของคอมพิวเตอร์เครื่องอื่นบนเครือข่ายโดยใช้คำสั่ง dns-sd คำสั่งนี้ใช้ Bonjour เพื่อให้คุณเรียกดูบริการเครือข่าย คุณจะพบคอมพิวเตอร์ที่โฆษณาบริการเครือข่ายบางอย่างเท่านั้น (ซึ่งเป็นคอมพิวเตอร์ขนาดใหญ่ที่คุณสนใจ)

หากคุณต้องการเชื่อมต่อกับคอมพิวเตอร์บางเครื่องที่มี ssh คุณสามารถค้นหาคอมพิวเตอร์ที่มีอยู่โดยใช้:

dns-sd -B _ssh._tcp .

โดยทั่วไปคุณสามารถค้นหาโฮสต์ที่ให้บริการเฉพาะโดยใช้ชื่อบริการ: http://www.dns-sd.org/ServiceTypes.html

โปรโตคอล Bonjour ยังให้ความสามารถในการค้นหาบริการทั้งหมดไม่ใช่เฉพาะ คุณสามารถทำได้โดยค้นหาบริการพิเศษ_services._dns-sd._udp

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

คำถามกำลังถามเกี่ยวกับการค้นหาคอมพิวเตอร์เครื่องอื่นบนเครือข่ายจากบรรทัดคำสั่ง แต่คุณยังสามารถเรียกดูบริการโฆษณา dns-sd ใน GUI ตัวอย่างเช่น Terminal.app> การเชื่อมต่อระยะไกลใหม่ ... เปิดหน้าต่างที่แสดงบริการ ssh, sftp, ftp และ telnet ที่โฆษณา


คุณคาดหวังว่าคำสั่งนี้dns-sd -B _ssh._tcp .จะทำงานเร็วแค่ไหน?
AJP

1
@AJP หากมีการโฆษณาบริการ ssh ใด ๆ ควรเริ่มส่งคืนผลลัพธ์ทันที แต่ถ้า 'เสร็จสิ้น' คุณหมายถึงทางออกมันจะไม่ออก คำสั่งจะรันเคียวรีที่มีอายุการใช้งานนานและเอาต์พุตเปลี่ยนแปลงอย่างต่อเนื่องเมื่อเซอร์วิสปรากฏและหายไปจากเครือข่ายจนกว่าคุณจะฆ่ามัน
bames53

7

คุณสามารถลองใช้dns-sdเพื่อดำเนินการสอบถาม Bonjour บน LAN


3
ฉันชอบที่คำตอบนี้เฉพาะ OS X และขอเข้าไปใน bonjour เพื่อหลีกเลี่ยงการรับรายละเอียดเครือข่ายเพิ่มเติมที่ฉันไม่สนใจ (ในบริบทของคำถามนี้) คำสั่งเฉพาะที่ใช้งานได้สำหรับความต้องการของฉันคือ:dns-sd -B _ssh._tcp .
stevenhaddox

6

อาจจะเป็น overkill เล็กน้อย แต่คุณสามารถใช้nmap


1
แม้ว่าสิ่งนี้อาจตอบคำถามได้ แต่มันจะเป็นคำตอบที่ดีกว่าถ้าคุณสามารถให้คำอธิบายได้ว่าทำไมถึงเป็นเช่นนั้น
DavidPostill

4

CLI แบบย่อหนึ่งซับเพื่อก้าวผ่าน / 24 ซับเน็ต ping แต่ละที่อยู่ IP รวดเร็วและสกปรกชนิด แต่ใช้งานได้

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

คำอธิบาย: หากต้องการเปลี่ยนช่วงให้เปลี่ยน x = 1 เป็น x = 130 หรืออะไรก็ตามที่คุณต้องการเริ่มต้นและ 254 ถึงจุดสิ้นสุดให้พูด 135

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

ping -c 3 คือส่ง Ping สามครั้ง ในการเปลี่ยนจำนวนปิงเปลี่ยน 3 เป็นอย่างอื่นและเปลี่ยนช่วงที่อยู่ให้เปลี่ยน 192.168.0 เป็นอย่างอื่น

do ping -c 30 10.10.0.$x;

1
คุณสามารถใช้ fping เพื่อทำสิ่งนี้:fping -ag 172.16.0.0/16
ıɾuǝʞ

นี้คืออะไร แต่อย่างรวดเร็วสำหรับฉัน ...
แม็กซ์วิลเลียมส์

มันเป็นทางออกที่รวดเร็วและสกปรก เช่นเดียวกับการใช้งานอย่างรวดเร็วในกรณีที่ไม่มีเครื่องมือที่ถูกต้องเช่น nmap และไม่ได้เป็นเครื่องมือที่ถูกต้องเช่น nmap โฮสต์ที่ส่ง Ping อาจใช้เวลาสักครู่เมื่อพวกเขาไม่ตอบสนองและเนื่องจากสิ่งนี้ไม่ได้เป็นมัลติเธรดมันจะใช้เวลาสักครู่เมื่อโฮสต์ไม่ตอบสนอง ในด้านบวกมันไม่ต้องการอะไรนอกจากทุบตี
quinnr

2

หากคุณรู้ชื่อของคอมพิวเตอร์เครื่องอื่นใน LAN วิธีที่ง่ายที่สุดคือการ 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

สิ่งนี้อาจขึ้นอยู่กับเราเตอร์ในพื้นที่หรือเซิร์ฟเวอร์ DHCP ของคุณ หากชื่อโฮสต์เปล่าไม่ทำงานให้ลองผนวก. local (เช่นping hostname.local )

เห็นได้ชัดว่าวิธีนี้ใช้งานไม่ได้กับ LAN ขนาดใหญ่หรือผู้ที่มีความจำไม่ดี


1

หากคุณใช้ Macs (สมมติว่า 10.5 หรือสูงกว่า) เพียงเปิดใช้งาน VNC สำหรับการเข้าถึงเดสก์ท็อปและใช้ Flame.app

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

มันเป็นยูทิลิตี้เล็ก ๆ ที่ดีจริงๆที่ให้สิ่งที่คุณต้องการได้อย่างรวดเร็ว สิ่งเดียวคือคุณจะต้องไปให้ไกลกว่า SSH


1

สำหรับ Windows:

1) เขียน: สำหรับ / L% I ใน (1,1,254) DO ping -w 30 -n 1 168.29.0.% I นี่จะ ping ที่อยู่ทั้งหมดในเครือข่ายท้องถิ่นของคุณ

2) จากนั้นเขียน: arp -a สิ่งนี้จะให้ที่อยู่ทั้งหมดที่ตอบไว้


แน่นอนมันขึ้นอยู่กับที่อยู่เครือข่ายท้องถิ่นของคุณในกรณีของฉันคือ 168.29.0.xxx คุณอาจเป็นอะไรที่เหมือนกับ 192.168.0.xxx
Chavdar

1
คำตอบของคุณขึ้นอยู่กับ Windows ในขณะที่ OP ระบุว่าเขาใช้ Mac คุณสามารถแก้ไขคำถามของคุณเพื่อพิจารณาสิ่งนี้ได้หรือไม่หากโซลูชันของคุณใช้งานได้กับ Mac
Matthew Williams

ผู้ใช้ MAC ทุกคนมีระบบปฏิบัติการ Windows นั่งอยู่รอบ ๆ ... คุณไม่สามารถอยู่ได้โดยปราศจากมัน ... : D
user2173353
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.