Cần một cách để lấy Địa chỉ MAC từ Bộ định tuyến của tôi cho một dự án Nhà của Ai


11

Loại dự án này đã được thực hiện với Bluetooth trước đây, nhưng phạm vi 30 feet và mức tiêu thụ pin thêm khiến tôi chỉ muốn ping bộ định tuyến thay vì điện thoại của mọi người. Tôi biết rằng các bộ định tuyến theo dõi địa chỉ MAC duy nhất cho mỗi thiết bị. Tôi đã hy vọng đăng ký từng địa chỉ điện thoại và nhờ PI kiểm tra định kỳ bộ định tuyến để cập nhật trang web động để hiển thị ai là nhà.

Tôi muốn biết liệu có cách nào hợp lý để lấy thông tin này với PI không.


Còn wifi (ping tên điện thoại thay thế) thì sao?
user236012

2
Bạn cũng có thể gán địa chỉ IP tĩnh từ bộ định tuyến, sau đó sử dụng nmap và địa chỉ IP để xác định thiết bị.
ArtOfCode

Tôi đã làm một cái gì đó tương tự trong C # trên Windows tại đây: stackoverflow.com/questions/2567107/ Khăn - Tôi rất vui lòng gửi cho bạn mã phiên bản gần đây nhất nếu bạn muốn. Tôi không biết C # hữu ích như thế nào trên Raspberry Pi, nhưng nó sẽ chỉ cho bạn đi đúng hướng. Nó đáng tin cậy phát hiện ra rằng tôi đang ở nhà trước khi tôi vào nhà để xe.
Aric TenEyck

Tôi nắm bắt thông tin này + nhiều thông tin hơn bằng cách đặt tập lệnh bash trên bộ định tuyến đăng kết quả vào máy chủ web mỗi phút. Với hệ thống này, tôi giám sát và quản lý thời gian hoạt động của internet, các máy khách được kết nối, IP của mạng LAN, suy giảm chất lượng và ngân sách năng lượng, dịch vụ VOIP, mật khẩu wifi, v.v.
EDP

1
Quét màn hình trên bộ định tuyến? Bạn cũng có thể nâng cấp lên bộ định tuyến dựa trên Linux (openwrt) và chỉ cần đăng nhập và tìm trong bộ đệm arp.
Thorbjørn Ravn Andersen

Câu trả lời:


6

Điều đó là có thể. Tôi đề nghị bạn cung cấp cho tập lệnh của bạn thông tin đăng nhập và đọc trang hiển thị thông tin. Sau đó, bạn có thể phân tích nội dung của nó và điền vào một mảng với dữ liệu bạn muốn. Vì các trang này đôi khi chứa nhiều thông tin hơn như ngày và thời gian bạn có thể tạo một nhật ký thực sự tốt đẹp.

Đây là một ví dụ nhanh về cách tôi sẽ tiến hành;

Trên trang của bộ định tuyến của bạn, bạn có thể tìm thấy một cái gì đó như sau;

<div id="flex">
 <div id="dm-name">
  name : Your_device_name
 </div>
 <div id="dm-ip">
  IP : 192.168.x.xxx
 </div>
 <div id="dm-mac">
  <span>MAC:D4:04:CD:FE:5A:17</span>
 </div>
</div>

Vì vậy, chúng tôi biết rằng mọi thiết bị sẽ được liệt kê như vậy. Và rằng tất cả các địa chỉ MAC sẽ có cùng độ dài.

Kịch bản có thể là một cái gì đó như thế;

var string_to_parse = "file read from router.html";
cursor = 0;  // The position of your cursor;
i =0;
    while(cursor > 0){

    begin_at = string_to_parse.indeOf('MAC:');
    end_at = length_of_Mac; // this is standard for al mac

    mac[i] = string_to_parse.substring(begin_at, begin_at + end_at);
    cursor = begin_at + end_at;
i++;
    }

Mã này sẽ cần điều chỉnh nhưng ý tưởng là có. Đây là một vòng lặp sẽ chạy tất cả các tệp để tìm tất cả các địa chỉ Mac. cho đến khi nó đạt đến cuối của tập tin


Đây là những gì tôi sẽ làm. Nó có thêm phần thưởng phát hiện nếu bộ định tuyến của bạn đã chết.
slebetman

1
+1 cào trang web là một lựa chọn thú vị. Tôi hơi khó chịu Tôi đã không nghĩ về bản thân mình.
Jacobm001

@MadeInDreams Trang bộ định tuyến mà bạn giới thiệu là trang cho thuê bộ định tuyến DHCP? Hoặc có một trang kết nối hoạt động bộ định tuyến?
Chetan Bhargava

Phụ thuộc vào bộ định tuyến của bạn nhưng hầu hết trong số họ có một trang liệt kê tất cả các thiết bị được kết nối. Ví dụ này là từ trang chính mạng của tôi
MadeInDreams

6

Để theo dõi các địa chỉ mac duy nhất trên Raspberry Pi của bạn, bạn cần một công cụ (chứ không phải dịch vụ) được gọi là arpwatch . Tôi đã sử dụng arpwatch trên BSD rộng rãi và nó ghi lại tất cả các yêu cầu arp và rarp vào syslog.

Từ Syslog, bạn có thể phân tích ngày, giờ và địa chỉ mac.

ARP hoạt động và bảng chỉ tồn tại trên mạng vật lý (từ kỹ thuật: miền va chạm). Khi một gói rời khỏi một mạng khác, địa chỉ mac nguồn được thay thế bằng địa chỉ mac của bộ định tuyến.

arpLệnh chạy trên Raspberry Pi sẽ chỉ liệt kê các địa chỉ mac + IP của các máy chủ đã giao dịch (giao tiếp IP) với máy chủ lưu trữ lệnh được chạy (Raspberry Pi). Nó sẽ không liệt kê địa chỉ mac của các máy chủ khác trên mạng.

Một cách nâng cao khác là sử dụng nmap trên Raspberry Pi của bạn để thực hiện khám phá máy chủ. Bạn có thể sử dụng nmap -sPđể ping tất cả các máy chủ trên mạng. Nó sẽ cho bạn biết địa chỉ IP của tất cả các máy chủ hoạt động trên mạng của bạn. Sau đó, bạn có thể chạy lệnh arp để tìm ra mac của người đang hoạt động.

chetan@Linux:~$ nmap -sP 192.168.100.0/24

Starting Nmap 6.40 ( http://nmap.org ) at 2016-02-23 16:08 PST
Nmap scan report for 192.168.100.4
Host is up (0.0087s latency).
Nmap scan report for 192.168.100.58
Host is up (0.0024s latency).
Nmap scan report for 192.168.100.160
Host is up (0.049s latency).
Nmap scan report for 192.168.100.164
Host is up (0.063s latency).
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.68 seconds

1
Tôi nghĩ rằng đây có lẽ là một phương pháp mạnh mẽ và linh hoạt hơn nhiều so với phương pháp quét web. Trên nhiều bộ định tuyến do ISP phát hành, trang được cho là hiển thị các thiết bị được kết nối w / thông tin sẽ không đáng tin cậy.
goldilocks

@goldilocks +1, vâng, tôi đã nghĩ về nó sau khi tôi nêu lên câu trả lời được chấp nhận. Tôi giả sử họ có một bộ định tuyến có một trang cho các kết nối hoạt động (trạng thái SPI hoặc tương tự). Bộ định tuyến đẹp họ có.
Chetan Bhargava

4

Tôi vừa mới chơi xung quanh với phiên bản dòng lệnh của ngón tay . Nó thực hiện công việc tốt là tìm mọi thứ trên mạng và phun ra các tệp CSV có chứa:

  • địa chỉ IP
  • Tên tùy chỉnh của nút (nếu bạn đã gán tên tùy chỉnh trong tệp .properations)
  • Trạng thái (LÊN / XUỐNG)
  • Dấu thời gian của thay đổi cuối cùng
  • Tên máy chủ (nếu bạn đã bật DNS)
  • Địa chỉ phần cứng (nếu bạn đang khám phá một mạng cục bộ)
  • Nhà cung cấp phần cứng

Theo các câu trả lời trước đó, một số thao tác văn bản sẽ là cần thiết để đưa nội dung của CSV lên trang web và hãy cẩn thận những gì bạn xuất bản ra bên ngoài.

Tôi đã sử dụng phiên bản Android khá nhiều và nó hoạt động tốt trong việc tìm kiếm mọi thứ trên mạng gia đình của tôi (và loại thú vị để chơi với wifi công cộng).


3

Lệnh arpsẽ cung cấp cho bạn một danh sách các thiết bị được kết nối với mạng. Bạn sẽ cần phải thực hiện một số thao tác chuỗi cơ bản để có được dữ liệu bạn muốn, nhưng điều đó chắc chắn sẽ dễ dàng hơn là cố gắng tự lấy thông tin.

Chức năng lưu ý :

Một số bộ định tuyến chặn loại chức năng này theo mặc định và của bạn có thể được cấu hình như vậy. Nếu nó không hoạt động, hãy tìm hiểu kỹ tài liệu của nó một chút để kiểm tra cách cho phép nó.

LƯU Ý BẢO MẬT :

Có một số ý nghĩa bảo mật rất nghiêm trọng của việc có một trang web hiển thị những người hiện đang ở nhà. Vui lòng suy nghĩ rất kỹ về bảo mật tại chỗ và liệu nó có đủ tốt cho các rủi ro liên quan hay không.


Ý tưởng tốt, tôi đoán tôi rút bình luận trước đây của tôi.
Ghanima

1
Có một vài cảnh báo thú vị về việc sử dụng arp cho việc này ở đây . Họ đề nghị rằng các thiết bị có thể không hiển thị nếu chúng chưa gửi bất kỳ gói tin nào đến thiết bị chạy arp và ping có thể là cần thiết.
goobering

@goobering +1. chỉ cần chạy lệnh arp sẽ không liệt kê tất cả các máy chủ hoạt động trên mạng. Arpwatch sẽ ghi lại tất cả các gói arp trên mạng.
Chetan Bhargava

1

Có thể làm, và những người khác đã đề xuất một số phương pháp tốt. Tôi đã viết một kịch bản python vài năm trước để sàng lọc thông tin này từ một bộ định tuyến mạng và ném nó lên github. Nó có thể được tìm thấy ở đây . Thật là thô thiển, và nhìn vào nó bây giờ tôi sẽ làm lại nó một cách khác đi, nhưng nó hoạt động với mục đích chính xác giống như bạn sau một vài năm cho đến khi tôi chuyển đi.


+1 Kịch bản của bạn chắc chắn có thể được cải thiện, nhưng đó là một giải pháp tuyệt vời cho vấn đề.
Jacobm001
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.