সুচিপত্র:

অ্যান্ড্রয়েড/আইওএস অ্যাপ দূর থেকে আপনার ওপেনওয়ার্ট রাউটার অ্যাক্সেস করতে: 11 টি ধাপ
অ্যান্ড্রয়েড/আইওএস অ্যাপ দূর থেকে আপনার ওপেনওয়ার্ট রাউটার অ্যাক্সেস করতে: 11 টি ধাপ

ভিডিও: অ্যান্ড্রয়েড/আইওএস অ্যাপ দূর থেকে আপনার ওপেনওয়ার্ট রাউটার অ্যাক্সেস করতে: 11 টি ধাপ

ভিডিও: অ্যান্ড্রয়েড/আইওএস অ্যাপ দূর থেকে আপনার ওপেনওয়ার্ট রাউটার অ্যাক্সেস করতে: 11 টি ধাপ
ভিডিও: মোবাইল থেকে অ্যাপস ডিলিট করলে কোথায় যায়?How To Permanently Delete and Unistall Mobile Apps 2024, জুন
Anonim
অ্যান্ড্রয়েড/আইওএস অ্যাপ দূর থেকে আপনার ওপেনওয়ার্ট রাউটার অ্যাক্সেস করতে
অ্যান্ড্রয়েড/আইওএস অ্যাপ দূর থেকে আপনার ওপেনওয়ার্ট রাউটার অ্যাক্সেস করতে
অ্যান্ড্রয়েড/আইওএস অ্যাপ দূর থেকে আপনার ওপেনওয়ার্ট রাউটার অ্যাক্সেস করতে
অ্যান্ড্রয়েড/আইওএস অ্যাপ দূর থেকে আপনার ওপেনওয়ার্ট রাউটার অ্যাক্সেস করতে

আমি সম্প্রতি একটি নতুন রাউটার (Xiaomi Mi Router 3G) কিনেছি। এবং অবশ্যই, হার্ডওয়্যারের এই নতুন, দুর্দান্ত অংশটি আমাকে এই প্রকল্পে কাজ শুরু করতে অনুপ্রাণিত করেছে;)

ধাপ 1: আমি ধরে নিচ্ছি, যে আপনার ইতিমধ্যে OpenWrt আছে…।

আমি ধরে নিচ্ছি, আপনার ইতিমধ্যেই OpenWrt আছে…।
আমি ধরে নিচ্ছি, আপনার ইতিমধ্যেই OpenWrt আছে…।

আমাকে প্রথমে OpenWrt ইনস্টল করতে হয়েছিল… বেশিরভাগ ক্ষেত্রে, আমি এই গাইডটি অনুসরণ করেছি (এই রাউটার মডেলের জন্য নির্দিষ্ট): https://dzone.com/articles/hacking-into-xiaomi-mi-… এই কাজ করার সময়, আমি এই দুর্দান্ত ভিডিওটি পেয়েছি: Openwrt ইনস্টলেশন, ওয়াইফাই বেঞ্চমার্ক, গার্লফ্রেন্ড ঝলকানি।:)

মনোযোগ! OpenWrt ইনস্টল করা আপনার রাউটারকে ইট দিতে পারে। কিন্তু একবার সম্পন্ন হলে, এটি সম্পূর্ণ শক্তি এবং নিয়ন্ত্রণ আনলক করে। আমি এখানে কোন নির্দেশনা দেওয়ার জন্য যথেষ্ট সাহসী নই, কারণ তারা প্রতিটি রাউটার মডেলের জন্য আলাদা হতে পারে।

কিন্তু যদি আপনার রাউটারে ইতিমধ্যেই OpenWrt থাকে, তাহলে আপনি এই টিউটোরিয়ালটি নোটিমে শুরু করতে পারবেন।

বিটিডব্লিউ, কিছু ডেভেলপমেন্ট বোর্ড ওপেনওয়ার্টের বাইরে আসে, যেমন পেঁয়াজ ওমেগা, ভোকর, লিঙ্কআইট স্মার্ট 7688 এবং অন্যান্য। এই টিউটোরিয়ালটি এই ধরনের অ্যাপ তৈরির পিছনে কিছু মৌলিক ধারণা ব্যাখ্যা করে, যাতে আপনি রাস্পবেরি পাই এবং পছন্দগুলির সাথে কাজ করার জন্য এটি সহজেই মানিয়ে নিতে পারেন।

এই প্রকল্পের জন্য, আমি বেশিরভাগ প্রাক-ইনস্টল করা সফ্টওয়্যার ব্যবহার করব (যেকোন ওপেনওয়ার্ট-সক্ষম রাউটারে উপলব্ধ)। কিন্তু কিছু উন্নত কার্যকারিতার জন্য, আমাকে অতিরিক্ত প্যাকেজ ইনস্টল করতে হয়েছিল। এটি মাত্র কয়েকটি ক্লিকে সম্পন্ন করা হয়েছে, তাই আমি এখানে নির্দেশাবলী অন্তর্ভুক্ত করব।

এছাড়াও, আমি ধরে নিচ্ছি যে আপনি ইতিমধ্যে জানেন:

  • কিভাবে আপনার OpenWrt রাউটারে SSH টার্মিনাল খুলবেন/ব্যবহার করবেন
  • কিভাবে আপনার রাউটারে ফাইল আপলোড/সম্পাদনা করবেন (FileZilla বা scp/sftp ব্যবহার করুন)
  • লিনাক্স কনসোলের সাথে কীভাবে কাজ করবেন

পদক্ষেপ 2: সফ্টওয়্যার এবং সরঞ্জাম

সফটওয়্যার এবং টুলস
সফটওয়্যার এবং টুলস

স্মার্টফোনের দিকে, আমি ব্লাইঙ্ক ব্যবহার করছি। এটি যেকোনো হার্ডওয়্যার নিয়ন্ত্রণ করতে iOS এবং Android অ্যাপ সরবরাহ করে। আপনি সহজেই আপনার স্মার্টফোনে উইজেটগুলি টেনে এবং ফেলে দিয়ে আপনার সমস্ত প্রকল্পের জন্য সুন্দর গ্রাফিক ইন্টারফেস তৈরি করতে পারেন। Blynk বেশিরভাগই Arduino, Raspberry Pi, ইত্যাদির সাথে ব্যবহার করা হয় কিন্তু কেন রাউটারে নিজেই চালানো হচ্ছে না?;)

ডিভাইসের পাশে আমি লুয়া ব্যবহার করব প্রয়োজনীয় কার্যকারিতা স্ক্রিপ্ট করার জন্য। এটি কাজ করার জন্য এত সুবিধাজনক নয় (প্রতিটি পরিবর্তনের জন্য পুনরায় কম্পাইল করা ইত্যাদি) এটি ডিফল্ট ওয়েব ইন্টারফেস, LuCI দ্বারা ব্যবহৃত হয়।

ধাপ 3: একটি ন্যূনতম অ্যাপ তৈরি করা

Blynk এবং Lua দিয়ে শুরু করা যত সহজ:

  • ব্লাইঙ্ক অ্যাপটি ডাউনলোড করুন (অ্যাপ স্টোর, গুগল প্লে থেকে)
  • একটি নতুন প্রকল্প তৈরি করুন এবং Auth টোকেন পান
  • OpenWrt এর জন্য Blynk Lua ইনস্টলেশন নির্দেশাবলী অনুসরণ করুন।

আপনার রাউটার কনসোল অ্যাক্সেস করতে SSH ব্যবহার করুন। ডিফল্ট উদাহরণ চালানোর পরে:

lua./examples/client.lua

আমাদের এইরকম কিছু দেখা উচিত:

সংযুক্ত হচ্ছে…

SSL হ্যান্ডশেক… রেডি।

যার অর্থ অ্যাপের সাথে নিরাপদ, দ্বিমুখী সংযোগ স্থাপন করা হয়েছে! হ্যাঁ!

আমরা এখন প্রদত্ত উদাহরণটি সহজেই প্রসারিত করতে পারি, তাই এটি আকর্ষণীয় কিছু করে। আমি এটি সম্পাদনা করার জন্য এই উদাহরণের একটি অনুলিপি তৈরি করেছি:

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

ধাপ 4: কিছু তথ্য যোগ করা: ক্লায়েন্টের সংখ্যা, WAN IP ঠিকানা, আপটাইম

মৌলিক ধারণা হল ওএস থেকে পর্যায়ক্রমে তথ্য পাওয়া, প্রয়োজনে কিছু সাধারণ গণনা করা, এবং তারপর ফলাফল প্রদর্শনের জন্য ব্লাইঙ্কে পাঠানো।

লিনাক্স/ওপেনওয়ার্টে, আমাদের সিস্টেম ডেটা পাওয়ার বিভিন্ন উপায় রয়েছে:

  • একটি কমান্ড চালান, এবং পাঠ্য এটি আউটপুট বিশ্লেষণ
  • একটি কমান্ড চালান, এবং প্রস্থান কোডটি ফিরে আসে তা দেখুন
  • /Proc/এবং/sys/class/ডিরেক্টরিতে অবস্থিত একটি সিস্টেম ফাইল পড়ুন

এখন আমি সংযুক্ত ডিভাইসের সংখ্যা প্রদর্শন করতে চাই।

যখন আমি কনসোলে cat/proc/net/arp চালাই, এটি তাদের MAC এবং 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

আমরা এটি সরাসরি লুয়ায় বিশ্লেষণ করতে পারি, কিন্তু বিশেষায়িত ইউটিলিটি ব্যবহার করা প্রায়শই সহজ হয়।

এআরপি আউটপুট থেকে ক্লায়েন্টের সংখ্যা পেতে, আমাকে টেবিলটি ফিল্টার করতে হবে (অপ্রাসঙ্গিক আইটেমগুলি সরিয়ে ফেলতে হবে) এবং টেবিলের সারি গণনা করতে হবে, যার ফলে নিম্নলিখিত কমান্ডটি আসবে:

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

চল এটা চেষ্টা করি:

root@router: ~/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") যদি ফাইল না হয় তাহলে ফিরুন "..পথ.." -> ".. কন্টেন্ট) রিটার্ন কন্টেন্ট শেষ

এই ইউটিলিটিগুলি ব্যবহার করে, আমরা এখন প্রকৃত ডেটা আনার ফাংশনগুলি বাস্তবায়ন করতে পারি:

ফাংশন getArpClients ()

রিটার্ন টনম্বার (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) শেষ ফাংশন getUptime () return tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1 } '')) শেষ ফাংশন getWanIP () return exec_out ("ifconfig eth0.2 | grep 'inet addr:' | cut -d: -f2 | awk '{print $ 1}'") শেষ

আপনি কিভাবে এই শেল কমান্ডগুলির অংশগুলি চালাতে পারেন, এটি কীভাবে কাজ করে তা গভীরভাবে বোঝার জন্য এবং এটি আপনার প্রয়োজনের সাথে সামঞ্জস্য করতে।

সবচেয়ে সহজ অংশ হল Blynk অ্যাপে ডেটা পাঠানো। ডিফল্ট উদাহরণ ইতিমধ্যে টাইমার সেট করে, যা প্রতি 5 সেকেন্ডে কিছু কোড চালায়, তাই আমরা এটি পুনরায় ব্যবহার করি:

স্থানীয় tmr1 = টাইমার: নতুন {ব্যবধান = 5000, func = ফাংশন ()

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

অ্যাপটিতে, আমরা label টি লেবেল উইজেট যুক্ত করি এবং সেগুলি অনুযায়ী ভার্চুয়াল পিন 10, 11, 12 এ বরাদ্দ করি।

যদিও এটি কাজ করে, এটি বরং অদক্ষ, কারণ WAN IP বা ক্লায়েন্টের সংখ্যা এত ঘন ঘন আপডেট হয় না। আসুন এটি ঠিক করি।

WAN IP এর জন্য, আমরা এটিকে সংযুক্ত হ্যান্ডলারের দিকে সরাই। এটি প্রতিবার চালানো হবে যখন রাউটার ব্লাইঙ্ক ক্লাউডের সাথে সংযোগ স্থাপন করবে। এটি যথেষ্ট হওয়া উচিত:

blynk: চালু ("সংযুক্ত", ফাংশন ()

মুদ্রণ ("প্রস্তুত।") blynk: virtualWrite (12, getWanIP ()) শেষ)

আপটাইম এবং ক্লায়েন্ট নম্বরের জন্য, আমরা 5 মিনিটের সাথে একটি পৃথক টাইমার তৈরি করি। অন্তর:

স্থানীয় tmr2 = টাইমার: নতুন {ব্যবধান = 5*60*1000, func = ফাংশন ()

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

ধাপ 5: ওয়াইফাই নিয়ন্ত্রণ: চালু/বন্ধ

ওয়াইফাই নিয়ন্ত্রণ: চালু/বন্ধ
ওয়াইফাই নিয়ন্ত্রণ: চালু/বন্ধ

এখন পর্যন্ত, আমরা ডিভাইস থেকে কিছু তথ্য পাচ্ছিলাম আসুন এটি নিয়ন্ত্রণ করার চেষ্টা করি!

blynk: on ("V20", function (param)

যদি param [1] == "1" তাহলে os.execute ("wifi up") অন্যথায় os.execute ("wifi down") শেষ শেষ)

অ্যাপের পাশে, আমি কেবল একটি বোতাম উইজেট (মোড: স্যুইচ) যুক্ত করেছি এবং এটি V20 এ বরাদ্দ করেছি।

এটাই. আশ্চর্যজনক।

ধাপ 6: সিস্টেম পরিসংখ্যান চার্ট

সিস্টেম পরিসংখ্যান চার্ট
সিস্টেম পরিসংখ্যান চার্ট
সিস্টেম পরিসংখ্যান চার্ট
সিস্টেম পরিসংখ্যান চার্ট

ফাংশন getCpuLoad ()

ফিরতি টনমার {মুদ্রণ ($ 3- $ 7)/$ 2 * 100.0} ' )) শেষ

আমাদের ব্লাইঙ্কে ডেটা পাঠাতে হবে (আসুন আবার tmr1 ব্যবহার করি):

স্থানীয় tmr1 = টাইমার: নতুন {ব্যবধান = 5000, func = ফাংশন ()

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

অ্যাপ সাইডে, সুপারচার্ট উইজেট যোগ করুন। CPU, RAM ডেটাস্ট্রিম যোগ করুন এবং V5, V6 এ বরাদ্দ করুন।

ধাপ 7: HDD স্পিনিং স্ট্যাটাস

আমার রাউটারে একটি বাহ্যিক HDD ড্রাইভ রয়েছে যা একটি নেটওয়ার্ক সংযুক্ত স্টোরেজ ডিভাইস হিসাবে সংযুক্ত। জিনিস হল, এই ড্রাইভটি যখন কেউ এটি অ্যাক্সেস করে তখন ঘূর্ণন শুরু করতে এবং একটি সময়সীমার পরে স্থগিত করার জন্য কনফিগার করা হয়।

স্পষ্টতই, এটি একটি দিন জুড়ে কতবার চালু হয় তা জানার জন্য শীতল হবে। তাই আমি আমার সিস্টেম চার্টে আরেকটি ডাটা স্ট্রিম যুক্ত করেছি।

এইচডিডি ড্রাইভের স্ট্যাটাস পেতে এটি একটু বেশি জটিল, কিন্তু আমি একটি উপায় খুঁজে পেয়েছি! প্রথমত, SSH কনসোল থেকে smartmontools ইনস্টল করুন:

opkg আপডেট

opkg smartmontools ইনস্টল করুন

তারপরে, আমাদের কোডে, আমাদের একটি বিশেষ কমান্ড চালাতে হবে এবং প্রস্থান কোডটি পরীক্ষা করতে হবে:

ফাংশন exec_ret (cmd)

local exit = os.execute (cmd) print ("Run:"..cmd.. " -> exit:".. exit) return exit end function getHddSpinning () যদি exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0 তারপর 1 ফেরত দিন অন্যদিকে 0 শেষ শেষ

দ্রষ্টব্য: আমার HDD হল /dev /sda

ধাপ 8: নেটওয়ার্ক কার্যকলাপ চার্ট

নেটওয়ার্ক কার্যকলাপ চার্ট
নেটওয়ার্ক কার্যকলাপ চার্ট

আমরা আরেকটি সুপারচার্ট উইজেট তৈরি করি (আগেরটির মতো), TX এবং RX ডেটাস্ট্রিম যোগ করুন, এবং V1 এবং V2 এ বরাদ্দ করুন। দ্রষ্টব্য: আমি WAN পোর্ট স্ট্যাটিক প্রদর্শন করতে চাই, এবং আমার WAN পোর্ট eth0.2

সহায়ক ফাংশন:

ফাংশন getWanRxBytes ()

রিটার্ন টনম্বার (read_file ("/sys/class/net/eth0.2/পরিসংখ্যান/rx_bytes")) ফাংশন শেষ করুন) শেষ

পরবর্তী, একই tmr1 এ কিছু কোড যোগ করুন। এটি আরও জটিল, কারণ আমাদের কেবল প্রেরিত/প্রাপ্ত বাইটের পার্থক্য গণনা এবং প্রদর্শন করতে হবে:

স্থানীয় prevTx, prevRx

স্থানীয় tmr1 = টাইমার: নতুন {ব্যবধান = 5000, func = ফাংশন () স্থানীয় tx = getWanTxBytes () স্থানীয় 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, getHddSpinning))) শেষ}

ধাপ 9: বিজ্ঞপ্তি

বিজ্ঞপ্তি
বিজ্ঞপ্তি

আমার রাউটার যখন বিদ্যুৎ বা ইন্টারনেট সংযোগ হারায় তখন আমিও বিজ্ঞপ্তি পেতে চাই। এর জন্য আমাদের বিজ্ঞপ্তি উইজেট দরকার।

উইজেট সেটিংসে, "অফলাইন বিজ্ঞপ্তি" সক্ষম করুন। কোন কোডের প্রয়োজন নেই। কিন্তু আমরা আমাদের কোড থেকে কাস্টম বিজ্ঞপ্তি পাঠাতে পারি।

ধাপ 10: ব্যাকগ্রাউন্ডে অটোরান

আপাতত স্ক্রিপ্টটি ম্যানুয়ালি এক্সিকিউট করতে হবে, কিন্তু রাউটার চালিত হলে আমি এটি স্বয়ংক্রিয়ভাবে ব্যাকগ্রাউন্ডে চালাতে চাই।

এটি একটি পরিষেবা তৈরি করে করা হয়। /Etc/init.d/blynkmon একটি ফাইল তৈরি করুন:

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

START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; তারপর প্রতিধ্বনি "blynkmon ইতিমধ্যে চলছে" প্রস্থান 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} স্টপ () {যদি [! -ফ $ pidfile]; তারপর প্রতিধ্বনি "blynkmon চলছে না" প্রস্থান 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}

দ্রষ্টব্য: আপনার-অথ-টোকেন প্রতিস্থাপন করতে ভুলবেন না

তারপর, blynkmon পরিষেবা সক্ষম করুন:

পরিষেবা blynkmon সক্ষম

ধাপ 11: উপসংহার এবং আরও ধারণা

উপসংহার এবং আরও ধারণা
উপসংহার এবং আরও ধারণা

আপনি আমার Blynk প্রজেক্টের ক্লোন পেতে এই QR স্ক্যান করতে পারেন। এর জন্য কিছু এনার্জি পয়েন্ট (4600) প্রয়োজন, কারণ এটি প্রচুর উইজেট ব্যবহার করে!

এখানে সম্পূর্ণ লুয়া কোড খুঁজুন:

এতদূর ভাল, কিন্তু এখানে কিছু ধারণা আছে যা আমি নিকট ভবিষ্যতে যোগ করতে চাই।

  • রিবুট কমান্ড যোগ করুন। দুর্ঘটনাক্রমে এটিতে ক্লিক করা বন্ধ করুন।
  • যেকোন লিনাক্স কমান্ড চালানোর জন্য টার্মিনাল উইজেট যুক্ত করুন।
  • CPU তাপমাত্রা চার্ট যোগ করুন।

    ইউপিডি: দুর্ভাগ্যবশত ওপেনওয়ার্টে বর্তমানে আমার রাউটার মডেলের জন্য কিছু ড্রাইভার নেই। কিন্তু এটি অন্যান্য অনেক রাউটারের জন্য উপলব্ধ

  • একটি নির্দিষ্ট ডিভাইস নেটওয়ার্ক যোগদান/ছেড়ে গেলে বিজ্ঞপ্তি যোগ করুন আমাদের কাছে ইতিমধ্যেই arp তথ্য আছে, এখন শুধুমাত্র MAC ঠিকানাটি পরীক্ষা করুন।

এই ভাবে, আমরা 3D প্রিন্টার, রোবট, একটি নিয়মিত পিসি/ল্যাপটপ, Arduino/ESP8266/ESP32/RaspberryPi সামগ্রী, স্মার্ট হোম ডিভাইস এবং আশেপাশের যেকোনো কিছু নিরীক্ষণ ও নিয়ন্ত্রণ করতে পারি। অন্য কোন আকর্ষণীয় ধারণা থাকলে আমাকে জানান। আপনি এই সব সম্পর্কে কি মনে করেন?

প্রস্তাবিত: