Mündəricat:

OpenWrt Routerinizə Uzaqdan Giriş üçün Android/iOS Tətbiqi: 11 Addım
OpenWrt Routerinizə Uzaqdan Giriş üçün Android/iOS Tətbiqi: 11 Addım

Video: OpenWrt Routerinizə Uzaqdan Giriş üçün Android/iOS Tətbiqi: 11 Addım

Video: OpenWrt Routerinizə Uzaqdan Giriş üçün Android/iOS Tətbiqi: 11 Addım
Video: Netgear R6120 AC1200 Router Firmware Upgrade Step by Step Tutorial 2024, Iyun
Anonim
OpenWrt Routerinizə Uzaqdan daxil olmaq üçün Android/iOS Tətbiqi
OpenWrt Routerinizə Uzaqdan daxil olmaq üçün Android/iOS Tətbiqi
OpenWrt Routerinizə Uzaqdan daxil olmaq üçün Android/iOS Tətbiqi
OpenWrt Routerinizə Uzaqdan daxil olmaq üçün Android/iOS Tətbiqi

Bu yaxınlarda yeni bir yönləndirici aldım (Xiaomi Mi Router 3G). Əlbəttə ki, bu yeni, zəhmli aparat məni bu layihə üzərində işləməyə ilhamlandırdı;)

Addım 1: Hesab edirəm ki, artıq OpenWrt -ə sahibsiniz …

Güman edirəm ki, artıq OpenWrt -ə sahibsiniz …
Güman edirəm ki, artıq OpenWrt -ə sahibsiniz …

Əvvəlcə OpenWrt-i qurmalı idim … Əsasən bu təlimatı izlədim (bu yönləndirici modelinə xasdır): https://dzone.com/articles/hacking-into-xiaomi-mi-… Bunun üzərində işləyərkən bu zəhmli videonu tapdım: Openwrt quraşdırılması, WiFi kriteriyası, Qız yoldaşının yanıp sönməsi. Vay o qədər güldüm ki!:)

Diqqət! OpenWrt -in quraşdırılması marşrutlaşdırıcınızı kərpicləndirə bilər. Ancaq tamamlandıqdan sonra tam güc və nəzarəti açar. Hər bir yönlendirici modeli üçün fərqli ola biləcəyi üçün burada heç bir təlimat verməyə cəsarətim çatmır.

Routerinizdə artıq OpenWrt varsa, bu dərsdən notime ilə başlaya bilərsiniz

BTW, bəzi inkişaf lövhələri, Onion Omega, VoCore, LinkIt Smart 7688 və digərləri kimi OpenWrt ilə birlikdə gəlir. Bu təlimat, bu cür tətbiqlər yaratmağın arxasındakı bəzi əsas fikirləri də izah edir, buna görə də Raspberry Pi və bənzərləri ilə işləməyə asanlıqla uyğunlaşdıra bilərsiniz.

Bu layihə üçün əsasən əvvəlcədən quraşdırılmış proqramlardan istifadə edəcəyəm (hər hansı bir OpenWrt aktiv routerdə mövcuddur). Ancaq bəzi inkişaf etmiş funksiyalar üçün əlavə paketlər quraşdırmalı oldum. Bu bir neçə kliklə edilir, buna görə təlimatları bura daxil edəcəyəm.

Həm də güman edirəm ki, artıq bilirsiniz:

  • OpenWrt yönlendiricinize SSH terminalını necə açmaq/istifadə etmək olar
  • Routerinizə faylları necə yükləmək/redaktə etmək olar (FileZilla və ya scp/sftp istifadə edin)
  • Linux konsolu ilə necə işləmək olar

Addım 2: Proqram və Alətlər

Proqram və Alətlər
Proqram və Alətlər

Smartfon tərəfində Blynk istifadə edirəm. Hər hansı bir cihazı idarə etmək üçün iOS və Android tətbiqləri təmin edir. Smartfonunuzda widgetları sürükləyərək ataraq bütün layihələriniz üçün asanlıqla gözəl qrafik interfeyslər qura bilərsiniz. Blynk əsasən Arduino, Raspberry Pi və s. İlə birlikdə istifadə olunur. Amma niyə marşrutlaşdırıcının özündə işləmir?;)

Cihaz tərəfində ehtiyac duyulan funksiyanı yazmaq üçün Lua -dan istifadə edəcəyəm. Python və ya Node.js -dən də istifadə edə bilərdim, amma təəssüf ki, bəzi marşrutlaşdırıcılarda resursların olmaması səbəbindən bu variantlar həmişə mövcud olmur. Və ya C/C ++, amma işləmək o qədər də rahat deyil (hər dəyişiklik üçün yenidən tərtib etmək və s.) Digər tərəfdən, Lua əvvəlcədən quraşdırılmışdır, istifadəsi və öyrənilməsi sadədir. Varsayılan veb interfeysi LuCI tərəfindən istifadə olunur.

Addım 3: Minimal Tətbiq Yarat

Blynk və Lua ilə işə başlamaq çox asandır:

  • Blynk Tətbiqini yükləyin (App Store, Google Play -dən)
  • Yeni bir layihə yaradın və Doğrulama Tokenini əldə edin
  • OpenWrt üçün Blynk Lua quraşdırma təlimatlarına əməl edin.

Router konsolunuza daxil olmaq üçün SSH istifadə edin. Varsayılan nümunəni işlədikdən sonra:

lua./ misallar/müştəri.lua

Bənzər bir şey görməliyik:

Qoşulur…

SSL əl sıxışması… Hazırdır.

Bu, tətbiqə etibarlı, iki yönlü bir əlaqə qurulduğunu göstərir! YAY!

İndi verilən nümunəni asanlıqla uzada bilərik, buna görə maraqlı bir şey edir. Düzəltmək üçün bu nümunənin bir nüsxəsini yaratdım:

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

Addım 4: Bəzi məlumatlar əlavə edin: Müştəri sayı, WAN IP ünvanı, İş vaxtı

Əsas fikir, OS -dən məlumatları vaxtaşırı almaq, lazım olduqda bir neçə sadə hesablama aparmaq və nəticəni göstərmək üçün Blynk -ə göndərməkdir.

Linux/OpenWrt -də sistem məlumatlarını əldə etməyin bir neçə yolu var:

  • Bir əmri işlədin və çıxardığı mətni təhlil edin
  • Bir əmr işlədin və geri döndüyü çıxış kodunu izləyin
  • /Proc/və/sys/class/dizinlərində yerləşən bir sistem faylını oxuyun

İndi bağlı cihazların sayını göstərmək istəyirəm.

Konsolda cat/proc/net/arp işlədərkən, MAC və IP ünvanları ilə birlikdə tanınmış cihazların siyahısını çıxarır:

IP ünvanı HW növü Bayraqlar HW ünvanı Mask Cihazı

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

Bunu birbaşa Lua -da təhlil edə bilərik, lakin xüsusi yardım proqramlarından istifadə etmək çox vaxt daha asandır. Linux -da bunlar grep, head, tail, cut, wc, awk -dir.

Müştəri sayını arp çıxışından əldə etmək üçün cədvəli süzgəcdən keçirməliyəm (əlaqəsiz maddələri sil) və aşağıdakı satırla nəticələnən cədvəl satırlarını saymalıyam:

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

Gəlin sınayaq:

kök@yönləndirici: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l

1

Əla. İndi bütün lazımi məlumatları necə toplaya biləcəyimizi başa düşürük. Kodumuzu təmiz və genişləndirmək üçün bəzi köməkçi funksiyalar yaradaq:

exec_out funksiyası (cmd)

local file = io.popen (cmd) fayl deyilsə, nil end local output = file: read ('*all') file: close () print ("Run:"..cmd.. " ->".. çıxış) çıxış sonu funksiyasını qaytarın read_file (yol) yerli fayl = io.open (yol, "rb") fayl deyilsə, nil son yerli məzmun = fayl: "*a" faylını oxuyun: close () çap ("Oxu: "..yol.." -> ".. məzmun) məzmun sonunu qaytarın

Bu yardım proqramlarından istifadə edərək, indi faktiki məlumat gətirmə funksiyalarını həyata keçirə bilərik:

getArpClients funksiyası ()

geri tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) son funksiyası getUptime () tonumber qaytar (exec_out ("cat/proc/uptime | awk '{print $ 1) } '")) son funksiyası getWanIP () qaytar exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end

Bunun necə işlədiyini daha yaxşı başa düşmək və ehtiyaclarınıza uyğunlaşdırmaq üçün bu qabıq əmrlərinin bir hissəsini işlədə bilərsiniz.

Ən asan hissəsi məlumatları Blynk Tətbiqinə göndərməkdir. Varsayılan nümunə, hər 5 saniyədə bir kod işlədən taymer qurur, buna görə yenidən istifadə edirik:

yerli tmr1 = Zamanlayıcı: yeni {interval = 5000, func = funksiya ()

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

Tətbiqdə 3 etiket vidceti əlavə edirik və onları müvafiq olaraq Virtual Pins 10, 11, 12 -ə təyin edirik.

Bu işləyərkən WAN IP və ya müştəri sayı o qədər də tez -tez yeniləmədiyi üçün olduqca səmərəsizdir

WAN IP üçün onu əlaqəli idarəçiyə köçürürük. Router Blynk Cloud ilə əlaqə quranda hər dəfə işləyəcək. Bu kifayət etməlidir:

blynk: on ("bağlı", funksiya ()

print ("Hazırdır.") blynk: virtualWrite (12, getWanIP ()) sonu)

Uptime və Müştəri Nömrələri üçün 5 dəqiqəlik ayrı bir taymer yaradırıq. interval:

local tmr2 = Zamanlayıcı: yeni {interval = 5*60*1000, func = funksiya ()

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

Addım 5: WiFi İdarəetmə: ON/OFF

WiFi İdarəetmə: ON/OFF
WiFi İdarəetmə: ON/OFF

İndiyə qədər cihazdan yalnız bəzi məlumatlar alırdıq. Nəzarət etməyə çalışaq!

blynk: açıq ("V20", funksiya (parametr)

əgər param [1] == "1", onda os.execute ("wifi yuxarı") başqa os.execute ("wifi aşağı") sonu)

Tətbiq tərəfində bir Düymə vidceti əlavə etdim (rejim: Keçid) və V20 -yə təyin etdim.

Bu belədir. İnanılmaz.

Addım 6: Sistem Statistikası Cədvəli

Sistem Statistikası Cədvəli
Sistem Statistikası Cədvəli
Sistem Statistikası Cədvəli
Sistem Statistikası Cədvəli

getCpuLoad () funksiyası

tonumber qaytarın (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) son funksiyası getRamUsage () tonumber qaytarın (exec_out ("pulsuz | grep Mem | awk '') {çap ($ 3- $ 7)/$ 2 * 100.0} '")) son

Məlumatları da Blynk -ə göndərməliyik (yenidən tmr1 istifadə edək):

local tmr1 = Zamanlayıcı: yeni {interval = 5000, func = funksiya ()

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

Tətbiq tərəfində SuperChart vidceti əlavə edin. CPU, RAM məlumat axınlarını əlavə edin və V5, V6 -ya təyin edin.

Addım 7: HDD Dönmə Vəziyyəti

Marşrutlaşdırıcımda Şəbəkəyə Bağlı Yaddaş Cihazı olaraq bağlanan xarici bir HDD sürücüsü var. Məsələ burasındadır ki, bu sürücü kimsə ona daxil olduqda fırlanmağa başlayacaq və zaman aşımından sonra dayandıracaq.

Gün ərzində neçə dəfə açıldığını bilmək çox gözəl olardı. Beləliklə, sistem qrafikimə başqa bir məlumat axını əlavə etdim.

HDD sürücüsünün statusunu əldə etmək bir az çətindir, amma bir yol tapdım! Əvvəlcə SSH konsolundan smartmontools quraşdırın:

opkg yeniləməsi

opkg smartmontools quraşdırın

Sonra kodumuzda xüsusi bir əmr işə salmalı və çıxış kodunu yoxlamalıyıq:

exec_ret funksiyası (cmd)

local exit = os.execute (cmd) print ("Run:"..cmd.. " -> exit:".. exit) return end end function getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info") /dev/sda>/dev/null ") == 0 sonra 1 geri qayıdın, 0 geri qayıdın 0 son

Qeyd: HDD /dev /sda

Addım 8: Şəbəkə Aktivliyi Qrafiki

Şəbəkə Aktivliyi Qrafiki
Şəbəkə Aktivliyi Qrafiki

Başqa bir SuperChart vidjeti yaradırıq (əvvəlkisinə bənzər), TX və RX məlumat axınlarını əlavə edirik və V1 və V2 -yə təyin edirik. Qeyd: WAN port statcini göstərmək istəyirəm və WAN portum eth0.2

Köməkçi funksiyaları:

getWanRxBytes funksiyası ()

tonu qaytar) son

Sonra, eyni tmr1 -ə bir neçə kod əlavə edin. Bu daha mürəkkəbdir, çünki yalnız ötürülən/alınan baytlar arasındakı fərqi hesablamalı və göstərməliyik:

yerli 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) prevRx və prevRx ~ = rx sonra blynk: virtualWrite (2, rx - prevRx) son prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrSpinning (7, getHedH))) son}

Addım 9: Bildirişlər

Bildirişlər
Bildirişlər

Routerim güc və ya internet bağlantısı kəsildikdə də xəbərdar olmaq istədim. Bunun üçün Bildiriş widgetına ehtiyacımız var.

Widget ayarlarında "offline bildiriş" i aktiv edin. Heç bir kod lazım deyil. Ancaq kodumuzdan xüsusi bildirişlər də göndərə bilərik.

Addım 10: Arxa planda avtomatik işə salın

Hələlik skript əl ilə icra edilməlidir, ancaq router işə salındıqda avtomatik olaraq arxa planda işləməsini təmin etmək istəyirəm.

Bu xidmət yaratmaqla edilir. Bir fayl yaradın /etc/init.d/blynkmon:

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

START = 99 DUR = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; sonra "blynkmon artıq işləyir" echo 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; sonra echo "blynkmon işləmir" çıxışı 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}

Qeyd: auth-tokeninizi dəyişdirməyi unutmayın

Sonra, blynkmon xidmətini aktiv edin:

blynkmon xidmətini aktiv edin

Addım 11: Nəticə və Əlavə Fikirlər

Nəticə və Əlavə Fikirlər
Nəticə və Əlavə Fikirlər

Blynk Layihəmin klonunu əldə etmək üçün bu QR -i skan edə bilərsiniz. Bir çox widget istifadə etdiyi üçün bəzi enerji nöqtələri (4600) tələb edir!

Tam Lua kodunu burada tapın:

İndiyə qədər çox yaxşıdır, amma yaxın gələcəkdə əlavə etmək istədiyim fikirlər var.

  • Yenidən başladın əmrini əlavə edin. Təsadüfən tıklamağın qarşısını alın.
  • İstənilən linux əmrini yerinə yetirmək üçün Terminal vidceti əlavə edin.
  • CPU temperatur cədvəli əlavə edin.

    UPD: Təəssüf ki, OpenWrt -də hazırda router modelim üçün bəzi sürücülər yoxdur. Ancaq bir çox digər marşrutlaşdırıcılar üçün mövcuddur

  • Müəyyən bir cihaz şəbəkəyə qoşulduqda/ayrıldıqda bildiriş əlavə edin. Artıq arp məlumatımız var, indi yalnız MAC ünvanını yoxlayın.

Bu şəkildə, 3D Yazıcıları, Robotları, adi bir PC/Laptopu, Arduino/ESP8266/ESP32/RaspberryPi materiallarını, Ağıllı Ev cihazlarını və ətrafdakı hər şeyi izləyə və idarə edə bilərik. Başqa maraqlı fikirləriniz varsa mənə bildirin. Bütün bunlar haqqında nə düşünürsünüz?

Tövsiyə: