2008-09-17 31 views

Trả lời

11

Bạn cần ARP. Thư viện chuẩn của Python không bao gồm bất kỳ mã nào cho điều đó, vì vậy bạn cần phải gọi một chương trình bên ngoài (hệ điều hành của bạn có thể có tiện ích 'arp') hoặc bạn cần tự xây dựng các gói (có thể với một công cụ như Scapy.

1

Tôi không nghĩ rằng có một cách tích hợp để lấy nó từ chính Python.

Câu hỏi của tôi là, làm cách nào để bạn nhận được thông tin IP từ mạng của mình?

Để lấy từ máy cục bộ, bạn có thể phân tích cú pháp ifconfig (unix) hoặc ipconfig (windows) với ít khó khăn.

0

Tùy thuộc vào nền tảng của bạn Nếu bạn đang sử dụng * nix, bạn có thể sử dụng lệnh 'arp' để tra cứu địa chỉ mac cho địa chỉ IP (giả định IPv4). Nếu điều đó không hiệu quả, bạn có thể ping địa chỉ và sau đó xem, hoặc nếu bạn có quyền truy cập vào mạng thô (sử dụng BPF hoặc một số cơ chế khác), bạn có thể gửi các gói ARP của riêng bạn (nhưng đó có thể là quá mức cần thiết)

1

Nếu bạn muốn một giải pháp Python thuần túy, bạn có thể xem Scapy để gói các gói (bạn cần phải gửi yêu cầu ARP và kiểm tra trả lời). nếu bạn không nhớ gọi chương trình bên ngoài, bạn có thể sử dụng arping (trên các hệ thống Un * x, tôi không biết về Windows tương đương).

1

Dường như không có cách nào để làm điều này bằng Python. Đặt cược tốt nhất của bạn là phân tích đầu ra của "ipconfig/all" trên Windows hoặc "ifconfig" trên Linux. Xem xét sử dụng os.popen() với một số regexps.

0

Bạn muốn phân tích đầu ra của 'arp', nhưng bộ đệm ARP hạt nhân sẽ chỉ chứa các địa chỉ IP đó nếu các máy chủ đó đã liên lạc với máy chủ nơi tập lệnh Python đang chạy.

ifconfig có thể được sử dụng để hiển thị địa chỉ MAC của giao diện cục bộ, nhưng không thể sử dụng địa chỉ MAC trên mạng LAN.

0

Đánh dấu Pilgrim mô tả cách thực hiện điều này trên Windows cho máy hiện tại bằng mô-đun Netbios here. Bạn có thể lấy mô-đun Netbios như là một phần của gói Win32 có sẵn tại python.org. Thật không may tại thời điểm này tôi không thể tìm thấy tài liệu trên mô-đun.

-1

như trăn không có nghĩa là để đối phó với các vấn đề hệ điều hành cụ thể (đó là nghĩa vụ phải được giải thích và đa nền tảng), tôi sẽ thực hiện một lệnh bên ngoài để làm như vậy:

trong unix lệnh là ifconfig

nếu bạn thực hiện nó như là một ống bạn sẽ có được kết quả mong muốn:

import os 
myPipe = os.popen2("/sbin/ifconfig","a") 
print(myPipe[1].read()) 
+0

Python có các mô-đun dành riêng cho hệ điều hành, vì vậy tôi nghĩ rằng bạn trả lời là gây hiểu lầm. Cách pythonic để xử lý này sẽ là một mô-đun để có một giao diện độc lập hệ điều hành có thể được phụ phân loại bởi các plugin cụ thể của hệ điều hành. – Walter

2

This article, "Gửi tay crafted Ethernet Khung bằng Python (ARP ví dụ)", có vẻ là chính xác những gì bạn đang tìm kiếm.

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