{"id":2117,"date":"2024-03-05T23:11:22","date_gmt":"2024-03-05T18:11:22","guid":{"rendered":"https:\/\/yarat.uz\/?p=2117"},"modified":"2025-03-19T15:27:03","modified_gmt":"2025-03-19T10:27:03","slug":"wifi-tarmoqlarni-izlash-18","status":"publish","type":"post","link":"https:\/\/yarat.uz\/?p=2117","title":{"rendered":"WiFi-tarmoqlar bilan ishlash utilitalari [18+]"},"content":{"rendered":"<p style=\"text-align: center;\"><em><strong>(Material to&#8217;ldirish jarayonida)<\/strong><\/em><\/p>\n<p style=\"text-align: justify;\">Qurilmani WiFi orqali boshqarishga o&#8217;tishdan oldin, hududda WiFi tarmoqlari mavjudligi, ularning himoyalangan (yopiq tarmoq) yoki himoyalanmaganligini (ochiq tarmoqligini) aniqlash, WiFi marshrutizator (router) signallarining darajasini aniqlash talab etiladi. Quyida shunday maqsadlar uchun mo&#8217;ljallangan Arduino IDE sketchlari bilan tanishamiz. Umuman, ushbu dars materialida muntazam ravishda Arduinochi-dasturchilar uchun WiFi-tarmoqlar bilan ishlashga mo&#8217;ljallangan turli utilitalar haqidagi ma&#8217;lumotlar joylashtirib boriladi.<\/p>\n<p style=\"text-align: justify;\">Dastlab dastur menyusining &#8220;<strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b\/ESP8266WiFi<\/strong>&#8221; bo&#8217;limidagi &#8220;<strong>WiFiScan<\/strong>&#8221; tayyor namunaviy sketch bilan tanishamiz.<\/p>\n<p style=\"text-align: justify;\">ESP8266 va ESP32 mikrokontrollerlar oilasiga tegishli platalarda ichki WiFi modullar o&#8217;rnatilgan, ya&#8217;ni, ular asosidagi qurilmalarni WiFi orqali boshqarish uchun alohida WiFi-modullardan foydalanish talab etilmaydi. Biz WiFi tarmoqlarini izlashga mo&#8217;ljallangan sketch bilan ishlashda Wemos D1 mini platasidan foydalanamiz. Sketchga hech qanday o&#8217;zgarish kiritish talab etilmaydi (faqat inglizha so&#8217;zlar tarjima qilingan).<\/p>\n<p><em>Sketch:<\/em><br \/>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>WiFi tarmoqlarini izlash<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n#include &lt;ESP8266WiFi.h&gt;<br \/>\nvoid setup() {<br \/>\nSerial.begin(115200);<br \/>\nSerial.println(F(&#8220;\\nESP8266 yordamida WiFi tarmoqlarini izlashga misol&#8221;));<br \/>\nWiFi.mode(WIFI_STA);<br \/>\nWiFi.disconnect(); \/\/ Oldingi ulangan tarmoqdan chiqamiz<br \/>\ndelay(100);<br \/>\n}<\/p>\n<p>void loop() {<br \/>\nString ssid;<br \/>\nint32_t rssi;<br \/>\nuint8_t encryptionType;<br \/>\nuint8_t *bssid;<br \/>\nint32_t channel;<br \/>\nbool hidden;<br \/>\nint scanResult;<br \/>\nSerial.println(F(&#8220;WiFi tarmoqlarni izlash&#8230;&#8221;));<br \/>\nscanResult = WiFi.scanNetworks(\/*async=*\/false, \/*hidden=*\/true); \/\/ Yashirin tarmoqlarni qo&#8217;shgan holda izlaymiz, ulsr sonini o&#8217;zgaruvchiga o&#8217;zlashtiramiz<br \/>\nif (scanResult == 0) {<br \/>\nSerial.println(F(&#8220;Tarmoq topilmadi&#8221;));<br \/>\n} else if (scanResult &gt; 0) {<br \/>\nSerial.printf(PSTR(&#8220;%d ta tarmoq topildi:\\n&#8221;), scanResult);<br \/>\nfor (int8_t i = 0; i &lt; scanResult; i++) { \/\/ Topilgan tarmoqlar nomlari va xususiyatlari bo&#8217;yicha ro&#8217;yxatini tuzamiz<br \/>\nWiFi.getNetworkInfo(i, ssid, encryptionType, rssi, bssid, channel, hidden);<br \/>\nconst bss_info *bssInfo = WiFi.getScanInfoByIndex(i);<br \/>\nString phyMode;<br \/>\nconst char *wps = &#8220;&#8221;;<br \/>\nif (bssInfo) {<br \/>\nphyMode.reserve(12);<br \/>\nphyMode = F(&#8220;802.11&#8221;);<br \/>\nString slash;<br \/>\nif (bssInfo-&gt;phy_11b) {<br \/>\nphyMode += &#8216;b&#8217;;<br \/>\nslash = &#8216;\/&#8217;;<br \/>\n}<br \/>\nif (bssInfo-&gt;phy_11g) {<br \/>\nphyMode += slash + &#8216;g&#8217;;<br \/>\nslash = &#8216;\/&#8217;;<br \/>\n}<br \/>\nif (bssInfo-&gt;phy_11n) {<br \/>\nphyMode += slash + &#8216;n&#8217;;<br \/>\n}<br \/>\nif (bssInfo-&gt;wps) {<br \/>\nwps = PSTR(&#8220;WPS&#8221;);<br \/>\n}<br \/>\n}<br \/>\nSerial.printf(PSTR(&#8221; %02d: [CH %02d] [%02X:%02X:%02X:%02X:%02X:%02X] %ddBm %c %c %-11s %3S %s\\n&#8221;), i, channel, bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5], rssi, (encryptionType == ENC_TYPE_NONE) ? &#8216; &#8216; : &#8216;*&#8217;, hidden ? &#8216;H&#8217; : &#8216;V&#8217;, phyMode.c_str(), wps, ssid.c_str());<br \/>\nyield();<br \/>\n}<br \/>\n} else {<br \/>\nSerial.printf(PSTR(&#8220;WiFi tarmoqlarni izlashda xatolik %d&#8221;), scanResult);<br \/>\n}<br \/>\ndelay(5000); \/\/ Takroriy izlashdan oldin pauza o&#8217;rnatamiz<br \/>\n}<span class=\"enlighter-g1 wp-dark-mode-ignore\"><\/div><\/div><\/span><\/p>\n<p style=\"text-align: justify;\">Navbatdagi misol yordamida esa, WiFi tarmoq Internetga ulangan yoki ulanmaganligini aniq bir saytga &#8220;ping&#8221; buyrug&#8217;ini yuborish orqali aniqlashimiz mumkin. &#8220;<strong>HostPing<\/strong>&#8221; sketchi Arduino IDE menyusining &#8220;<strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b\/ESP8266Ping<\/strong>&#8221; bo&#8217;limidan yuklanadi (sketch izohlar bilan keltiriladi):<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Saytga ping yuborish<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n#include &lt;ESP8266WiFi.h&gt; \/\/ Kerakli bibliotekalarni ulaymiz<br \/>\n#include &lt;ESP8266Ping.h&gt;<br \/>\nconst char* ssid = &#8220;ssid&#8221;; \/\/ mavjud tarmoq nomini (SSID sini) kiritamiz<br \/>\nconst char* password = &#8220;12345678&#8221;; \/\/ o&#8217;z WiFi tarmog&#8217;imiz parolini kiritamiz<br \/>\nconst char* remote_host = &#8220;www.google.com&#8221;; \/\/ tekshiriladigan sayt manzilini ko&#8217;rsatamiz<\/p>\n<p>void setup(){<br \/>\nSerial.begin(115200);<br \/>\ndelay(10);<br \/>\nSerial.println();<br \/>\nSerial.println(&#8220;WiFi tarmoqqa ulanish &#8220;);<br \/>\nWiFi.begin(ssid, password);<br \/>\nwhile (WiFi.status() != WL_CONNECTED){<br \/>\ndelay(100);<br \/>\nSerial.print(&#8220;.&#8221;);<br \/>\n}<br \/>\nSerial.println();<br \/>\nSerial.print(&#8220;Tarmoqqa ulanish muvaffaqiyatli. Lokal IP-manzil: &#8220;);<br \/>\nSerial.println(WiFi.localIP());<br \/>\nSerial.print(&#8220;Serverga ping yuboramiz&#8230;&#8221;);<br \/>\nSerial.println(remote_host);<br \/>\nif(Ping.ping(remote_host)){ \/\/ Ping yuboramiz<br \/>\nSerial.println(&#8220;Muvaffaqiyatli!&#8221;);<br \/>\n} else {<br \/>\nSerial.println(&#8220;Ulanishda xatolik \ud83d\ude41 Tarmoq internetga ulanmagan!&#8221;);<br \/>\n}<br \/>\n}<\/p>\n<p>void loop(){<br \/>\n}<span class=\"enlighter-g1 wp-dark-mode-ignore\"><\/div><\/div><\/span><\/p>\n<p style=\"text-align: justify;\">Xuddi shuningdek, &#8220;ping&#8221; buyrug&#8217;ini aniq IP-manzil bo&#8217;yicha yuborish kerak bo&#8217;lsa, quyidagi &#8220;<strong>SimplePing<\/strong>&#8221; sketchidan foydalanish mumkin (&#8220;<strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b\/ESP8266Ping<\/strong>&#8221; bo&#8217;limidan yuklanadi):<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>IP-manzilga ping yuborish<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n#include &lt;ESP8266WiFi.h&gt; \/\/ Kerakli bibliotekalarni ulaymiz<br \/>\n#include &lt;ESP8266Ping.h&gt;<br \/>\nconst char* ssid = &#8220;ssid&#8221;; \/\/ mavjud tarmoq nomini (SSID sini) kiritamiz<br \/>\nconst char* password = &#8220;12345678&#8221;; \/\/ o&#8217;z WiFi tarmog&#8217;imiz parolini kiritamiz<br \/>\nconst IPAddress remote_ip(192, 168, 0, 1);\u00a0 \/\/ tekshiriladigan IP-manzilni ko&#8217;rsatamiz<\/p>\n<p>void setup(){<br \/>\nSerial.begin(115200);<br \/>\ndelay(10);<br \/>\nSerial.println();<br \/>\nSerial.println(&#8220;WiFi tarmoqqa ulanish&#8221;);<br \/>\nWiFi.begin(ssid, password);<br \/>\nwhile (WiFi.status() != WL_CONNECTED){<br \/>\ndelay(100);<br \/>\nSerial.print(&#8220;.&#8221;);<br \/>\n}<br \/>\nSerial.println();<br \/>\nSerial.print(&#8220;WiFi tarmoqqa ulanish muvaffaqiyatli. Lokal IP manzil: &#8220;);<br \/>\nSerial.println(WiFi.localIP());<br \/>\nSerial.print(&#8220;Ping yuboriladigan IP-manzil: &#8220;);<br \/>\nSerial.println(remote_ip);<br \/>\nif(Ping.ping(remote_ip)) {<br \/>\nSerial.println(&#8220;Muvaffaqiyatli!&#8221;);<br \/>\n} else {<br \/>\nSerial.println(&#8220;IP-manzilga ulanishda xatolik :(&#8220;);<br \/>\n}<br \/>\n}<\/p>\n<p>void loop()<br \/>\n{<br \/>\n}<span class=\"enlighter-g1 wp-dark-mode-ignore\"><\/div><\/div><\/span><\/p>\n<p style=\"text-align: justify;\"><strong>ESPProLib<\/strong> sketchi. Ushbu utilita yordamida ESP8266 mikrokontrollerlari yordamida hududdagi WiFi qurilmalar haqida quyidagi texnik detallarni (ma&#8217;lumotlarni) olish mumkin:<br \/>\n1) &#8220;Kadr turi&#8221;, 2) &#8220;Kadr ichki turi&#8221;, 3) &#8220;Signal manbai MAC-manzili&#8221;, 4) &#8220;Mo&#8217;ljal&#8221; (signalni qabul qiluvchi) MAC-manzili, 5) &#8220;RSSI&#8221; (qabul qilingan signal quvvati), 6) &#8220;Keyingi raqam&#8221;, 7) &#8220;Kanal raqami&#8221;, 8) &#8220;SSID&#8221; (Tarmoq nomi).<\/p>\n<p style=\"text-align: justify;\">Ushbu ma&#8217;lumotlar yordamida ko&#8217;plab qiziqarli loyihalarni yaratish mumkin. Sketch ishlashi uchun <a href=\"https:\/\/github.com\/RicardoOliveira\/ESPProLib\/tree\/master\">ESPProLib<\/a> bibliotekasi kerak bo&#8217;ladi.<\/p>\n<p><em>Sketch:<\/em><\/p>\n<pre><code><\/code><\/pre>\n<p><iframe loading=\"lazy\" title=\"ESP8266 - WiFi sniffer\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/9OMt-_Sn_eg?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p style=\"text-align: justify;\">Yuqoridagi sketch yordamida olingan texnik ma&#8217;lumotlar (masalan, manba MAC-manzili) yordamida aniq bir qurilma hududda mavjudligi, signal manbai WiFi moduli qaysi mo&#8217;ljal-qurilma WiFi moduliga ma&#8217;lumot yuborayotganligini aniqlash mumkin.<\/p>\n<p style=\"text-align: justify;\">Xususan, navbatdagi <strong>&#8220;FriendFinder&#8221;<\/strong> sketchi yordamida o&#8217;zimizga oldindan tanish MAC-manzilli smartfon egasining sniffer joylashgan hududga kelganligi yoki aksincha, hududdan ketganligini, shuningdek, u qaysi MAC-manzilli qurilma bilan ma&#8217;lumot almashganligini aniqlash mumkin.<\/p>\n<p><em>Sketch:<\/em><\/p>\n<pre><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><em><strong>(Material to&#8217;ldirish jarayonida)<\/strong><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Material to&#8217;ldirish jarayonida) Qurilmani WiFi orqali boshqarishga o&#8217;tishdan oldin, hududda WiFi tarmoqlari mavjudligi, ularning himoyalangan (yopiq tarmoq) yoki himoyalanmaganligini (ochiq tarmoqligini) aniqlash, WiFi marshrutizator (router) signallarining darajasini aniqlash talab etiladi. Quyida shunday maqsadlar uchun mo&#8217;ljallangan Arduino IDE sketchlari bilan tanishamiz. Umuman, ushbu dars materialida muntazam ravishda Arduinochi-dasturchilar uchun WiFi-tarmoqlar bilan ishlashga mo&#8217;ljallangan turli utilitalar haqidagi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-2117","post","type-post","status-publish","format-standard","hentry","category-namunaviy-sketchlar"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts\/2117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2117"}],"version-history":[{"count":29,"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts\/2117\/revisions"}],"predecessor-version":[{"id":3843,"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts\/2117\/revisions\/3843"}],"wp:attachment":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}