Chơi game với Wifi trên ESP32

Chơi game với Wifi trên ESP32

Điều khiến tôi nảy ra ý tưởng tạo ra một công cụ bỏ túi để phân tích mạng WiFi là bài viết này.

Cảm ơn họ vì ý tưởng này. Tôi chỉ không có gì để làm.

Tất cả công việc được thực hiện như một phần sở thích nhằm mục đích giải trí và mở rộng kiến ​​thức của tôi trong lĩnh vực công nghệ mạng. Chậm rãi, 1 giờ một tuần, kể từ đầu năm nay.
Tôi không có kế hoạch sử dụng thực tế. Những thứ kia. Đây KHÔNG phải là công cụ của hacker.

Hiện tại, tất cả các chức năng theo kế hoạch đang hoạt động. Tất cả các nguồn, hoàn toàn sẵn sàng để lắp ráp, đăng ở đây. Ngoài ra còn có hướng dẫn lắp ráp, v.v. Trong lưu ý này, tôi sẽ không sao chép thông tin đã đăng trên github. Tôi sẽ chỉ cho bạn biết những gì tôi cho là cần thiết để mô tả riêng.

Ý kiến ​​của tôi về “dụng cụ đa năng” và lý do chọn ESP32

Tôi không khẳng định đó là sự thật. Mọi người đều có cái riêng của họ. Tôi sẽ cố gắng biện minh cho sự lựa chọn phần cứng của mình.

Đề xuất trong bài viết trường hợp sử dụng kết hợp Linux (ban đầu là Raspberry Pi) + “thiết bị ngoại vi” dưới dạng bộ điều khiển (STM32) + CC1110 (lõi 8051) và kế hoạch nhồi nhét mọi thứ có thể vào đó (125kHz, NFC, 433mHz, USB, iButton, bluetooth,?) có vẻ không phù hợp với tôi. Tuy nhiên, dự án này Có vẻ như nó sẽ vẫn ở chế độ riêng tư và đóng cửa (flipper-zero github “Tổ chức này không có kho lưu trữ công cộng.”) và hướng tới phần cứng không phổ biến lắm.

Có lẽ tôi đã sai và trong tương lai các tác giả sẽ công khai các nguồn phần mềm. Nhưng nếu không thì tôi sẽ không mua một phần cứng như vậy nếu không có mã nguồn.

Yêu cầu của tôi đối với "công cụ"

Hộp phải nhỏ (càng nhỏ càng tốt).

Do đó:

  • Không cần pin tích hợp. Với dòng điện > 100 mA khi làm việc với Wifi, pin tích hợp sẽ lớn hoặc không dùng được lâu. Vì vậy, hãy để “chiếc hộp” được cấp điện bằng cục sạc dự phòng tiêu chuẩn. Dù sao thì tôi luôn có sẵn một cục sạc dự phòng trong túi/xe hơi của mình.
  • Giữ một “chiếc hộp” Linux với các công cụ bên trong, được viết trong nhiều năm bằng mọi thứ tiếng Với một màn hình nhỏ và một bộ nút điều khiển ít ỏi thì điều đó thật vô nghĩa. Kết quả có thể được xem/xử lý trên máy tính xách tay bình thường có bàn phím và màn hình đầy đủ.
  • Các thành phần phải dễ dàng truy cập và được biết đến rộng rãi (SDK có sẵn, nhiều ví dụ và tài liệu).

Kết quả là đối với tôi, sự lựa chọn là hiển nhiên - ESP32.

Đối với tất cả các nhiệm vụ được nêu trong bài viết khiến tôi phải hành động, khả năng của ESP32 là khá đủ. Mặc dù điều tôi vẫn muốn làm nhất là:

  • Chơi xung quanh với Bluetooth.
  • Chơi xung quanh dải tần 433mHz với phần cứng đơn giản nhất (chỉ điều chế biên độ, đủ cho nhu cầu thực tế).

Bay trong thuốc mỡ trong ESP32

  • SDK ESP32 (IDF) hơi vụng về.
  • Một số chức năng (ví dụ: ngăn xếp WiFi) không có mã nguồn ở dạng thư viện tĩnh được lắp ráp.
  • Băng tần 5GHz không được hỗ trợ và có một số hạn chế cũng như sự vụng về khi làm việc với WiFi.

Nhưng giá/kích thước hoàn toàn bù đắp được những thiếu sót này.

Chức năng phần mềm chính

Tôi sẽ mô tả ngắn gọn chức năng và ý kiến ​​của tôi về...

Quản lý cài đặt và tải tệp lên từ SD

Tất cả các điều khiển bên ngoài được thực hiện thông qua một trang Web đơn giản, được khởi chạy trong một mục menu riêng biệt. ESP32 khởi động ở chế độ WiFi AP và hiển thị một trang ở địa chỉ IP cố định.

Mặc dù lõi ESP32 khá nhanh nhưng như các thử nghiệm đã chỉ ra, hoạt động đồng thời của dịch vụ Web tích hợp và chế độ bộ định tuyến không tương thích lắm. Do đó, không có điều khiển động và trang không khả dụng ở tất cả các chế độ khác.
Hơn nữa, điều khiển động không cần thiết cho mục đích nghiên cứu.

Phương thức làm việc với gói Beacon

Các chế độ đều tầm thường và không thú vị lắm. Được tạo ra “bởi vì nó có thể.” Để kiểm tra.
Có những ví dụ trong ví dụ chính thức của Espressif.

Chế độ quét danh sách AP.
Trên thực tế, bất kỳ điện thoại thông minh nào cũng có thể làm được điều này.
Chà, ở chế độ này, danh sách AP sẽ được lưu lại.
Kẻ gửi thư rác Beacon.
ESP32 khởi động dưới dạng AP có SSID ẩn và MAC ngẫu nhiên và bắt đầu gửi [khung đèn hiệu] theo danh sách SSID được tạo trước (được tạo thủ công hoặc thu được trước đó bằng cách quét danh sách AP)

Chế độ đánh hơi gói WiFi

Các nhà phát triển Espressif đã bổ sung thêm khả năng cho phần mềm ứng dụng nhận tất cả các gói WiFi “bay trong không trung” thông qua chức năng gọi lại. Thực ra không phải tất cả, vì bạn chỉ có thể đặt chế độ cho một kênh cố định.

Các hạn chế về thời gian rất nghiêm ngặt được áp dụng khi xử lý chức năng gọi lại. Nếu điều này không gây ra vấn đề cho chế độ thu thập số liệu thống kê đơn giản, thì đối với chế độ ghi tệp PCAP trên thẻ SD, tôi phải mày mò, sắp xếp bản ghi thông qua hàng đợi trong bộ nhớ và các ngữ nghĩa. Có tính đến điểm đặc biệt là quy trình gọi lại chạy trên một lõi và quy trình ghi vào SD ở lõi khác.

Trong “không khí ồn ào”, một số gói bị mất (không còn chỗ trong hàng đợi và chúng bị loại bỏ), nhưng với “không khí” điển hình của một căn hộ vào buổi tối (5 AP trong tầm nhìn), ghi vào PCAP được hoàn thành mà không bị mất gói.

Ngoài ra, để giám sát và ghi PCAP, có chế độ lọc dựa trên danh sách MAC trong tiêu đề gói.

Ví dụ: bạn có thể theo dõi diện mạo của một người trong câu lạc bộ/quán cà phê trước khi anh ta bước vào hoặc xuất hiện trong tầm mắt. Rất ít người tắt WiFi và tự động kết nối với các AP đã biết. (Tôi sẽ tắt nó bây giờ ..)

Xem lưu lượng truy cập được ghi lại trong Wireshark mang tính giáo dục và thú vị để hiểu bản đồ - tất cả đều hoạt động.

Chế độ làm việc với các gói deauth

Theo mặc định, việc gửi các gói này bị cấm trong thư viện libnet80211.a, không có nguồn. Nhưng thật dễ dàng để khắc phục bằng cách điều chỉnh một vài chi tiết. Lúc đầu tôi nghi ngờ liệu có đáng để đăng bản vá hay không. Nhưng sau khi đi dạo quanh những nơi khác nhau với chế độ quét khung hủy xác thực được bật, tôi nghĩ: "cái quái gì vậy." Hơn nữa, trong Esp8266, việc phân phối các gói này không bị đóng và có các tập hợp trên github cho Esp8266.

Ở nhiều nơi (tôi sẽ không nói ở đâu) việc ngăn chặn các AP không mong muốn thông qua phương pháp này được sử dụng. Và đây không phải là "những kẻ bắt nạt"...

Và tôi cũng ngạc nhiên khi việc phân phối Internet từ điện thoại của tôi không hoạt động ở một số nơi...

Chế độ theo dõi số lượng và RSSI của các gói như vậy rất hữu ích để hiểu “điểm mà các AP bên trái không thích”.

chế độ bộ định tuyến

Tính năng này có lẽ là tính năng thú vị nhất để khám phá.

ESP32 hỗ trợ hoạt động đồng thời ở chế độ STA + SoftAP. Do đó, bạn có thể triển khai bộ định tuyến NAT cổ điển trên đó.

Để hỗ trợ ngăn xếp mạng, Espressif sử dụng một nhánh (hầu như không thay đổi) của thư viện lwip.

Tuy nhiên, theo mặc định, trong bản dựng tiêu chuẩn, thư viện Esp-lwip không cung cấp khả năng chuyển tiếp giữa giao diện netif 'ap' (SoftAP) và 'st' (STA).

Tất nhiên, bạn có thể làm điều đó mà không cần NAT, nhưng có một vấn đề xảy ra với việc kết nối đồng thời hai hoặc nhiều STA với giao diện “ap” và đồng bộ hóa địa chỉ IP từ giao diện mạng “st” với “ap”. Vì vậy, những khó khăn không đáng có và mọi việc trở nên dễ dàng hơn thông qua NAT.

Hơn nữa, có một nhánh đặc biệt của martin-ger, bổ sung thêm cách triển khai NAT đơn giản cho IP4.

Mặc dù tay tôi rất muốn làm lại nó hoàn toàn về mặt thẩm mỹ (theo ý kiến ​​​​của tôi, việc làm lại nó sẽ dễ dàng hơn nếu không có sự phân nhánh của dự án, nhưng thông qua LWIPHOOK các chức năng được xác định trong quá trình lắp ráp), nhưng sự lười biếng chiếm ưu thế và tùy chọn từ martin-ger vẫn được sử dụng.

Ở chế độ bộ định tuyến, lưu lượng IP4 đến và đi sẽ được xem.

Cụ thể, phần sau đây được trích xuất từ ​​nó để hiển thị trên màn hình và thu thập số liệu thống kê vào một tệp:

  • Tên thiết bị đã kết nối với SoftAP ESP32 (gói DHCP)
  • URL từ các yêu cầu DNS (cổng UDP 53) từ thiết bị được kết nối với SoftAP ESP32.

Ngoài ra, bạn có thể kích hoạt ghi lưu lượng truy cập vào tệp PCAP.

Chế độ này rất hữu ích, chẳng hạn như để hiểu những gì điện thoại của bạn gửi tới mạng và nó sẽ đi đâu.

Bạn có thể nghĩ ra những cách khác để sử dụng chế độ này, có tính đến khả năng kiểm soát hoàn toàn lưu lượng đến và đi của softAP ESP32 ở cấp giao diện mạng: Ehernet header (destMAC[6]+srcMAC[6]+type[2]) + tải trọng (loại IP4, IP6, DCHP, v.v.).

Về nguyên tắc, ESP32 hoạt động khá tốt với chức năng bộ định tuyến WiFi->WiFi, truyền qua lưu lượng truy cập bình thường mà không có bất kỳ độ trễ đặc biệt nào. Về mặt chủ quan, độ trễ trong điện thoại được kết nối qua bộ định tuyến trên ESP32 là không đáng kể.

Thật không may, API Espressif không có khả năng đặt bộ lọc cho MAC được kết nối với SoftAP EPS32. Thay vào đó, chúng tôi đề xuất nói “tạm biệt” (esp_wifi_deauth_sta) với các STA đã kết nối “không mong muốn”.

Việc lọc theo MAC cho các STA được kết nối phải được thực hiện thông qua lệnh gọi Esp_wifi_deauth_sta()

Kết luận

Mặc dù tôi không nghĩ ra điều gì mới trong khuôn khổ làm việc với ESP32, nhưng có lẽ kết quả (mã nguồn) sẽ khiến ai đó quan tâm.

Tôi muốn lưu ý rằng mã này được viết chỉ nhằm mục đích giáo dục. Đối với việc “hack”, v.v., nó được cố tình thực hiện không mấy thuận tiện.

Tôi không làm bảng mạch in vì phải mất 1.5-2 giờ để hàn những chiếc khăn thành phẩm bằng dây.

Và nếu có, bạn cần phải lắp ráp nó không phải từ các tấm ván làm sẵn mà từ các bộ phận riêng lẻ. Khi đó kích thước sẽ còn nhỏ hơn nữa.

Nguồn: www.habr.com

Thêm một lời nhận xét