Përmbajtje:

Aplikacioni Android/iOS për të hyrë në distancë në routerin tuaj OpenWrt: 11 hapa
Aplikacioni Android/iOS për të hyrë në distancë në routerin tuaj OpenWrt: 11 hapa

Video: Aplikacioni Android/iOS për të hyrë në distancë në routerin tuaj OpenWrt: 11 hapa

Video: Aplikacioni Android/iOS për të hyrë në distancë në routerin tuaj OpenWrt: 11 hapa
Video: Si ti Futesh dikujt ne WhatsApp 👽 2024, Nëntor
Anonim
Aplikacioni Android/iOS për të hyrë në Routerin tuaj OpenWrt nga distanca
Aplikacioni Android/iOS për të hyrë në Routerin tuaj OpenWrt nga distanca
Aplikacioni Android/iOS për të hyrë në Routerin tuaj OpenWrt nga distanca
Aplikacioni Android/iOS për të hyrë në Routerin tuaj OpenWrt nga distanca

Kohët e fundit bleva një ruter të ri (Xiaomi Mi Router 3G). Dhe sigurisht, kjo pjesë e re, e mrekullueshme e pajisjeve më frymëzoi të filloja të punoja në këtë projekt;)

Hapi 1: Supozoj, që ju keni OpenWrt Tashmë…

Supozoj, që ju keni OpenWrt Tashmë…
Supozoj, që ju keni OpenWrt Tashmë…

Më duhej të instaloja së pari OpenWrt … Kryesisht, ndoqa këtë udhëzues (specifik për këtë model ruteri): https://dzone.com/articles/hacking-into-xiaomi-mi-… Ndërsa punoja në këtë, gjeta këtë video të mrekullueshme: Instalimi i Openwrt, standardi i WiFi, Dashuria ndezje. Ua qeshja aq shumë!:)

Kujdes! Instalimi i OpenWrt mund të rregullojë ruterin tuaj. Por pasi të përfundojë, zhbllokon fuqinë dhe kontrollin e plotë. Unë nuk jam aq i guximshëm për të dhënë ndonjë udhëzim këtu, pasi ato mund të jenë të ndryshme për çdo model ruter.

Por nëse tashmë keni OpenWrt në ruterin tuaj, do të jeni në gjendje të filloni me këtë mësim në notime

BTW, disa borde zhvillimi vijnë me OpenWrt pa dalë, si Onion Omega, VoCore, LinkIt Smart 7688 dhe të tjerë. Ky tutorial shpjegon gjithashtu disa ide themelore prapa krijimit të aplikacioneve të tilla, kështu që ju lehtë mund ta përshtatni atë për të punuar me Raspberry Pi dhe të ngjashme.

Për këtë projekt, unë do të përdor kryesisht softuer të para-instaluar (i disponueshëm në çdo ruter të aktivizuar me OpenWrt). Por për disa funksione të përparuara, më duhej të instaloja pako shtesë. Kjo është bërë në vetëm disa klikime, kështu që unë do të përfshijë udhëzimet këtu.

Gjithashtu, supozoj se ju tashmë e dini:

  • Si të hapni/përdorni terminalin SSH në ruterin tuaj OpenWrt
  • Si të ngarkoni/modifikoni skedarët në ruterin tuaj (përdorni FileZilla ose scp/sftp)
  • Si të punoni me tastierën Linux

Hapi 2: Softuer dhe mjete

Softuer dhe Mjete
Softuer dhe Mjete

Nga ana e smartphone, unë jam duke përdorur Blynk. Ai siguron aplikacione iOS dhe Android për të kontrolluar çdo pajisje. Ju lehtë mund të ndërtoni ndërfaqe të bukura grafike për të gjitha projektet tuaja thjesht duke zvarritur dhe lëshuar widget, pikërisht në smartphone tuaj. Blynk përdoret më së shumti me Arduino, Raspberry Pi, etj. Por pse të mos e përdorni në vetë ruterin?;)

Nga ana e pajisjes unë do të përdor Lua për të shkruar funksionimin e nevojshëm. Unë gjithashtu mund të përdor Python ose Node.js, por për fat të keq këto opsione nuk janë gjithmonë të disponueshme, për shkak të mungesës së burimeve në disa rutera. Ose C/C ++, por nuk është aq i përshtatshëm për të punuar me të (rikompilimi për çdo ndryshim, etj.) Nga ana tjetër, Lua është para-instaluar, është i thjeshtë për t'u përdorur dhe mësuar. Përdoret nga ndërfaqja e paracaktuar e uebit, LuCI.

Hapi 3: Krijimi i një aplikacioni minimal

Fillimi me Blynk dhe Lua është aq i lehtë sa:

  • Shkarkoni Aplikacionin Blynk (nga App Store, Google Play)
  • Krijoni një projekt të ri dhe merrni Auth Token
  • Ndiqni udhëzimet e instalimit të Blynk Lua për OpenWrt.

Përdorni SSH për të hyrë në tastierën tuaj të ruterit. Pas ekzekutimit të shembullit të paracaktuar:

lua./shembuj/klient.lua

Ne duhet të shohim diçka si kjo:

Po lidhet…

Shtrëngim duarsh SSL… Gati.

Që do të thotë se është krijuar lidhja e sigurt, dydrejtimore me aplikacionin! PO!

Tani mund ta zgjerojmë me lehtësi shembullin e dhënë, kështu që bën diçka interesante. Unë kam krijuar një kopje të këtij shembulli për ta redaktuar atë:

cp./shembuj/klient.lua./blynkmon.lua

Hapi 4: Shtimi i disa informacioneve: Numri i Klientëve, Adresa IP WAN, Uptime

Ideja themelore është që të merrni informacionin nga OS në mënyrë periodike, të bëni disa llogaritje të thjeshta nëse është e nevojshme, dhe pastaj ta dërgoni rezultatin në Blynk për t'u shfaqur.

Në Linux/OpenWrt, ne kemi disa mënyra për të marrë të dhënat e sistemit:

  • Drejtoni një komandë dhe analizoni tekstin që nxjerr
  • Drejtoni një komandë dhe shikoni kodin e daljes që kthehet
  • Lexoni një skedar sistemi, të vendosur në/proc/dhe/sys/class/directories

Tani dua të shfaq numrin e pajisjeve të lidhura.

Kur drejtoj cat/proc/net/arp në tastierë, ajo nxjerr listën e pajisjeve të njohura, së bashku me adresat e tyre MAC dhe IP:

Adresa IP Lloji HW Flamujt Adresa HW Maska Pajisja

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

Ne mund ta analizojmë drejtpërdrejt në Lua, por shpesh është më e lehtë të përdorim shërbime të specializuara. Në Linux, këto janë grep, head, tail, cut, wc, awk.

Për të marrë numrin e klientëve nga dalja arp, më duhet të filtroj tabelën (të heq artikujt e palidhur) dhe të numëroj rreshtat e tabelës, gjë që rezulton në komandën e mëposhtme:

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

Le ta provojmë:

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

1

E madhe Tani kemi idenë se si mund të mbledhim të gjitha informacionet e kërkuara. Le ta automatizojmë atë. Për ta bërë kodin tonë të pastër dhe të zgjerueshëm, le të krijojmë disa funksione ndihmëse:

funksioni exec_out (cmd)

skedari lokal = io.popen (cmd) nëse nuk është skedar, atëherë kthejeni në fund daljen vendore = skedar: lexoni ('*të gjithë') skedarin: mbyllni () print ("Run:"..cmd.. " ->".. rezultati) kthehet në funksionin përfundimtar të leximit read_file (shtegu) skedari lokal = io.open (shtegu, "rb") nëse nuk është skedar, atëherë kthejeni përmbajtjen lokale = skedar fare: lexoni "*a" skedarin: mbyllni () print ("Lexo: "..path.." -> "..përmbajtje) ktheje përmbajtjen fund

Duke përdorur këto shërbime, tani mund të zbatojmë funksionet aktuale të marrjes së të dhënave:

funksioni getArpClients ()

kthimi i numrit (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) fundi i funksionit getUptime () kthimi i numrit (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) fundi i funksionit getWanIP () kthehu exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") fund

Ju mund të ekzekutoni pjesë të këtyre komandave të guaskës, për të fituar një kuptim më të thellë se si funksionon dhe për ta përshtatur atë me nevojat tuaja.

Pjesa më e lehtë është dërgimi i të dhënave në Aplikacionin Blynk. Shembulli i paracaktuar tashmë vendos kohëmatësin, i cili ekzekuton një kod çdo 5 sekonda, kështu që ne thjesht e përdorim përsëri:

lokale tmr1 = Kohëmatësi: i ri {interval = 5000, func = funksion ()

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

Në aplikacion, ne shtojmë 3 widget të etiketave dhe i caktojmë në përputhje me Kunjat Virtual 10, 11, 12.

Ndërsa kjo funksionon, është mjaft joefikase, pasi WAN IP ose numri i klientëve nuk azhurnohen aq shpesh. Le ta rregullojmë këtë

Për WAN IP, ne e transferojmë atë në mbajtësin e lidhur. Do të ekzekutohet sa herë që ruteri krijon lidhje me Blynk Cloud. Kjo duhet të jetë e mjaftueshme:

blynk: on ("lidhur", funksioni ()

print ("Gati.") blynk: virtualWrite (12, getWanIP ()) fund)

Për Uptime dhe Numri i Klientëve, ne krijojmë një kohëmatës të veçantë me 5 minuta. intervali:

lokale tmr2 = Kohëmatësi: i ri {interval = 5*60*1000, func = funksion ()

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

Hapi 5: Kontrolli WiFi: ON/OFF

Kontrolli WiFi: ON/OFF
Kontrolli WiFi: ON/OFF

Deri tani, ne po merrnim vetëm disa informacione nga pajisja. Le të përpiqemi ta kontrollojmë atë!

blynk: aktiv ("V20", funksioni (param)

nëse param [1] == "1" atëherë os.execute ("wifi up") përndryshe os.ekzekutimi ("wifi poshtë") fundi i fundit)

Nga ana e aplikacionit, unë vetëm shtova një widget Button (modaliteti: Switch) dhe e caktova atë në V20.

Kjo eshte. E mahnitshme.

Hapi 6: Grafiku i Statistikave të Sistemit

Tabela e Statistikave të Sistemit
Tabela e Statistikave të Sistemit
Tabela e Statistikave të Sistemit
Tabela e Statistikave të Sistemit

funksioni getCpuLoad ()

kthimi i numrit (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) fundi i funksionit getRamUsage () kthimi i numrit (exec_out ("falas | grep Mem | awk ' {print ($ 3- $ 7)/$ 2 * 100.0} '")) në fund

Ne gjithashtu duhet të dërgojmë të dhënat në Blynk (le të përdorim përsëri tmr1):

lokale tmr1 = Kohëmatësi: i ri {interval = 5000, func = funksion ()

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

Në Anën e Aplikacionit, shtoni miniaplikacionin SuperChart. Shtoni CPU, datastreams RAM dhe caktojini V5, V6.

Hapi 7: Statusi i rrotullimit të HDD

Ruteri im ka një disk të jashtëm HDD të lidhur si një pajisje ruajtëse e bashkangjitur në rrjet. Gjë është se ky disk është konfiguruar të fillojë të rrotullohet kur dikush të ketë qasje në të dhe të pezullohet pas një afati kohor.

Natyrisht, do të ishte mirë të dihet sa herë ndizet gjatë gjithë ditës. Kështu që shtova një rrjedhë tjetër të të dhënave në tabelën time të Sistemit.

Ashtë pak më e ndërlikuar të marrësh statusin e diskut HDD, por gjeta një mënyrë! Para së gjithash, instaloni smartmontools nga tastiera SSH:

përditësim opkg

opkg instaloni smartmontools

Pastaj, në kodin tonë, ne duhet të ekzekutojmë një komandë të veçantë dhe të kontrollojmë kodin e daljes:

funksioni exec_ret (cmd)

dalje lokale = os.ekzekuto (cmd) print ("Drejto:"..cmd.. " -> dalje:".. dalje) kthehu funksionin përfundimtar të daljes getHddSpinning () nëse exec_ret ("smartctl --nocheck = gatishmëria --info /dev/sda>/dev/null ") == 0 pastaj kthehet 1 tjetër kthehet 0 fund fund

Shënim: HDD -ja ime është /dev /sda

Hapi 8: Grafiku i Aktivitetit të Rrjetit

Grafiku i Aktivitetit të Rrjetit
Grafiku i Aktivitetit të Rrjetit

Ne krijojmë një widget tjetër SuperChart (i ngjashëm me atë të mëparshëm), Shtojmë transmetime të të dhënave TX dhe RX dhe i caktojmë V1 dhe V2. Shënim: Unë dua të shfaq statc portën WAN, dhe porta ime WAN është eth0.2

Funksionet ndihmëse:

funksioni getWanRxBytes ()

ktheje numrin (lexo_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) funksioni përfundimtar getWanTxBytes () ktheje numrin (lexo_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) fund

Tjetra, shtoni një kod në të njëjtën tmr1. Kjo është më e ndërlikuar, pasi ne vetëm duhet të llogarisim dhe shfaqim ndryshimin në bajtët e transmetuar/marrë:

prevTx lokale, prevRx

lokale tmr1 = Kohëmatësi: i ri {interval = 5000, func = funksion () lokal tx = getWanTxBytes () lokal rx = getWanRxBytes () nëse prevTx dhe prevTx ~ = tx atëherë blynk: virtualWrite (1, tx - prevTx) përfundon nëse prevRx dhe prevRx ~ = rx pastaj blynk: virtualWrite (2, rx - prevRx) fund prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWdS (7,)) fund}

Hapi 9: Njoftimet

Njoftimet
Njoftimet

Unë gjithashtu doja të njoftohesha kur Routeri im humbet energjinë ose lidhjen me internetin. Për këtë, ne kemi nevojë për widget Notification.

Në cilësimet e widget -it, aktivizoni "njoftimin jashtë linje". Nuk nevojitet kod. Por ne gjithashtu mund të dërgojmë njoftime me porosi nga kodi ynë.

Hapi 10: Autorun në sfond

Tani për tani skenari duhet të ekzekutohet me dorë, por unë dua ta bëj atë të funksionojë automatikisht në sfond kur ruteri të jetë i ndezur.

Kjo bëhet duke krijuar një shërbim. Krijoni një skedar /etc/init.d/blynkmon:

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

START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; pastaj jehona "blynkmon tashmë po funksionon" dalja 0 fi cd /root /lua-blynk lua blynkmon.lua shenja juaj-auth> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; pastaj jehona "blynkmon nuk po funksionon" dalja 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}

Shënim: mos harroni të zëvendësoni shenjën tuaj të autorizuar

Pastaj, aktivizoni shërbimin blynkmon:

shërbimi aktivizon blynkmon

Hapi 11: Përfundim & Ide të Mëtejshme

Përfundim & Ide të Mëtejshme
Përfundim & Ide të Mëtejshme

Ju mund ta skanoni këtë QR për të marrë klonin e Projektit tim Blynk. Kërkon disa pika energjie (4600), pasi përdor shumë pajisje shtesë!

Gjeni kodin e plotë të Lua këtu:

Deri tani është mirë, por këtu janë disa ide që do të doja të shtoja në të ardhmen e afërt.

  • Shto komandën e Rinisjes. Parandaloni klikimin mbi të rastësisht.
  • Shtoni widget Terminal për të ekzekutuar çdo komandë Linux.
  • Shtoni tabelën e temperaturës së CPU.

    UPD: Për fat të keq OpenWrt aktualisht mungojnë disa drejtues për modelin tim të ruterit. Por është në dispozicion për shumë ruterë të tjerë

  • Shtoni njoftim kur një pajisje e veçantë bashkohet/largohet nga rrjeti. Ne tashmë kemi informacione për arp, tani kontrolloni vetëm adresën MAC.

Në këtë mënyrë, ne mund të monitorojmë dhe kontrollojmë Printerët 3D, Robotët, një PC/Laptop të rregullt, gjërat Arduino/ESP8266/ESP32/RaspberryPi, pajisjet Smart Home dhe pothuajse çdo gjë përreth. Më tregoni nëse keni ndonjë ide tjetër interesante. Çfarë mendoni për gjithë këtë?

Recommended: