Mundarija:

OpenWrt routeringizga masofadan kirish uchun Android/iOS ilovasi: 11 qadam
OpenWrt routeringizga masofadan kirish uchun Android/iOS ilovasi: 11 qadam

Video: OpenWrt routeringizga masofadan kirish uchun Android/iOS ilovasi: 11 qadam

Video: OpenWrt routeringizga masofadan kirish uchun Android/iOS ilovasi: 11 qadam
Video: Netgear R6120 AC1200 Router Firmware Upgrade Step by Step Tutorial 2024, Noyabr
Anonim
OpenWrt routeringizga masofadan kirish uchun Android/iOS ilovasi
OpenWrt routeringizga masofadan kirish uchun Android/iOS ilovasi
OpenWrt routeringizga masofadan kirish uchun Android/iOS ilovasi
OpenWrt routeringizga masofadan kirish uchun Android/iOS ilovasi

Men yaqinda yangi yo'riqnoma sotib oldim (Xiaomi Mi Router 3G). Va, albatta, bu yangi, ajoyib uskuna meni ushbu loyihada ishlashga ilhomlantirdi;)

1 -qadam: Menimcha, sizda OpenWrt allaqachon mavjud …

Menimcha, sizda allaqachon OpenWrt bor …
Menimcha, sizda allaqachon OpenWrt bor …

Men avval OpenWrt-ni o'rnatishim kerak edi … Ko'pincha men ushbu yo'riqchiga amal qildim (https://dzone.com/articles/hacking-into-xiaomi-mi-…) Ishlayotganda men bu ajoyib videoni topdim.: Openwrt o'rnatilishi, WiFi ko'rsatkichi, Qiz do'sti miltillaydi. Voy men juda kulib yubordim!:)

Diqqat! OpenWrt -ni o'rnatish yo'riqchingizni g'ishtlashi mumkin. Lekin tugallangach, u to'liq quvvat va boshqaruvni ochadi. Men bu erda ko'rsatma berishga jur'at etolmayman, chunki ular har bir yo'riqnoma modeli uchun boshqacha bo'lishi mumkin.

Ammo, agar sizda yo'riqchingizda OpenWrt o'rnatilgan bo'lsa, siz ushbu darslikni notime -da boshlashingiz mumkin

BTW, ba'zi rivojlanish platalari OpenWrt bilan birga keladi, masalan, Onion Omega, VoCore, LinkIt Smart 7688 va boshqalar. Ushbu qo'llanmada, shuningdek, bunday ilovalarni yaratishning ba'zi asosiy g'oyalari tushuntiriladi, shuning uchun siz uni Raspberry Pi va shunga o'xshashlar bilan ishlashga osongina moslashtira olasiz.

Ushbu loyiha uchun men asosan oldindan o'rnatilgan dasturlardan foydalanaman (OpenWrt-ni yoqadigan har qanday yo'riqchida mavjud). Ammo ba'zi rivojlangan funktsiyalar uchun men qo'shimcha paketlarni o'rnatishim kerak edi. Bu bir necha marta bosish bilan amalga oshiriladi, shuning uchun men bu erda ko'rsatmalarni qo'shaman.

Bundan tashqari, siz allaqachon bilasiz deb o'ylayman:

  • OpenWrt routerida SSH terminalini qanday ochish/ishlatish
  • Routerga fayllarni qanday yuklash/tahrirlash (FileZilla yoki scp/sftp dan foydalaning)
  • Linux konsoli bilan qanday ishlash kerak

2 -qadam: dasturiy ta'minot va asboblar

Dasturlar va asboblar
Dasturlar va asboblar

Smartfon tomonida men Blynkdan foydalanayapman. U iOS va Android ilovalarini har qanday uskunani boshqarish uchun taqdim etadi. Smartfoningizda vidjetlarni sudrab tashlab, barcha loyihalaringiz uchun chiroyli grafik interfeyslarni osongina qurishingiz mumkin. Blynk asosan Arduino, Raspberry Pi va boshqalar bilan ishlatiladi. Lekin nega uni yo'riqnoma ustida ishlatmaslik kerak?;)

Qurilma tomonida men kerakli funktsiyalarni skript qilish uchun Lua -dan foydalanaman, men Python yoki Node.js -dan ham foydalanishim mumkin edi, lekin afsuski, ba'zi marshrutizatorlarda resurslar etishmasligi tufayli bu variantlar har doim ham mavjud emas. u bilan ishlash unchalik qulay emas (har bir o'zgarish uchun qayta kompilyatsiya qilish va hokazo) Boshqa tomondan, Lua oldindan o'rnatilgan, ishlatish va o'rganish oson. U standart veb -interfeys LuCI tomonidan ishlatiladi.

3 -qadam: Minimal ilovani yaratish

Blynk va Lua bilan ishlashni boshlash juda oson:

  • Blynk ilovasini yuklab oling (App Store, Google Play)
  • Yangi loyiha yarating va avtorizatsiya tokenini oling
  • OpenWrt uchun Blynk Lua o'rnatish ko'rsatmalariga amal qiling.

Router konsoliga kirish uchun SSH -dan foydalaning. Standart misolni ishga tushirgandan so'ng:

lua./examples/client.lua

Biz shunga o'xshash narsani ko'rishimiz kerak:

Ulanmoqda…

SSL qo'l siqish… tayyor.

Bu shuni anglatadiki, ilovaga xavfsiz, ikki tomonlama aloqa o'rnatildi! YAY!

Endi biz berilgan misolni osonlikcha kengaytira olamiz, shuning uchun u qiziqarli ish qiladi. Men uni tahrir qilish uchun ushbu misolning nusxasini yaratdim:

cp./examples/client.lua./blynkmon.lua

4 -qadam: Ma'lumot qo'shish: mijozlar soni, WAN IP -manzili, ish vaqti

Asosiy fikr - vaqti -vaqti bilan OSdan ma'lumot olish, agar kerak bo'lsa, oddiy hisoblarni bajarish va natijani ko'rsatish uchun Blynk -ga yuborish.

Linux/OpenWrt -da bizda tizim ma'lumotlarini olishning bir necha usullari mavjud:

  • Buyruqni bajaring va chiqadigan matnni tahlil qiling
  • Buyruqni bajaring va u qaytadigan chiqish kodini ko'ring
  • /Proc/va/sys/class/kataloglarida joylashgan tizim faylini o'qing

Endi ulangan qurilmalar sonini ko'rsatmoqchiman.

Men konsolda cat/proc/net/arp -ni ishga tushirganimda, u MAC va IP -manzillari bilan birga ma'lum qurilmalar ro'yxatini chiqaradi:

IP manzili HW turi Bayroqlar HW manzili niqobli qurilma

192.168.10.206 0x1 0x2 78: 02: f8: fb: d6: bf * br-lan 194.---------- 0x1 0x2 4c: 5e: 0c: 14: e0: 5c * eth0.2 192.168.10.162 0x1 0x0 04: b1: 67: 2f: e3: 74 * br-lan

Biz uni to'g'ridan -to'g'ri Lua -da tahlil qilishimiz mumkin, lekin ko'pincha maxsus yordamchi dasturlardan foydalanish osonroq. Linuxda bu grep, head, tail, cut, wc, awk.

Arp chiqishidan mijozlar sonini olish uchun men jadvalni filtrlashim kerak (bog'liq bo'lmagan elementlarni olib tashlash) va jadval satrlarini hisoblashim kerak, natijada quyidagi buyruq paydo bo'ladi:

mushuk/proc/net/arp | grep br-lan | grep 0x2 | wc -l

Keling, sinab ko'raylik:

root@router: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l

1

Ajoyib. Endi biz barcha kerakli ma'lumotlarni qanday yig'ishimiz mumkinligi haqida tasavvurga egamiz. Kodni toza va kengaytiradigan qilish uchun yordamchi funktsiyalarni yarataylik:

exec_out funktsiyasi (cmd)

mahalliy fayl = io.popen (cmd), agar fayl bo'lmasa, nil end local output = file: read ('*all') file: close () print ("Run:"..cmd.. " ->"..) chiqish) chiqishni tugatish funktsiyasini qaytaradi "..path.." -> "..content) kontentning oxiri qaytadi

Ushbu yordamchi dasturlardan foydalanib, biz hozir ma'lumotlarni yig'ish funktsiyalarini amalga oshirishimiz mumkin:

getArpClients () funktsiyasi

tonumberni qaytarish (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) getUptime () qaytish tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1) } "")) tugatish funktsiyasi getWanIP () qaytish exec_out ("ifconfig eth0.2 | grep 'inet addr:' | cut -d: -f2 | awk '{print $ 1}'") oxiri

Siz bu qobiq buyruqlarining bir qismini ishga tushirishingiz, uning qanday ishlashini chuqurroq tushunishingiz va uni ehtiyojlaringizga moslashtirishingiz mumkin.

Eng oson qismi - ma'lumotlarni Blynk ilovasiga yuborish. Odatiy misol, har 5 soniyada bir necha kodni ishlaydigan taymerni o'rnatadi, shuning uchun biz uni qayta ishlatamiz:

mahalliy tmr1 = Taymer: yangi {interval = 5000, func = function ()

blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) end}

Ilovada biz 3 ta yorliqli vidjet qo'shamiz va ularni mos ravishda Virtual Pins 10, 11, 12 ga belgilaymiz.

Bu ishlayotgan bo'lsa -da, bu juda samarasiz, chunki WAN IP yoki mijozlar soni tez -tez yangilanmaydi. Buni tuzataylik

WAN IP uchun biz uni ulangan ishlovchiga o'tkazamiz. Router har safar Blynk Cloud -ga ulanganida ishlaydi. Bu etarli bo'lishi kerak:

blynk: yoqilgan ("ulangan", function ()

chop etish ("Tayyor.") blynk: virtualWrite (12, getWanIP ()) oxiri)

Ish vaqti va mijozlar soni uchun biz 5 daqiqali alohida taymer yaratamiz. interval:

mahalliy tmr2 = Taymer: yangi {interval = 5*60*1000, func = function ()

blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) oxiri}

5 -qadam: WiFi nazorati: ON/OFF

WiFi nazorati: ON/OFF
WiFi nazorati: ON/OFF

Hozircha biz qurilmadan faqat ba'zi ma'lumotlarni olgandik, uni boshqarishga harakat qilaylik!

blynk: yoqilgan ("V20", funktsiya (parametr)

agar param [1] == "1" bo'lsa, u holda os.execute ("wifi yuqoriga"), boshqa os.execute ("Wi -Fi pastga") oxiri)

Ilova tomonida men tugmachali vidjetni qo'shdim (rejim: o'tish) va uni V20 ga tayinladim.

Bo'ldi shu. Ajoyib.

6 -qadam: tizim statistikasi jadvali

Tizim statistikasi jadvali
Tizim statistikasi jadvali
Tizim statistikasi jadvali
Tizim statistikasi jadvali

getCpuLoad () funktsiyasi

tonumberni qaytarish (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) getRamUsage () qaytish tonumber (exec_out ("bepul | grep Mem | awk") {chop etish ($ 3- $ 7)/$ 2 * 100.0} '")) oxiri

Shuningdek, biz ma'lumotlarni Blynk -ga yuborishimiz kerak (yana tmr1 dan foydalanamiz):

mahalliy tmr1 = Taymer: yangi {interval = 5000, func = function ()

blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}

Ilova tomonida SuperChart vidjetini qo'shing. CPU, RAM ma'lumot oqimlarini qo'shing va V5, V6 ga tayinlang.

7 -qadam: HDD aylanish holati

Mening yo'riqnoma tashqi HDD diskini tarmoqqa biriktirilgan saqlash qurilmasi sifatida ulangan, bu disk kimdir unga kirganda aylanishni boshlashi va tanaffusdan keyin to'xtatilishi uchun tuzilgan.

Shubhasiz, kun davomida necha marta yoqilishini bilish juda yaxshi bo'lardi. Shunday qilib, men tizim jadvaliga boshqa ma'lumotlar oqimini qo'shdim.

HDD drayveri maqomini olish biroz qiyinroq, lekin men yo'l topdim! Birinchidan, SSH konsolidan smartmontools -ni o'rnating:

opkg yangilanishi

opkg smartmontools -ni o'rnating

Keyin, bizning kodimizda maxsus buyruqni bajarish va chiqish kodini tekshirish kerak:

exec_ret funktsiyasi (cmd)

mahalliy chiqish = os.execute (cmd) chop etish ("Ishga tushirish:"..cmd.. " -> chiqish:".. chiqish) chiqish tugash funktsiyasini qaytarish getHddSpinning () agar exec_ret ("smartctl --nocheck = kutish --info /dev/sda>/dev/null ") == 0 keyin 1 -ni qaytaring, boshqasi 0 -oxirini qaytaradi

Eslatma: mening qattiq diskim /dev /sda

8 -qadam: Tarmoq faolligi jadvali

Tarmoq faolligi jadvali
Tarmoq faolligi jadvali

Biz boshqa SuperChart vidjetini (avvalgisiga o'xshash) yaratamiz, TX va RX ma'lumotlar oqimlarini qo'shamiz va V1 va V2 ga tayinlaymiz.

Yordamchi vazifalari:

getWanRxBytes () funktsiyasi

tonumberni qaytarish (read_file ("/sys/class/net/eth0.2/statistika/rx_bytes")) getWanTxBytes () funktsiyasini qaytarish ()) oxiri

Keyin, xuddi shu tmr1 ga bir nechta kod qo'shing. Bu murakkabroq, chunki biz faqat uzatilgan/qabul qilingan baytlardagi farqni hisoblashimiz va ko'rsatishimiz kerak:

mahalliy prevTx, prevRx

local tmr1 = Timer: new {interval = 5000, func = function () local tx = getWanTxBytes () local rx = getWanRxBytes () if prevTx and prevTx ~ = tx then blynk: virtualWrite (1, tx - prevTx) end prevRx va prevRx ~ = rx keyin blynk: virtualWrite (2, rx - prevRx) end prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrSp (7, getHr))) oxiri}

9 -qadam: Bildirishnomalar

Bildirishnomalar
Bildirishnomalar

Menga yo'riqnoma kuchsiz yoki internet aloqasi uzilganida ham xabar berishni xohlardim, buning uchun bizga bildirishnoma vidjeti kerak.

Vidjet sozlamalarida "oflayn xabarnoma" ni yoqing. Hech qanday kod kerak emas. Ammo biz o'z kodimizdan maxsus bildirishnomalarni yuborishimiz mumkin.

10 -qadam: Orqa fonda avtomatik ishga tushirish

Hozircha skript qo'lda bajarilishi kerak, lekin men yo'riqnoma yoqilganda uni avtomatik ravishda fonda ishlashini xohlayman.

Bu xizmat yaratish orqali amalga oshiriladi. /Etc/init.d/blynkmon faylini yarating:

#!/bin/sh /etc/rc.common

START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; keyin echo "blynkmon allaqachon ishlayapti" chiqish 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; keyin echo "blynkmon ishlamayapti" chiqish 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}

Eslatma: auth-token-ni almashtirishni unutmang

Keyin blynkmon xizmatini yoqing:

blynkmon xizmatini yoqish

11 -qadam: Xulosa va boshqa fikrlar

Xulosa va boshqa fikrlar
Xulosa va boshqa fikrlar

Blynk loyihasining klonini olish uchun siz ushbu QR -ni skanerlashingiz mumkin, chunki u ko'plab vidjetlardan foydalangani uchun ba'zi energiya nuqtalarini (4600) talab qiladi!

Bu erda Full Lua kodini toping:

Hozircha juda yaxshi, lekin men yaqin kelajakda qo'shmoqchi bo'lgan ba'zi fikrlar.

  • Qayta yuklash buyrug'ini qo'shing. Tasodifan bosishni oldini oling.
  • Har qanday Linux buyrug'ini bajarish uchun Terminal vidjetini qo'shing.
  • CPU harorati jadvalini qo'shing.

    UPD: Afsuski, hozirda OpenWrt -da yo'riqnoma modeli uchun ba'zi drayverlar yo'q. Ammo bu boshqa ko'plab yo'riqnoma uchun mavjud

  • Ma'lum bir qurilma tarmoqqa qo'shilganda yoki undan chiqib ketganda bildirishnoma qo'shing. Bizda arp ma'lumoti bor, endi faqat MAC manzilini tekshiring.

Shunday qilib, biz 3D printerlar, robotlar, oddiy kompyuter/noutbuk, Arduino/ESP8266/ESP32/RaspberryPi, Smart Home qurilmalari va deyarli hamma narsani kuzatib, nazorat qila olamiz. Boshqa qiziqarli fikrlaringiz bo'lsa, menga ayting. Bularning barchasi haqida nima deb o'ylaysiz?

Tavsiya: