Tìm các máy tính khác trên mạng qua dòng lệnh


30

Tôi đã có một số máy Mac trên mạng gia đình của mình và chỉ truy cập vỏ cho một trong số chúng từ bên ngoài. Làm thế nào tôi có thể tìm ra địa chỉ IP của các máy khác là gì?

Câu trả lời:


39

Hãy thử arp -axem bảng arp hiện tại của máy tính của bạn. Nó sẽ chỉ hiển thị những địa chỉ IP mà máy tính của bạn đã tương tác. Đầu ra như thế này (bị che khuất một chút để ẩn địa chỉ MAC trên mạng của tôi):

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

Nếu bạn không có thêm thông tin về máy tính nào, bạn có thể lấy thêm một chút thông tin bằng cách xác định các nhà sản xuất card mạng thông qua tra cứu địa chỉ MAC .


12
Xin lỗi, phải mất gần 4 năm để đánh dấu điều này là chính xác.
Jon Haddad

Điều đó có nghĩa là gì " arp -asẽ chỉ hiển thị những địa chỉ IP mà máy tính của bạn đã tương tác." ? Tôi có nên ping phát sóng (192.168.110.255) trước và nhận phản hồi từ mọi thiết bị và sau đó sử dụng arp để nhận danh sách đầy đủ vì tôi chỉ tương tác / ping tất cả thiết bị?
Weishi Zeng

10

Giả sử tất cả các máy khác nằm trong cùng một miền quảng bá như máy mà bạn có quyền truy cập, việc ping địa chỉ quảng bá thường sẽ đủ. Nó sẽ không tìm thấy các máy đang ngủ, cũng không phải các máy được cấu hình để không phản hồi với ping, cũng không phải các máy sẽ phản hồi ping nhưng không phát 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

Phản hồi đầu tiên và cuối cùng sẽ luôn luôn là máy cục bộ của bạn. Các (DUP!)phản hồi là từ các máy khác (mặc dù ví dụ này cũng cho thấy một số máy phản hồi với chính địa chỉ quảng bá, điều này không hữu ích lắm).

Bạn cũng có thể thử địa chỉ phát sóng tất cả những người:

% 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

Ví dụ này cho thấy ít hành trình hơn. Tất cả (DUP!)các máy là các máy khác và máy cục bộ dễ dàng được xác định là 127.0.0.1.


8

Tất cả máy Mac của bạn đều có tên máy chủ nên bạn không cần biết địa chỉ IP. Thay vào đó, bạn sẽ chỉ sử dụng tên máy chủ.

Tên máy chủ được dựa trên bất kỳ tên nào bạn đã đặt cho máy tính. Vì vậy, nếu máy tính được đặt tên là "Jon's Mac" thì tên máy chủ bạn sẽ sử dụng là "jons-mac.local".

$ ssh jons-mac.local

Nếu bạn chưa biết tên máy chủ của máy tính thì bạn có thể tìm tên máy chủ của máy tính trong tùy chọn chia sẻ trên máy tính đó hoặc bạn có thể tìm tên máy chủ của các máy tính khác trên mạng bằng lệnh dns-sd. Lệnh này sử dụng Bonjour để cho phép bạn duyệt các dịch vụ mạng; bạn sẽ chỉ tìm thấy các máy tính thực sự đang quảng cáo một số dịch vụ mạng (mà, nói chung, là những máy tính duy nhất bạn quan tâm).

Nếu bạn muốn kết nối với một số máy tính cung cấp ssh, bạn có thể tìm thấy các máy tính có sẵn bằng cách sử dụng:

dns-sd -B _ssh._tcp .

Nói chung, bạn có thể tìm kiếm các máy chủ cung cấp dịch vụ cụ thể bằng tên dịch vụ: http://www.dns-sd.org/ServiceTypes.html

Giao thức Bonjour cũng cung cấp khả năng duyệt cho tất cả các dịch vụ, không chỉ các dịch vụ cụ thể. Bạn có thể làm điều này bằng cách duyệt tìm dịch vụ đặc biệt_services._dns-sd._udp

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

Câu hỏi là hỏi về việc tìm các máy tính khác trên mạng từ dòng lệnh, nhưng bạn cũng có thể duyệt các dịch vụ được quảng cáo dns-sd trong GUI. Ví dụ: Terminal.app> Kết nối từ xa mới ... sẽ hiển thị một cửa sổ hiển thị các dịch vụ ssh, sftp, ftp và telnet được quảng cáo.


Làm thế nào nhanh chóng bạn có thể mong đợi lệnh này dns-sd -B _ssh._tcp .sẽ chạy để chạy?
AJP

1
@AJP Nếu có bất kỳ dịch vụ ssh nào được quảng cáo, nó sẽ bắt đầu trả về kết quả ngay lập tức. Nhưng nếu 'kết thúc', bạn có nghĩa là thoát, nó không thoát; lệnh chạy một truy vấn tồn tại lâu và đầu ra thay đổi liên tục khi các dịch vụ xuất hiện và biến mất khỏi mạng cho đến khi bạn giết nó.
bames53

7

Bạn có thể thử sử dụng dns-sdđể thực hiện các truy vấn Bonjour trên mạng LAN.


3
Tôi thích câu trả lời này là dành riêng cho OS X và nối vào bonjour để tránh nhận thêm chi tiết mạng mà tôi không quan tâm (trong bối cảnh của câu hỏi này). Lệnh cụ thể phù hợp với nhu cầu của tôi là:dns-sd -B _ssh._tcp .
stevenhaddox

6

Có thể đó là một chút quá mức nhưng bạn có thể sử dụng nmap


1
Trong khi điều này có thể trả lời câu hỏi, nó sẽ là một câu trả lời tốt hơn nếu bạn có thể cung cấp một số lời giải thích tại sao nó làm như vậy.
DavidPostill

4

Một CLI nhanh chóng một lớp để bước qua / 24 mạng con ping mỗi địa chỉ IP. Nhanh chóng và loại bẩn, nhưng nó hoạt động.

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

Giải thích: Để thay đổi phạm vi, thay đổi x = 1 thành x = 130 hoặc bất cứ điều gì bạn muốn bắt đầu và 254 đến cuối, giả sử 135.

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

ping -c 3 là gửi ba ping. Để thay đổi số lượng ping thay đổi 3 thành một số khác và để thay đổi phạm vi địa chỉ, hãy thay đổi 192.168.0 thành một số khác.

do ping -c 30 10.10.0.$x;

1
bạn chỉ có thể sử dụng fping để làm điều này:fping -ag 172.16.0.0/16
ɾɾǝʞ

Đây là bất cứ điều gì nhưng nhanh chóng, đối với tôi ...
Max Williams

Đó là một giải pháp nhanh chóng và bẩn thỉu. Như trong, nó nhanh chóng thực hiện trong trường hợp không có các công cụ chính xác như nmap và nó không hoạt động như các công cụ chính xác, như nmap. Máy chủ Ping có thể mất một lúc khi chúng không phản hồi và vì điều này không phải là đa luồng, nên sẽ mất một lúc khi máy chủ không phản hồi. Về mặt tích cực, nó không yêu cầu gì ngoài bash.
quinnr

2

Nếu bạn biết tên của các máy tính khác trong mạng LAN, cách đơn giản nhất là ping chúng:

$ 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

Điều này có thể phụ thuộc vào bộ định tuyến hoặc máy chủ DHCP cục bộ của bạn. Nếu tên máy chủ trống không hoạt động, hãy thử nối thêm .local (nghĩa là ping hostname.local ).

Rõ ràng điều này không hoạt động tốt cho mạng LAN lớn hoặc những người có trí nhớ kém.


1

Nếu bạn đang sử dụng máy Mac, (giả sử 10,5 trở lên,) chỉ cần bật VNC để truy cập máy tính để bàn và sử dụng Flame.app.

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

Đó là một tiện ích nhỏ thực sự tốt đẹp cung cấp cho bạn chính xác những gì bạn cần, thực sự nhanh chóng. Điều duy nhất là bạn sẽ phải đi xa hơn SSH.


1

Cho cửa sổ:

1) Viết: cho / L% I trong (1,1.254) DO ping -w 30 -n 1 168,29.0.% I Điều này sẽ ping tất cả các địa chỉ trong mạng cục bộ của bạn

2) Sau đó viết: arp -a Điều này sẽ cung cấp cho bạn tất cả các địa chỉ đã trả lời


Tất nhiên nó phụ thuộc vào địa chỉ mạng cục bộ của bạn. Trong trường hợp của tôi, nó là 168,29.0.xxx. Bạn có thể là một cái gì đó như 192.168.0.xxx
Chavdar

1
Câu trả lời của bạn dựa trên Windows trong khi OP cho biết anh ta đang sử dụng máy Mac. Bạn có thể chỉnh sửa câu hỏi của mình để đưa câu hỏi này vào tài khoản hoặc trạng thái nếu giải pháp của bạn sẽ hoạt động trên máy Mac.
Matthew Williams

Mọi người dùng MAC đều có HĐH Windows ngồi xung quanh ... Bạn không thể sống mà không có nó ...: D
user2173353
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.