INHOUDSOPGAWE:

Android/iOS -program om op afstand toegang tot u OpenWrt -router te kry: 11 stappe
Android/iOS -program om op afstand toegang tot u OpenWrt -router te kry: 11 stappe

Video: Android/iOS -program om op afstand toegang tot u OpenWrt -router te kry: 11 stappe

Video: Android/iOS -program om op afstand toegang tot u OpenWrt -router te kry: 11 stappe
Video: Как настроить сломанный телефон в качестве IP-камеры 2024, November
Anonim
Android/iOS -program om op afstand toegang tot u OpenWrt -router te verkry
Android/iOS -program om op afstand toegang tot u OpenWrt -router te verkry
Android/iOS -program om op afstand toegang tot u OpenWrt -router te verkry
Android/iOS -program om op afstand toegang tot u OpenWrt -router te verkry

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 neem aan dat u reeds OpenWrt het …
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

Sagteware en gereedskap
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

WiFi -beheer: AAN/UIT
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

Stelselstatistiekkaart
Stelselstatistiekkaart
Stelselstatistiekkaart
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

Netwerkaktiwiteitskaart
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

Kennisgewings
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

Gevolgtrekking en verdere idees
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: