2010-10-26 51 views
5

Làm cách nào để nhận tất cả địa chỉ IP và tên máy chủ lưu trữ được kết hợp trong mạng LAN?Danh sách tất cả các máy chủ trên mạng LAN

+0

Nền tảng (OS) của bạn là gì? Bạn có muốn C++ hoặc Cocoa? –

+0

@Steve: Nền tảng của tôi là Mac OS X 10.6 và nhà phát triển ca cao. Nhưng, tôi đang sử dụng giao thức RFB. Và tôi phải sử dụng những giao thức được viết bằng ngôn ngữ C/C++. – boom

+0

Vì vậy, một giải pháp C/C++ trên OS X sẽ làm việc cho bạn? –

Trả lời

0

Để có danh sách giao diện và địa chỉ IP, hãy sử dụng getifaddrs().

Tìm kiếm các giao diện với ifa_addr->sa_family == AF_INET

Địa chỉ IP là trong sin_addr.s_addr.

Sau đó, bạn có thể sử dụng gethostbyaddr() để tra cứu tên DNS cho địa chỉ IP đó.

Cập nhật:

Nó được chỉ ra cho tôi rằng OP có lẽ hỏi về khám phá máy chủ khác, chứ không phải là địa chỉ của giao diện trên máy cục bộ.

Không có cách nào đáng tin cậy để khám phá các máy khác trên mạng cục bộ, nhưng có một vài thủ thuật.

  • Phương thức ping (hoặc tương đương chương trình) để ping địa chỉ quảng bá cục bộ, sau đó xem người trả lời. Địa chỉ quảng bá có thể được tìm thấy bằng cách liệt kê các giao diện như được hiển thị ở trên. Tôi tin rằng ICMP không yêu cầu quyền truy cập root trong OSX. Lưu ý rằng nhiều hệ thống có thể bị vô hiệu hóa hoặc tường lửa ICMP, vì vậy bạn sẽ chỉ nhận được phản hồi từ những người không ẩn.

  • Phương thức ARP: Kiểm tra bộ nhớ cache ARP của hệ thống để xem địa chỉ IP nào đã hoạt động gần đây. Điều này sẽ chỉ hiển thị các hệ thống có gói phát sóng trên cùng một phân đoạn mạng trong vài phút gần đây.

Cả hai phương pháp đều có thể bị chặn bởi tường lửa, bộ định tuyến và chuyển mạch, vì vậy đường viền chính xác của "LAN" có thể khá hẹp. Cả hai phương pháp có thể được thực hiện theo chương trình, nhưng nó có thể đơn giản và dễ dàng hơn để chỉ cần gọi ra lệnh dòng lệnh ping hoặc arp.

+0

Câu hỏi có vẻ giống như tác giả muốn liệt kê tất cả các máy chủ khác nhau trên mạng LAN chứ không chỉ thông tin về các liên kết lưu trữ của máy chủ hiện tại. – jdizzle

+0

Có lẽ. Tôi thấy bây giờ câu hỏi ban đầu không phải là nền tảng cụ thể, vì vậy bạn có thể đúng. –

Các vấn đề liên quan