Мазмуну:

OpenWrt роутериңизге алыстан кирүү үчүн Android/iOS колдонмосу: 11 кадам
OpenWrt роутериңизге алыстан кирүү үчүн Android/iOS колдонмосу: 11 кадам

Video: OpenWrt роутериңизге алыстан кирүү үчүн Android/iOS колдонмосу: 11 кадам

Video: OpenWrt роутериңизге алыстан кирүү үчүн Android/iOS колдонмосу: 11 кадам
Video: Netgear R6120 AC1200 Router Firmware Upgrade Step by Step Tutorial 2024, Июнь
Anonim
Android/iOS колдонмосу OpenWrt роутериңизге алыстан кирүү үчүн
Android/iOS колдонмосу OpenWrt роутериңизге алыстан кирүү үчүн
Android/iOS колдонмосу OpenWrt роутериңизге алыстан кирүү үчүн
Android/iOS колдонмосу OpenWrt роутериңизге алыстан кирүү үчүн

Мен жакында жаңы роутерди сатып алдым (Xiaomi Mi Router 3G). Жана, албетте, бул жаңы, укмуш аппараттык бөлүк мени бул долбоордо иштөөгө шыктандырды;)

1 -кадам: Менин оюмча, сизде OpenWrt мурунтан эле бар …

Менин оюмча, сизде OpenWrt мурунтан эле бар …
Менин оюмча, сизде OpenWrt мурунтан эле бар …

Мен алгач OpenWrtти орнотушум керек болчу … Негизинен, мен бул көрсөтмөнү (бул роутер моделине тиешелүү) аткардым: https://dzone.com/articles/hacking-into-xiaomi-mi-… Бул боюнча иштеп жатып, мен бул укмуш видеону таптым: Openwrt орнотуу, WiFi эталону, Girlfriend Flashing. Wow мен абдан күлдүм!:)

Көңүл буруңуз! OpenWrt орнотуу роутериңизди кирпичке салышы мүмкүн. Бирок аяктагандан кийин, ал толук бийликти жана көзөмөлдү ачат. Мен бул жерде эч кандай көрсөтмө берүүгө батым жетпейт, анткени алар роутердин ар бир моделинде ар кандай болушу мүмкүн.

Бирок роутериңизде OpenWrt мурунтан эле бар болсо, анда бул окуу куралын notime менен баштай аласыз

BTW, кээ бир өнүгүү такталары OpenWrt менен келет, мисалы, Onion Omega, VoCore, LinkIt Smart 7688 жана башкалар. Бул окуу куралы ошондой эле мындай колдонмолорду түзүүнүн негизги идеяларын түшүндүрөт, андыктан сиз аны Raspberry Pi жана башкалар менен иштөөгө оңой ыңгайлаштыра аласыз.

Бул долбоор үчүн мен негизинен алдын ала орнотулган программаны колдоном (OpenWrt иштетилген роутерде бар). Бирок кээ бир өнүккөн функциялар үчүн кошумча пакеттерди орнотууга туура келди. Бул бир нече чыкылдатуу менен жасалат, андыктан мен бул жерде көрсөтмөлөрдү киргизем.

Ошондой эле, сиз буга чейин билесиз деп ойлойм:

  • OpenWrt роутериңизге SSH терминалын кантип ачуу/колдонуу
  • Роутериңизге файлдарды кантип жүктөө/түзөтүү (FileZilla же scp/sftp колдонуңуз)
  • Linux консолу менен кантип иштөө керек

2 -кадам: Программалык камсыздоо жана куралдар

Программалык камсыздоо жана куралдар
Программалык камсыздоо жана куралдар

Смартфон тарапта мен Blynk колдонуп жатам. Бул кандайдыр бир жабдыкты көзөмөлдөө үчүн iOS жана Android колдонмолорун камсыздайт. Сиз жөн эле смартфонуңузга виджеттерди сүйрөп таштоо менен бардык долбоорлоруңуз үчүн кооз графикалык интерфейстерди түзө аласыз. Blynk көбүнчө Arduino, Raspberry Pi ж.б. менен колдонулат, бирок эмне үчүн аны роутердин өзүндө иштетпейсиз?;)

Түзмөк тарабында мен Луаны керектүү функцияларды сценарийлөө үчүн колдоном. Мен Python же Node.js колдоно алмакмын, бирок тилекке каршы кээ бир роутерлерде ресурстардын жоктугунан бул параметрлер дайыма эле боло бербейт. менен иштөө анчалык ыңгайлуу эмес (ар бир өзгөртүү үчүн кайра компиляциялоо, ж.б.) Экинчи жагынан, Луа алдын ала орнотулган, колдонууга жана үйрөнүүгө оңой. Бул демейки веб -интерфейс, LuCI тарабынан колдонулат.

3 -кадам: Минималдуу колдонмону түзүү

Blynk жана Lua менен баштоо оңой:

  • Blynk тиркемесин жүктөп алыңыз (App Store, Google Playден)
  • Жаңы долбоор түзүп, Auth Токенин алыңыз
  • OpenWrt үчүн Blynk Lua орнотуу көрсөтмөлөрүн аткарыңыз.

Роутердин консолуна кирүү үчүн SSH колдонуңуз. Демейки мисалды иштеткенден кийин:

lua./examples/client.lua

Биз мындай нерсени көрүшүбүз керек:

Туташууда…

SSL кол алышуусу… Даяр.

Бул колдонмого коопсуз, эки багыттуу байланыш орнотулганын билдирет! YAY!

Биз азыр берилген мисалды оңой эле узарта алабыз, андыктан ал кызыктуу нерсе кылат. Мен аны өзгөртүү үчүн бул мисалдын көчүрмөсүн түздүм:

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

4 -кадам: Кээ бир маалыматты кошуу: Кардарлардын саны, WAN IP дареги, Uptime

Негизги идея - мезгил -мезгили менен ОСтен маалымат алуу, керек болсо бир нече жөнөкөй эсептөөлөрдү жүргүзүү жана андан кийин дисплей үчүн Блинкке жыйынтык жөнөтүү.

Linux/OpenWrtте тутум маалыматын алуунун бир нече жолу бар:

  • Буйрукту иштетиңиз жана ал чыгарган текстти талдаңыз
  • Буйрукту иштетип, кайра келген чыгуу кодун көрүңүз
  • /Proc/жана/sys/class/каталогдорунда жайгашкан тутум файлын окуңуз

Эми мен туташкан түзмөктөрдүн санын көрсөткүм келет.

Мен cat/proc/net/arp консолунда иштеткенде, ал белгилүү түзмөктөрдүн тизмесин, алардын MAC жана IP даректерин чыгарат:

IP дареги HW түрү Желектер HW дареги Маска Аппараты

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

Биз аны түздөн -түз Lua тилинде талдай алабыз, бирок көбүнчө адистештирилген утилиталарды колдонуу оңой. Linuxта бул grep, head, tail, cut, wc, awk.

Кардарлардын санын arp чыгаруудан алуу үчүн, мен таблицаны чыпкалашым керек (байланышпаган нерселерди алып салуу) жана үстөлдүн катарларын эсептешим керек, бул төмөнкү буйрукту берет:

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

Кел аракет кылып көрөбүз:

root@роутер: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l

1

Абдан жакшы. Биз азыр бардык керектүү маалыматты кантип чогултуу жөнүндө түшүнүккө ээ болдук. Келгиле, биздин кодду таза жана кеңейтүүчү кылуу үчүн, кээ бир жардамчы функцияларды түзөлү:

exec_out функциясы (cmd)

локалдык файл = io.popen (cmd), эгерде файл жок болсо, анда nil end local output = file: read ('*all') file: close () print ("Run:"..cmd.. " ->".. чыгаруу) кайтаруу чыгаруу функциясы read_file (жол) локалдык файл = io.open (жол, "rb") эгерде файл жок болсо, анда nil end local content = file: read "*a" file: close () print ("Оку: "..path.." -> "..content) мазмунун аягына чыгаруу

Бул утилиталарды колдонуп, биз азыр чыныгы маалыматтарды алуу функцияларын ишке ашыра алабыз:

getArpClients функциясы ()

кайтаруу tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) getUptime () функциясын кайтаруу tonumber (exec_out ("cat/proc/uptime | awk '{басып чыгаруу $ 1) } '")) аяктоо функциясы getWanIP () кайтып exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} ')) end

Сиз бул кабыктын буйруктарынын бөлүктөрүн иштете аласыз, анын кантип иштээрин тереңирээк түшүнүп, аны керектөөлөрүңүзгө ылайыкташтыра аласыз.

Эң оңой - бул маалыматтарды Blynk колдонмосуна жөнөтүү. Демейки мисал таймерди орнотот, ал 5 секундда бир кодду иштетет, ошондуктан биз аны кайра колдонобуз:

жергиликтүү tmr1 = Таймер: жаңы {интервал = 5000, func = function ()

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

Колдонмодо биз 3 энбелгиси бар виджеттерди кошуп, ошого жараша Virtual Pins 10, 11, 12ге дайындайбыз.

Бул иштесе да, бул натыйжасыз, анткени WAN IP же кардарлардын саны ушунчалык тез жаңыртылбайт

WAN IP үчүн, биз аны туташкан иштетүүчүгө жылдырабыз. Бул роутер Blynk Cloud менен туташкан сайын иштейт. Бул жетиштүү болушу керек:

blynk: күйүк ("туташкан", function ()

басып чыгаруу ("Даяр.") blynk: virtualWrite (12, getWanIP ()) аягы)

Uptime жана Кардарлардын саны үчүн биз 5 мүнөт менен өзүнчө таймерди түзөбүз. интервал:

жергиликтүү tmr2 = Таймер: жаңы {интервал = 5*60*1000, func = function ()

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

5 -кадам: WiFi Control: ON/OFF

WiFi Control: ON/OFF
WiFi Control: ON/OFF

Буга чейин, биз түзмөктөн гана маалымат алчубуз. Келгиле, аны башкарууга аракет кылалы!

blynk: күйүк ("V20", функция (парам)

эгер парам [1] == "1" анда os.execute ("wifi өйдө") башка os.execute ("wifi ылдый") аягы)

Колдонмо тарабында мен жөн гана Button виджетин коштум (режим: которуштуруу) жана аны V20го дайындадым.

Дал ушул. Укмуш.

6 -кадам: Системанын статистикалык диаграммасы

Системанын статистикалык диаграммасы
Системанын статистикалык диаграммасы
Системанын статистикалык диаграммасы
Системанын статистикалык диаграммасы

getCpuLoad функциясы ()

tonumber кайтаруу (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) getRamUsage () кайтаруу тонумбери (exec_out ("бекер | grep Mem | awk '') {print ($ 3- $ 7)/$ 2 * 100.0} '")) end

Биз ошондой эле маалыматтарды Blynkке жөнөтүшүбүз керек (tmr1 кайра колдонолу):

жергиликтүү tmr1 = Таймер: жаңы {интервал = 5000, func = function ()

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

Колдонмо тарабында SuperChart виджети кошулат. CPU, RAM маалымат агымдарын кошуп, V5, V6ге дайындоо.

7 -кадам: HDD айлануу абалы

Менин роутеримде тышкы HDD драйвы бар, ал тармакка тиркелген сактоочу түзмөк катары туташкан, бул диск кимдир бирөө ага жеткенде айланууну баштоо үчүн жана убакыт өткөндөн кийин токтотуу үчүн конфигурацияланган.

Албетте, бир күндүн ичинде канча жолу күйгүзүлгөнүн билүү сонун болмок. Ошентип, мен системалык диаграммага дагы бир маалымат агымын коштум.

HDD дискинин статусун алуу бир аз татаалыраак, бирок мен бир жолун таптым! Биринчи кезекте, SSM консолунан smartmontools орнотуңуз:

opkg жаңыртуу

opkg smartmontools орнотуу

Андан кийин, биздин коддо биз атайын буйрукту иштетип, чыгуу кодун текшеришибиз керек:

exec_ret функциясы (cmd)

жергиликтүү чыгуу = os.execute (cmd) басып чыгаруу ("Run:"..cmd.. " -> exit:".. exit) return end end function getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0 анда 1ди кайтарыңыз, дагы бирөөнү кайтарыңыз 0 аягы

Эскертүү: менин HDD /dev /sda

8 -кадам: Тармактын ишмердүүлүк диаграммасы

Тармактын активдүүлүк диаграммасы
Тармактын активдүүлүк диаграммасы

Биз башка SuperChart виджетин түзөбүз (мурунку окшош), TX жана RX маалымат агымдарын кошобуз жана V1 менен V2ге дайындайбыз.

Жардамчы функциялары:

getWanRxBytes функциясы ()

tonumber кайтаруу (read_file ("/sys/class/net/eth0.2/статистика/rx_bytes")) getWanTxBytes () функциясын кайтаруу () readumfile ("/sys/class/net/eth0.2/статистика/tx_bytes")) аяктоо

Андан кийин, ошол эле tmr1ге кээ бир кодду кошуңуз. Бул татаалыраак, анткени биз берилген/алынган байттагы айырманы эсептеп, көрсөтүшүбүз керек:

жергиликтүү prevTx, prevRx

жергиликтүү tmr1 = Таймер: жаңы {интервал = 5000, func = функция () жергиликтүү tx = getWanTxBytes () локалдык rx = getWanRxBytes () эгер prevTx жана prevTx ~ = tx болсо blynk: virtualWrite (1, tx - prevTx) endRex жана prevRx ~ = rx анда blynk: virtualWrite (2, rx - prevRx) end prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrSpinning (7, getHetH))) аягы}

9 -кадам: Билдирмелер

Билдирмелер
Билдирмелер

Мен дагы роутеримдин кубаты же интернет байланышы үзүлгөндө кабарланууну кааладым. Бул үчүн бизге Эскертме виджети керек.

Виджет жөндөөлөрүндө "оффлайн эскертүүсүн" күйгүзүңүз. Эч кандай коддун кереги жок. Бирок биз дагы кодубуздан бажы эскертмелерин жөнөтө алабыз.

10 -кадам: Фондо Autunun

Азырынча скрипт кол менен аткарылышы керек, бирок роутер күйгүзүлгөндө аны автоматтык түрдө фондо иштетүүнү каалайм.

Бул кызмат түзүү аркылуу ишке ашат. /Etc/init.d/blynkmon файлын түзүңүз:

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

START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; анда echo "blynkmon буга чейин иштеп жатат" чыгуу 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; анда echo "blynkmon иштебейт" чыгуу 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}

Эскертүү: auth-token'ди алмаштырууну унутпаңыз

Андан кийин, blynkmon кызматын иштетүү:

blynkmon кызматын иштетүү

11 -кадам: Корутунду жана андан аркы идеялар

Корутунду жана кошумча ойлор
Корутунду жана кошумча ойлор

Сиз бул QRди сканерлеп, Blynk Project клонумун ала аласыз. Ал көптөгөн виджеттерди колдонгондуктан, кээ бир энергия пункттарын талап кылат (4600)!

Толук Луа кодун бул жерден табыңыз:

Азырынча жакшы, бирок бул жерде мен жакынкы келечекте кошкум келген кээ бир идеялар бар.

  • Reboot командасын кошуу. Кокустан аны басып калбаңыз.
  • Кандайдыр бир Linux буйругун иштетүү үчүн Терминал виджетин кошуңуз.
  • CPU температурасы диаграммасын кошуу.

    UPD: Тилекке каршы, OpenWrt учурда менин роутер моделим үчүн кээ бир драйверлерди жок кылат. Бирок бул башка көптөгөн роутерлер үчүн жеткиликтүү

  • Белгилүү бир түзмөк тармакка кошулганда/кеткенде кабарлоону кошуңуз. Бизде arp маалыматы бар, азыр MAC дарегин гана текшериңиз.

Ошентип, биз 3D принтерлерди, роботторду, кадимки ПК/ноутбукту, Arduino/ESP8266/ESP32/RaspberryPi нерселерин, Smart Home түзмөктөрүн жана дээрлик бардык нерсени көзөмөлдөп жана көзөмөлдөй алабыз. Башка кызыктуу ойлоруңуз болсо, мага кабарлаңыз. Мунун баары жөнүндө кандай ойдосуз?

Сунушталууда: