ዝርዝር ሁኔታ:

የ OpenWrt ራውተርዎን ከርቀት ለመድረስ የ Android/iOS መተግበሪያ - 11 ደረጃዎች
የ OpenWrt ራውተርዎን ከርቀት ለመድረስ የ Android/iOS መተግበሪያ - 11 ደረጃዎች

ቪዲዮ: የ OpenWrt ራውተርዎን ከርቀት ለመድረስ የ Android/iOS መተግበሪያ - 11 ደረጃዎች

ቪዲዮ: የ OpenWrt ራውተርዎን ከርቀት ለመድረስ የ Android/iOS መተግበሪያ - 11 ደረጃዎች
ቪዲዮ: Connecting 2 TP-Link routers | NETVN 2024, ህዳር
Anonim
የ OpenWrt ራውተርዎን ከርቀት ለመድረስ የ Android/iOS መተግበሪያ
የ OpenWrt ራውተርዎን ከርቀት ለመድረስ የ Android/iOS መተግበሪያ
የ OpenWrt ራውተርዎን ከርቀት ለመድረስ የ Android/iOS መተግበሪያ
የ OpenWrt ራውተርዎን ከርቀት ለመድረስ የ Android/iOS መተግበሪያ

በቅርቡ አዲስ ራውተር (Xiaomi Mi Router 3G) ገዛሁ። እና በእርግጥ ፣ ይህ አዲስ ፣ ግሩም ሃርድዌር በዚህ ፕሮጀክት ላይ መሥራት እንድጀምር አነሳሳኝ።)

ደረጃ 1: እርስዎ ቀድሞውኑ OpenWrt እንዳለዎት እገምታለሁ…

እኔ ቀድሞውኑ OpenWrt እንዳለዎት እገምታለሁ…
እኔ ቀድሞውኑ OpenWrt እንዳለዎት እገምታለሁ…

መጀመሪያ OpenWrt ን መጫን ነበረብኝ… በአብዛኛው ፣ ይህንን መመሪያ (ለዚህ ራውተር ሞዴል የተወሰነ) ተከተለኩ-https://dzone.com/articles/hacking-into-xiaomi-mi-… በዚህ ላይ እየሰራሁ ሳለ ይህን አስደናቂ ቪዲዮ: Openwrt መጫኛ ፣ የ WiFi መመዘኛ ፣ የሴት ጓደኛ ብልጭታ። እንዴት በጣም ሳቅኩ!:)

ትኩረት! OpenWrt ን መጫን ራውተርዎን ጡብ ሊያደርግ ይችላል። ግን ከተጠናቀቀ በኋላ ሙሉ ኃይል እና ቁጥጥር ይከፍታል። ለእያንዳንዱ ራውተር ሞዴል ሊለያዩ ስለሚችሉ እኔ እዚህ ማንኛውንም መመሪያ ለመስጠት ደፋር አይደለሁም።

ነገር ግን ቀድሞውኑ በራውተርዎ ላይ OpenWrt ካለዎት ፣ በዚህ ማጠናከሪያ ትምህርት በኖሚ ውስጥ መጀመር ይችላሉ።

BTW ፣ አንዳንድ የልማት ቦርዶች ከኦን-ኦክስጋ ፣ ከሽንኩርት ኦሜጋ ፣ ቮኮሬ ፣ አገናኝ ኢት ስማርት 7688 እና ሌሎች ከ OpenWrt ጋር ይመጣሉ። ይህ መማሪያ እንደዚህ ዓይነት መተግበሪያዎችን ከመፍጠር በስተጀርባ አንዳንድ መሠረታዊ ሀሳቦችን ያብራራል ፣ ስለሆነም ከ Raspberry Pi እና ከመሳሰሉት ጋር ለመስራት በቀላሉ ሊያስተካክሉት ይችላሉ።

ለዚህ ፕሮጀክት እኔ በአብዛኛው በቅድሚያ የተጫነ ሶፍትዌርን እጠቀማለሁ (በማንኛውም OpenWrt የነቃ ራውተር ላይ ይገኛል)። ግን ለአንዳንድ የላቀ ተግባራት ተጨማሪ ጥቅሎችን መጫን ነበረብኝ። ይህ በጥቂት ጠቅታዎች ብቻ ይከናወናል ፣ ስለዚህ መመሪያዎቹን እዚህ እጨምራለሁ።

እንዲሁም ፣ እርስዎ አስቀድመው ያውቁታል ብዬ እገምታለሁ-

  • ለእርስዎ OpenWrt ራውተር የ SSH ተርሚናል እንዴት እንደሚከፍት/እንደሚጠቀም
  • በእርስዎ ራውተር ላይ ፋይሎችን እንዴት እንደሚጫኑ/እንደሚያርትዑ (FileZilla ን ወይም scp/sftp ን ይጠቀሙ)
  • ከሊኑክስ ኮንሶል ጋር እንዴት እንደሚሰራ

ደረጃ 2: ሶፍትዌር እና መሳሪያዎች

ሶፍትዌር እና መሣሪያዎች
ሶፍትዌር እና መሣሪያዎች

በስማርትፎን በኩል ብሊንክን እጠቀማለሁ። ማንኛውንም ሃርድዌር ለመቆጣጠር የ iOS እና የ Android መተግበሪያዎችን ይሰጣል። በስማርትፎንዎ ላይ በቀላሉ ንዑስ ፕሮግራሞችን በመጎተት እና በመጣል ለሁሉም ፕሮጀክቶችዎ የሚያምሩ ግራፊክ በይነገጾችን በቀላሉ መገንባት ይችላሉ። ብሊንክ በአብዛኛው ከአርዱዲኖ ፣ ከ Raspberry Pi ፣ ወዘተ ጋር ጥቅም ላይ ይውላል ፣ ግን ለምን በ ራውተር ላይ ለምን አይሮጡም?;)

በመሳሪያው በኩል አስፈላጊውን ተግባር ለመፃፍ ሉአን እጠቀማለሁ። እኔ ደግሞ Python ወይም Node.js ን መጠቀም እችላለሁ ፣ ግን በሚያሳዝን ሁኔታ እነዚህ አማራጮች በአንዳንድ ራውተሮች ላይ ሀብቶች ባለመኖራቸው ሁልጊዜ አይገኙም። ወይም ሲ/ሲ ++ ፣ ግን ግን ከእሱ ጋር አብሮ ለመስራት በጣም ምቹ አይደለም (ለእያንዳንዱ ለውጥ ማካካሻ ፣ ወዘተ) በሌላ በኩል ሉዋ አስቀድሞ ተጭኗል ፣ ለመጠቀም እና ለመማር ቀላል ነው። በነባሪ የድር በይነገጽ ፣ ሉሲሲ ጥቅም ላይ ውሏል።

ደረጃ 3: አነስተኛ መተግበሪያን መፍጠር

በብሊንክ እና ሉአ መጀመር ልክ እንደዚህ ቀላል ነው-

  • ብሊንክ መተግበሪያን ያውርዱ (ከመተግበሪያ መደብር ፣ Google Play)
  • አዲስ ፕሮጀክት ይፍጠሩ እና Auth Token ን ያግኙ
  • ለ OpenWrt የ Blynk Lua የመጫኛ መመሪያዎችን ይከተሉ።

ወደ ራውተር ኮንሶልዎ ለመድረስ SSH ይጠቀሙ። ነባሪውን ምሳሌ ካሄዱ በኋላ-

lua./ ምሳሌዎች/ደንበኛ.ሉአ

እንደዚህ ያለ ነገር ማየት አለብን-

በማገናኘት ላይ…

SSL የእጅ መጨባበጥ… ዝግጁ።

ይህ ማለት ከመተግበሪያው ጋር ደህንነቱ የተጠበቀ ባለሁለት አቅጣጫ ግንኙነት ተቋቁሟል ማለት ነው!

አሁን የቀረበውን ምሳሌ በቀላሉ ማራዘም እንችላለን ፣ ስለዚህ አንድ አስደሳች ነገር ያደርጋል። እሱን ለማርትዕ የዚህን ምሳሌ ቅጂ ፈጥረዋል -

cp./ ምሳሌዎች/client.lua./blynkmon.lua

ደረጃ 4: አንዳንድ መረጃን ማከል - የደንበኞች ብዛት ፣ የ WAN አይፒ አድራሻ ፣ ትርፍ ጊዜ

መሰረታዊ ሀሳቡ መረጃውን ከኦፕሬቲንግ ሲስተም በየጊዜው ማግኘት ፣ አስፈላጊ ከሆነ አንዳንድ ቀላል ስሌቶችን ማከናወን እና ከዚያ ውጤቱን ለብላይንክ ለመላክ ነው።

በሊኑክስ/OpenWrt ውስጥ የስርዓት ውሂቡን የምናገኝባቸው በርካታ መንገዶች አሉን

  • ትዕዛዙን ያሂዱ እና የሚያወጣውን ጽሑፍ ይተንትኑ
  • ትዕዛዙን ያሂዱ ፣ እና የሚወጣበትን ኮድ ይመልከቱ
  • በ/proc/እና/sys/class/ማውጫዎች ውስጥ የሚገኝ የስርዓት ፋይልን ያንብቡ

አሁን የተገናኙ መሣሪያዎችን ቁጥር ማሳየት እፈልጋለሁ።

በኮንሶሉ ላይ ድመት/ፕሮ/መረብ/መረብ/አርፕን ስሮጥ የታወቁ መሣሪያዎችን ዝርዝር ፣ ከማክ እና አይፒ አድራሻዎቻቸው ጋር ያወጣል።

የአይፒ አድራሻ 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: ለ 1 67: 2f: e3: 74 * br-lan

እኛ በቀጥታ በሉ ውስጥ ልንተነተው እንችላለን ፣ ግን ብዙውን ጊዜ ልዩ መገልገያዎችን ለመጠቀም ቀላል ነው። በሊኑክስ ላይ እነዚህ ግሬፕ ፣ ራስ ፣ ጅራት ፣ የተቆረጠ ፣ wc ፣ awk ናቸው።

ከ arp ውፅዓት የደንበኞችን ብዛት ለማግኘት ሰንጠረ filterን ማጣራት (የማይዛመዱ ዕቃዎችን ማስወገድ) እና የጠረጴዛውን ረድፎች መቁጠር አለብኝ ፣ ይህም የሚከተለውን ትእዛዝ ያስከትላል።

ድመት/ፕሮክ/መረብ/ቀስት | 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 አካባቢያዊ ውፅዓት = ፋይል: ያንብቡ ('*ሁሉም') ፋይል: ዝጋ () ህትመት ("አሂድ:"..cmd.. " ->".. ውፅዓት) የመመለሻ ውጤት መጨረሻ ተግባር read_file (ዱካ) አካባቢያዊ ፋይል = io.open (ዱካ ፣ “rb”) ፋይል ካልሆነ nil end አካባቢያዊ ይዘትን = ፋይልን ያንብቡ - “*a” ፋይልን ይዝጉ () ህትመት (“አንብብ ፦ ".. መንገድ.." -> ".. ይዘት" መመለስ የይዘት መጨረሻ

እነዚህን መገልገያዎች በመጠቀም አሁን ትክክለኛውን የውሂብ ማምጣት ተግባሮችን መተግበር እንችላለን-

ተግባር getArpClients ()

የቶነምበር መመለስ (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) end function 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

እንዴት እንደሚሠራ ጥልቅ ግንዛቤን ለማግኘት እና ከፍላጎቶችዎ ጋር ለማስተካከል የእነዚህን የ shellል ትዕዛዞች ክፍሎች ማካሄድ ይችላሉ።

በጣም ቀላሉ ክፍል ውሂቡን ወደ ብሊንክ መተግበሪያ መላክ ነው። ነባሪው ምሳሌ በየ 5 ሰከንዶች የተወሰነ ኮድ የሚያከናውን ቆጣሪን አስቀድሞ ያዘጋጃል ፣ ስለዚህ እኛ እንደገና እንጠቀማለን-

አካባቢያዊ tmr1 = ሰዓት ቆጣሪ: አዲስ {interval = 5000, func = function ()

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

በመተግበሪያው ውስጥ 3 የመለያ ፍርግሞችን እንጨምራለን ፣ እና በዚህ መሠረት ለምናባዊ ፒን 10 ፣ 11 ፣ 12 እንመድባቸዋለን።

WAN IP ወይም የደንበኞች ብዛት በጣም በተደጋጋሚ ስለማይዘምን ይህ በሚሠራበት ጊዜ እሱ ውጤታማ ያልሆነ ነው። ይህንን እናስተካክለው።

ለ WAN IP ፣ ወደ ተገናኘው ተቆጣጣሪ እንወስደዋለን። ራውተሩ ከብላይንክ ደመና ጋር ግንኙነት ባቋቋመ ቁጥር ይሠራል። ይህ በቂ መሆን አለበት-

blynk: በርቷል ("የተገናኘ" ፣ ተግባር ()

አትም ("ዝግጁ"

ለ Uptime እና ደንበኞች ቁጥር ፣ ከ 5 ደቂቃዎች ጋር የተለየ ሰዓት ቆጣሪ እንፈጥራለን። ክፍተት ፦

አካባቢያዊ tmr2 = ሰዓት ቆጣሪ: አዲስ {ክፍተት = 5*60*1000 ፣ Func = ተግባር ()

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

ደረጃ 5 የ WiFi ቁጥጥር - አብራ/አጥፋ

የ WiFi ቁጥጥር - አብራ/አጥፋ
የ WiFi ቁጥጥር - አብራ/አጥፋ

እስካሁን ድረስ እኛ ከመሣሪያው የተወሰነ መረጃ እያገኘን ነበር። እሱን ለመቆጣጠር እንሞክር!

blynk: በርቷል ("V20" ፣ ተግባር (ፓራም)

param [1] == "1" ከዚያም os.execute ("wifi up") ሌላ os.execute ("wifi down") መጨረሻ መጨረሻ)

ከመተግበሪያው ጎን ፣ እኔ የአዝራር መግብር (ሞድ: መቀያየር) ብቻ አክዬ ለ V20 ሰጠሁት።

ይሀው ነው. የሚገርም።

ደረጃ 6 - የስርዓት ስታቲስቲክስ ገበታ

የስርዓት ስታቲስቲክስ ገበታ
የስርዓት ስታቲስቲክስ ገበታ
የስርዓት ስታቲስቲክስ ገበታ
የስርዓት ስታቲስቲክስ ገበታ

ተግባር getCpuLoad ()

የቶነምበር መመለስ (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'"))) end function getRamUsage () tonumber (exec_out ("free | grep Mem | awk ') (የህትመት ($ 3- $ 7)/$ 2 * 100.0} '")) መጨረሻ

እንዲሁም ውሂቡን ወደ ብሊንክ መላክ አለብን (tmr1 ን እንደገና እንጠቀም)

አካባቢያዊ tmr1 = ሰዓት ቆጣሪ: አዲስ {interval = 5000, func = function ()

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

በመተግበሪያው ጎን ፣ SuperChart ንዑስ ፕሮግራምን ያክሉ። ሲፒዩ ፣ ራም የውሂብ ዥረቶችን ያክሉ እና ለ V5 ፣ V6 ይመድቡ።

ደረጃ 7 የኤችዲዲ ማሽከርከር ሁኔታ

የእኔ ራውተር እንደ አውታረ መረብ ተያይዞ የማከማቻ መሣሪያ ሆኖ የተገናኘ ውጫዊ የኤችዲዲ ድራይቭ አለው። ነገሩ ፣ ይህ ድራይቭ አንድ ሰው ሲደርስበት ማሽከርከር እንዲጀምር እና ከተቋረጠ በኋላ ለማገድ የተዋቀረ ነው።

በግልጽ ለማየት እንደሚቻለው ፣ በቀን ውስጥ ስንት ጊዜ እንደሚበራ ማወቅ አሪፍ ይሆናል። ስለዚህ በስርዓት ገበቴ ላይ ሌላ የውሂብ ዥረት ጨመርኩ።

የኤችዲዲ ድራይቭን ሁኔታ ለማግኘት ትንሽ የበለጠ ተንኮለኛ ነው ፣ ግን መንገድ አገኘሁ! በመጀመሪያ ፣ ከኤስኤስኤች ኮንሶል ውስጥ ስማርትሞንትool ን ይጫኑ።

opkg ዝማኔ

opkg smartmontools ን ይጫኑ

ከዚያ በእኛ ኮድ ውስጥ ልዩ ትዕዛዝ ማስኬድ እና የመውጫ ኮዱን መፈተሽ አለብን።

ተግባር exec_ret (cmd)

አካባቢያዊ መውጫ = os.execute (cmd) ህትመት (“አሂድ”..cmd.. /dev/sda>/dev/null”) == 0 ከዚያ 1 ሌላ መመለስ 0 መጨረሻ መጨረሻን ይመልሱ

ማስታወሻ የእኔ ኤችዲዲ /dev /sda ነው

ደረጃ 8 የአውታረ መረብ እንቅስቃሴ ገበታ

የአውታረ መረብ እንቅስቃሴ ገበታ
የአውታረ መረብ እንቅስቃሴ ገበታ

ሌላ የ SuperChart መግብር እንፈጥራለን (ከቀዳሚው ጋር ይመሳሰላል) ፣ TX እና RX የውሂብ ዥረቶችን ያክሉ ፣ እና ለ V1 እና V2 እንመድባለን። ማስታወሻ - የ WAN ወደብ ስታቲክን ማሳየት እፈልጋለሁ ፣ እና የእኔ WAN ወደብ eth0.2 ነው

ረዳት ተግባራት;

ተግባር getWanRxBytes ()

የቁጥር ቆጣሪን (read_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) end function getWanTxBytes () tonumber (read_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) መጨረሻ

በመቀጠል ፣ ለተመሳሳይ tmr1 የተወሰነ ኮድ ያክሉ። በሚተላለፉ/በተቀበሉ ባይት ውስጥ ያለውን ልዩነት ማስላት እና ማሳየት ስለምንፈልግ ይህ የበለጠ የተወሳሰበ ነው-

አካባቢያዊ prevTx ፣ prevRx

አካባቢያዊ tmr1 = ሰዓት ቆጣሪ ፦ አዲስ {interval = 5000 ፣ func = function () local tx = getWanTxBytes () local rx = getWanRxBytes () prevTx እና prevTx ~ = tx ከዚያም blynk: virtualWrite (1 ፣ tx - prevTx) ካለቀ prevRx እና prevRx ~ = rx ከዚያም blynk: virtualWrite (2, rx - prevRx) መጨረሻ prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpin)) መጨረሻ}

ደረጃ 9 ማሳወቂያዎች

ማሳወቂያዎች
ማሳወቂያዎች

እኔ ራውተር ራዕይ ኃይልን ወይም የበይነመረብ ግንኙነትን ሲፈታ ማሳወቅም ፈልጌ ነበር። ለዚህ ፣ የማሳወቂያ መግብር እንፈልጋለን።

በፍርግም ቅንብሮች ውስጥ «ከመስመር ውጭ ማሳወቂያ» ን ያንቁ። ኮድ አያስፈልግም። ግን እኛ ደግሞ ከኮዳችን ብጁ ማሳወቂያዎችን መላክ እንችላለን።

ደረጃ 10 - በጀርባ ውስጥ በራስ -ሰር ያሂዱ

ለአሁን ስክሪፕቱ በእጅ መከናወን አለበት ፣ ግን ራውተር ሲበራ በራስ -ሰር እንዲሠራ ማድረግ እፈልጋለሁ።

ይህ የሚደረገው አገልግሎት በመፍጠር ነው። ፋይል ይፍጠሩ /etc/init.d/blynkmon:

#!/ቢን/ሽ /etc/rc.common

ጀምር = 99 አቁም = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; ከዚያ ‹blynkmon አስቀድሞ እያሄደ› መውጫ 0 fi ሲዲ /ሥር /ሉአ-ብሊንክ ሉአ blynkmon.lua የእርስዎ-auth-token> /dev /null & echo $! > $ pidfile} አቁም () {ከሆነ [! -f $ pidfile]; ከዚያ “blynkmon እየሮጠ አይደለም” መውጫ 0 fi kill -9 $ (ድመት $ pidfile) rm $ pidfile}

ማሳሰቢያ-የእርስዎን-auth-token መተካትዎን አይርሱ

ከዚያ የብሎንክሞን አገልግሎትን ያንቁ -

አገልግሎት blynkmon ያንቁ

ደረጃ 11 መደምደሚያ እና ተጨማሪ ሀሳቦች

መደምደሚያ እና ተጨማሪ ሀሳቦች
መደምደሚያ እና ተጨማሪ ሀሳቦች

የእኔን የብሊንክ ፕሮጀክት ክሎኔን ለማግኘት ይህንን QR መቃኘት ይችላሉ። እሱ ብዙ ንዑስ ፕሮግራሞችን ስለሚጠቀም አንዳንድ የኃይል ነጥቦችን (4600) ይፈልጋል!

ሙሉውን የሉአ ኮድ እዚህ ያግኙ

እስካሁን በጣም ጥሩ ፣ ግን በቅርብ ጊዜ ውስጥ ማከል የምፈልጋቸው አንዳንድ ሀሳቦች እዚህ አሉ።

  • ዳግም ማስነሳት ትዕዛዙን ያክሉ። በድንገት እሱን ጠቅ ማድረግን ይከላከሉ።
  • ማንኛውንም የሊኑክስ ትእዛዝ ለማሄድ የተርሚናል መግብር ያክሉ።
  • የሲፒዩ የሙቀት ገበታን ያክሉ።

    UPD: እንደ አለመታደል ሆኖ OpenWrt በአሁኑ ጊዜ ለራውተር ሞዴሌ አንዳንድ አሽከርካሪዎች ይጎድላቸዋል። ግን ለሌሎች ብዙ ራውተሮች ይገኛል

  • አንድ የተወሰነ መሣሪያ ከአውታረ መረቡ ጋር ሲቀላቀል/ሲወጣ ማሳወቂያ ያክሉ። እኛ ቀስት መረጃ አለን ፣ አሁን የማክ አድራሻውን ብቻ ይፈትሹ።

በዚህ መንገድ ፣ 3 ዲ አታሚዎችን ፣ ሮቦቶችን ፣ መደበኛ ፒሲ/ላፕቶፕን ፣ አርዱinoኖ/ESP8266/ESP32/RaspberryPi ነገሮችን ፣ ስማርት ሆም መሣሪያዎችን እና በዙሪያው ያለውን ማንኛውንም ነገር መከታተል እና መቆጣጠር እንችላለን። ሌላ አስደሳች ሀሳቦች ካሉዎት ያሳውቁኝ። ለዚህ ሁሉ ምን ያስባሉ?

የሚመከር: