INHOUDSOPGAWE:
- Stap 1: Ek neem aan dat u reeds OpenWrt het …
- Stap 2: Sagteware en gereedskap
- Stap 3: Skep 'n minimale app
- Stap 4: Voeg inligting by: aantal kliënte, WAN IP -adres, uptime
- Stap 5: WiFi -beheer: AAN/UIT
- Stap 6: Stelselstatistiekkaart
- Stap 7: HDD -draaistatus
- Stap 8: Netwerkaktiwiteitskaart
- Stap 9: Kennisgewings
- Stap 10: outomaties in die agtergrond uitgevoer
- Stap 11: Gevolgtrekking en verdere idees
Video: Android/iOS -program om op afstand toegang tot u OpenWrt -router te kry: 11 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
Ek het onlangs 'n nuwe router (Xiaomi Mi Router 3G) gekoop. En natuurlik het hierdie nuwe, wonderlike stuk hardeware my geïnspireer om aan hierdie projek te begin werk;)
Stap 1: Ek neem aan dat u reeds OpenWrt het …
Ek moes eers OpenWrt installeer … Meestal het ek hierdie gids gevolg (spesifiek vir hierdie routermodel): https://dzone.com/articles/hacking-into-xiaomi-mi-… Terwyl ek hieraan werk, het ek hierdie wonderlike video gevind: Openwrt -installasie, WiFi -maatstaf, Girlfriend Flashing. Wow ek het so gelag!:)
Aandag! Deur OpenWrt te installeer, kan u router 'n skerp steek kry. Maar sodra dit voltooi is, ontsluit dit volle krag en beheer. Ek is nie dapper genoeg om hier instruksies te gee nie, aangesien dit vir elke router -model kan verskil.
Maar as u reeds OpenWrt op u router het, kan u binnekort met hierdie tutoriaal begin
BTW, sommige ontwikkelingsborde bevat OpenWrt out-of-the-box, soos Onion Omega, VoCore, LinkIt Smart 7688 en ander. Hierdie handleiding verduidelik ook 'n paar basiese idees agter die skep van sulke programme, sodat u dit maklik kan aanpas by Raspberry Pi en dies meer.
Vir hierdie projek gebruik ek meestal vooraf geïnstalleerde sagteware (beskikbaar op enige OpenWrt-geaktiveerde router). Maar vir 'n paar gevorderde funksies, moes ek ekstra pakkette installeer. Dit word met net 'n paar klik gedoen, so ek sal die instruksies hier insluit.
Ek neem ook aan dat u reeds weet:
- Hoe u SSH -terminale op u OpenWrt -router kan oopmaak/gebruik
- Hoe om lêers op u router op te laai/te wysig (gebruik FileZilla of scp/sftp)
- Hoe om met Linux -konsole te werk
Stap 2: Sagteware en gereedskap
Aan die slimfoonkant gebruik ek Blynk. Dit bied iOS- en Android -programme om hardeware te beheer. U kan maklik pragtige grafiese koppelvlakke vir al u projekte bou deur eenvoudig widgets op u slimfoon te sleep en neer te sit. Blynk word meestal saam met Arduino, Raspberry Pi, ens. Gebruik, maar waarom loop u dit nie op die router self nie?;)
Aan die kant van die toestel sal ek Lua gebruik om die nodige funksies op te stel. Ek kan ook Python of Node.js gebruik, maar ongelukkig is hierdie opsies nie altyd beskikbaar nie, weens gebrek aan hulpbronne op sommige routers. Of C/C ++, maar dit is nie so gerieflik om mee te werk nie (herkompileer vir elke verandering, ens.) Aan die ander kant is Lua vooraf geïnstalleer, maklik om te gebruik en te leer. Dit word gebruik deur die standaard webkoppelvlak, LuCI.
Stap 3: Skep 'n minimale app
Om met Blynk en Lua te begin, is so maklik soos:
- Laai die Blynk -app af (van App Store, Google Play)
- Skep 'n nuwe projek en kry die Auth Token
- Volg die Blynk Lua -installasie -instruksies vir OpenWrt.
Gebruik SSH om toegang tot u router -konsole te verkry. Nadat u die standaardvoorbeeld uitgevoer het:
lua./examples/client.lua
Ons behoort so iets te sien:
Koppel tans …
SSL -handdruk … Gereed.
Dit beteken dat die veilige, tweerigtingverbinding met die app tot stand is gebring! YAY!
Ons kan die gegewe voorbeeld nou maklik uitbrei, sodat dit iets interessants doen. Ek het 'n afskrif van hierdie voorbeeld geskep om dit te wysig:
cp./examples/client.lua./blynkmon.lua
Stap 4: Voeg inligting by: aantal kliënte, WAN IP -adres, uptime
Die basiese idee is om die inligting gereeld van die bedryfstelsel af te kry, indien nodig 'n paar eenvoudige berekeninge uit te voer en dan die resultaat na Blynk te stuur vir vertoning.
In Linux/OpenWrt het ons verskillende maniere om die stelseldata te kry:
- Voer 'n opdrag uit en ontleed die teks wat dit uitvoer
- Voer 'n opdrag uit en kyk na die uitgangskode wat dit teruggee
- Lees 'n stelsellêer in/proc/en/sys/class/directories
Nou wil ek die aantal gekoppelde toestelle vertoon.
As ek cat/proc/net/arp op die konsole gebruik, gee dit die lys van bekende toestelle saam met hul MAC- en IP -adresse weer:
IP -adres HW -tipe Vlae HW -adres Maskerapparaat
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
Ons kan dit direk in Lua ontleed, maar dit is dikwels makliker om gespesialiseerde hulpmiddels te gebruik. Op Linux is dit grep, kop, stert, sny, wc, awk.
Om die aantal kliënte uit arp -uitvoer te kry, moet ek die tabel filtreer (onverwante items verwyder) en die tabelrye tel, wat die volgende opdrag tot gevolg het:
kat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Kom ons probeer dit:
root@router: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Groot. Ons kry nou die idee hoe ons al die vereiste inligting kan versamel. Laat ons dit outomatiseer. Om ons kode skoon en uitbreidbaar te maak, laat ons 'n paar helperfunksies skep:
funksie exec_out (cmd)
local file = io.popen (cmd) indien nie lêer nie, stuur dan nul end local output = file: read ('*all') file: close () print ("Run:"..cmd.. " ->".. output) return output output function read_file (path) local file = io.open (path, "rb") if not file then return nil end local content = file: read "*a" file: close () print ("Read: "..pad.." -> "..inhoud) gee inhoud terug
Deur hierdie hulpmiddels te gebruik, kan ons nou die werklike data -ophaalfunksies implementeer:
funksie getArpClients ()
retoer tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) eindfunksie getUptime () return tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) eindfunksie getWanIP () terugkeer exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") einde
U kan dele van hierdie dopopdragte uitvoer, om 'n dieper begrip te kry van hoe dit werk en dit aan te pas by u behoeftes.
Die maklikste deel is om die data na die Blynk -app te stuur. Die standaardvoorbeeld stel reeds die timer in, wat elke 5 sekondes 'n kode gebruik, sodat ons dit net hergebruik:
plaaslike tmr1 = Timer: nuwe {interval = 5000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) end}
In die app voeg ons 3 etiket -widgets by en ken dit daarvolgens toe aan Virtual Pins 10, 11, 12.
Alhoewel dit werk, is dit nogal ondoeltreffend, aangesien WAN IP of die aantal kliënte nie so gereeld opdateer nie. Laat ons dit regstel
Vir WAN IP, skuif ons dit na die gekoppelde hanteerder. Dit word uitgevoer elke keer as die router 'n verbinding met Blynk Cloud tot stand bring. Dit behoort voldoende te wees:
blynk: aan ("verbind", funksie ()
print ("Gereed.") blynk: virtualWrite (12, getWanIP ()) einde)
Vir uptyd en klante -nommer, skep ons 'n aparte timer met 5 minute. interval:
plaaslike tmr2 = Timer: nuwe {interval = 5*60*1000, func = funksie ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) end}
Stap 5: WiFi -beheer: AAN/UIT
Tot dusver het ons slegs inligting van die toestel gekry, maar probeer dit beheer!
blynk: aan ("V20", funksie (param)
as param [1] == "1" dan os.execute ("wifi up") anders os.execute ("wifi down") einde einde)
Aan die app -kant het ek net 'n knoppie -widget (modus: skakelaar) bygevoeg en dit aan V20 toegeken.
Dis dit. Ongelooflik.
Stap 6: Stelselstatistiekkaart
funksie getCpuLoad ()
retoer tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'"))) eindfunksie getRamUsage () return tonumber (exec_out ("free | grep Mem | awk ' {print ($ 3- $ 7)/$ 2 * 100.0} '")) eindig
Ons moet ook die data na Blynk stuur (laat ons weer tmr1 gebruik):
plaaslike tmr1 = Timer: nuwe {interval = 5000, func = function ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}
Voeg aan die kant van die app 'n SuperChart -widget by. Voeg CPU, RAM -datastrome by en ken toe aan V5, V6.
Stap 7: HDD -draaistatus
My router het 'n eksterne HDD -skyf wat gekoppel is as 'n netwerkaangeslote bergingstoestel. Die ding is dat hierdie skyf gekonfigureer is om te begin draai wanneer iemand toegang daartoe kry, en om op te skort na 'n time -out.
Dit is duidelik dat dit gaaf sou wees om te weet hoeveel keer dit gedurende 'n dag aangeskakel word. Ek het dus nog 'n datastroom by my stelselkaart gevoeg.
Dit is 'n bietjie moeiliker om die status van die HDD -skyf te kry, maar ek het 'n manier gevind! Installeer eerstens smartmontools vanaf die SSH -konsole:
opkg -opdatering
opkg installeer smartmontools
In ons kode moet ons 'n spesiale opdrag uitvoer en die uitgangskode nagaan:
funksie exec_ret (cmd)
local exit = os.execute (cmd) print ("Run:"..cmd.. " -> exit:".. exit) return exit end function getHddSpinning () if exec_ret ("smartctl --nocheck = standby -info /dev/sda>/dev/null ") == 0 en keer dan 1 anders terug, eindig 0
Let wel: my HDD is /dev /sda
Stap 8: Netwerkaktiwiteitskaart
Ons skep nog 'n SuperChart -widget (soortgelyk aan die vorige), voeg TX- en RX -datastrome by, en ken toe aan V1 en V2 Opmerking: ek wil WAN -poortstatc vertoon, en my WAN -poort is eth0.2
Helper funksies:
funksie getWanRxBytes ()
stuur tonumber terug (read_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) eindfunksie getWanTxBytes () return tonumber (read_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) eindig
Voeg dan 'n paar kode by dieselfde tmr1. Dit is meer ingewikkeld, aangesien ons slegs die verskil in oorgedra/ontvang grepe hoef te bereken en weer te gee:
plaaslike 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 if prevRx and prevRx ~ = rx dan blynk: virtualWrite (2, rx - prevRx) end prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning ()) eindig}
Stap 9: Kennisgewings
Ek wou ook in kennis gestel word wanneer my router krag of internetverbinding verloor. Hiervoor het ons 'n kennisgewing -widget nodig.
Aktiveer 'widget -instellings' in die widget -instellings. Geen kode nodig nie. Maar ons kan ook persoonlike kennisgewings vanaf ons kode stuur.
Stap 10: outomaties in die agtergrond uitgevoer
Vir eers moet die script met die hand uitgevoer word, maar ek wil dit outomaties op die agtergrond laat loop as die router aangeskakel word.
Dit word gedoen deur 'n diens te skep. Skep 'n lêer /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; eggo dan "blynkmon reeds aan die gang" afrit 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {as [! -f $ pidfile]; eggo dan "blynkmon loop nie" afrit 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Let wel: moenie vergeet om u-auth-token te vervang nie
Aktiveer dan blynkmon -diens:
diens blynkmon aktiveer
Stap 11: Gevolgtrekking en verdere idees
U kan hierdie QR skandeer om die kloon van my Blynk -projek te kry. Dit benodig 'n paar energiepunte (4600), aangesien dit baie widgets gebruik!
Vind die volledige Lua -kode hier:
Tot dusver goed, maar hier is 'n paar idees wat ek in die nabye toekoms wil byvoeg.
- Voeg Reboot -opdrag by. Voorkom dat u per ongeluk daarop klik.
- Voeg Terminal -widget by om enige Linux -opdrag uit te voer.
-
Voeg CPU temperatuur grafiek by.
UPD: Ongelukkig het OpenWrt tans geen bestuurders vir my routermodel nie. Maar dit is beskikbaar vir baie ander routers
- Voeg kennisgewing by wanneer 'n spesifieke toestel by die netwerk aansluit/verlaat. Ons het reeds arp -inligting, kyk nou slegs na die MAC -adres.
Op hierdie manier kan ons 3D -drukkers, robotte, 'n gewone rekenaar/skootrekenaar, Arduino/ESP8266/ESP32/RaspberryPi -dinge, Smart Home -toestelle en feitlik alles in die omgewing monitor en beheer. Laat weet my as u ander interessante idees het. Wat dink u hiervan?
Aanbeveel:
Op afstand toegang tot die Framboos Pi: SSH, Dekstop en FTP: 4 stappe
Op afstand toegang tot die Raspberry Pi: SSH, Dekstop en FTP: In hierdie pos gaan ons na drie verskillende metodes om op afstand toegang tot die Raspberry Pi te kry om dit makliker te maak om daarmee te werk. Die eerste is SSH, waarmee u op afstand toegang tot die terminaal kan verkry. Die tweede een is 'n remo
Hoe u toegang tot u musiek kan kry sonder iTunes !!: 6 stappe
Hoe u toegang tot u musiek kan kry sonder iTunes !!: Hierdie instruksie sal u wys hoe u toegang tot die musiek op u iPod touch, iPhone of iPad kan kry sonder iTunes. Teken asseblief in op my kanaal Dankie
SSH -toegang op afstand tot Raspberry Pi 2: 5 -stappe
SSH -toegang op afstand tot Raspberry Pi 2: wou u ooit 'n Raspberry Pi " in die veld " en nog steeds toegang daartoe kan kry? Hier is 'n maklike manier om SSH -toegang op afstand tot u Raspberry Pi 2 (en ook ander modelle) moontlik te maak. Alhoewel daar oplossings is wat 'n VPN insluit of die opstel van
Hoe u toegang tot u musiek vanaf enige plek kan kry met u Mac Mini: 5 stappe
Hoe u oral toegang tot u musiek kan kry met u Mac Mini: hierdie instruksies maak van u rekenaar 'n privaat deelbediener. Dit bied u musiek aan, sodat slegs u dit kan regkry. Maar as u internetverbinding vinnig genoeg is, kan u dit regoor die wêreld bereik. Hoe gaaf is dit nie
Op afstand toegang tot 'n bediener of byna enige Windows -rekenaar verkry: 6 stappe
Toegang tot 'n bediener of byna alle Windows -rekenaars op afstand: hierdie instruksies is 'n kombinasie van 'n paar idees wat hier op instruksies gesien kan word. Ha4xor4life het 'n instruksies genaamd Check out on your personal file server met gemak uitgegee. Dit is 'n goeie idee, maar dit verg 'n monitor met twee insette