{"id":413,"date":"2017-10-30T21:45:37","date_gmt":"2017-10-30T13:45:37","guid":{"rendered":"http:\/\/www.freezhongzi.info\/?p=413"},"modified":"2017-10-30T21:45:37","modified_gmt":"2017-10-30T13:45:37","slug":"mt7688-ap-client%e6%a8%a1%e5%bc%8f","status":"publish","type":"post","link":"https:\/\/bl4kraven.com\/index.php\/2017\/10\/30\/mt7688-ap-client%e6%a8%a1%e5%bc%8f\/","title":{"rendered":"MT7688 AP-Client\u6a21\u5f0f"},"content":{"rendered":"<p>\u6700\u8fd1\u6211\u5728\u7814\u7a76MT7688\u7684\u95ed\u6e90WIFI\u6e90\u7801\uff0c\u53d1\u73b0\u9ed8\u8ba4\u5f00\u542f\u4e86AP\u548cAP-Client\u6a21\u5f0f\uff0c\u4f46STA\u6a21\u5f0f\u9ed8\u8ba4\u6ca1\u9009\u4e2d\uff0c\u4f30\u8ba1\u8981\u652f\u6301\u7684\u8bdd\u5f97\u4fee\u6539\u4ee3\u7801\u3002<\/p>\n<p>MT7688\u6211\u4ee5\u53ca\u5728\u7528LEDE\u4e86\uff0c\u65b0\u7684\u7cfb\u7edf\u5f88\u6d41\u7545\uff0c\u6240\u6709\u987a\u4fbf\u4e5f\u628aWIFI\u79fb\u690d\u4e86\uff0c\u4fee\u6539\u4e86\u51e0\u4e2a\u4e0d\u517c\u5bb9\u7684\u5730\u65b9\u57fa\u672cOK\u4e86\u3002\u672c\u6765\u662f\u60f3\u516c\u5f00\u7684\uff0c\u4f46\u8fd9\u4e2a\u662fMTK\u95ed\u6e90\u9a71\u52a8-_-!!!\uff0c\u4e0d\u80fd\u516c\u5f00\u3002<\/p>\n<p>\u6d89\u53ca\u5230\u7684MT7688.dat\u91cc\u7684\u9a71\u52a8\u53c2\u6570\u662f\u8fd9\u4e48\u51e0\u4e2a\uff1a<\/p>\n<pre><code>ApCliEnable\nApCliSsid\nApCliBssid \/\/ \u8fd9\u4e2a\u4e0d\u662f\u5fc5\u987b\uff0c\u5982\u679c\u4e0d\u63d0\u4f9b\uff0cwifi\u9a71\u52a8\u4f1a\u81ea\u5df1\u53bb\u67e5\u627e\nApCliAuthMode\nApCliEncrypType\nApCliWPAPSK\n<\/code><\/pre>\n<p>\u4f46\u662fOpenWRT\u91cc\u9ed8\u8ba4\u7684uci2dat\u652f\u6301\u8fd9\u4e9b\u53c2\u6570\u6709BUG\uff0c\u56e0\u4e3auci2dat\u9ed8\u8ba4\u53ea\u652f\u6301\u4e00\u4e2awifi-iface\uff0c\u4f46AP-Client\u6a21\u5f0f\u5fc5\u987b\u6709\u4e24\u4e2awifi-iface\uff0c\u4e00\u4e2a\u505aAP\uff0c\u4e00\u4e2a\u505aClient\u3002\u4fee\u6539uci2data:<\/p>\n<pre><code>@@ -1061,23 +1064,69 @@ void hooker(FILE * fp, param * p, const char * devname)\n #endif\n    else if (0 == strmatch(p-&gt;dat_key, \"ApCliEnable\"))\n    {\n-       FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_enable.value);\n+        int j;\n+       for(j=0; j&lt;wifi_cfg[N].vifnum; j++)\n+       {\n+           if (strlen(wifi_cfg[N].vifs[j].apcli_enable.value) &gt; 0)\n+               FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[j].apcli_enable.value);\n+       }\n+       if (j &lt; wifi_cfg[N].vifnum)\n+           FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_enable.value);\n    }\n    else if (0 == strmatch(p-&gt;dat_key, \"ApCliSsid\"))\n    {\n-       FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_ssid.value);\n+        int j;\n+       for(j=0; j&lt;wifi_cfg[N].vifnum; j++)\n+       {\n+           if (strlen(wifi_cfg[N].vifs[j].apcli_ssid.value) &gt; 0)\n+               FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[j].apcli_ssid.value);\n+       }\n+       if (j &lt; wifi_cfg[N].vifnum)\n+           FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_ssid.value);\n+   }\n+   else if (0 == strmatch(p-&gt;dat_key, \"ApCliBssid\"))\n+   {\n+        int j;\n+       for(j=0; j&lt;wifi_cfg[N].vifnum; j++)\n+       {\n+           if (strlen(wifi_cfg[N].vifs[j].apcli_bssid.value) &gt; 0)\n+               FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[j].apcli_bssid.value);\n+       }\n+       if (j &lt; wifi_cfg[N].vifnum)\n+           FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_bssid.value);\n    }\n    else if (0 == strmatch(p-&gt;dat_key, \"ApCliAuthMode\"))\n    {\n-       FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_authmode.value);\n+        int j;\n+       for(j=0; j&lt;wifi_cfg[N].vifnum; j++)\n+       {\n+           if (strlen(wifi_cfg[N].vifs[j].apcli_authmode.value) &gt; 0)\n+               FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[j].apcli_authmode.value);\n+       }\n+       if (j &lt; wifi_cfg[N].vifnum)\n+           FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_authmode.value);\n    }\n    else if (0 == strmatch(p-&gt;dat_key, \"ApCliEncrypType\"))\n    {\n-       FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_encryptype.value);\n+        int j;\n+       for(j=0; j&lt;wifi_cfg[N].vifnum; j++)\n+       {\n+           if (strlen(wifi_cfg[N].vifs[j].apcli_encryptype.value) &gt; 0)\n+               FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[j].apcli_encryptype.value);\n+       }\n+       if (j &lt; wifi_cfg[N].vifnum)\n+           FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_encryptype.value);\n    }\n    else if (0 == strmatch(p-&gt;dat_key, \"ApCliWPAPSK\"))\n    {\n-       FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_password.value);\n+        int j;\n+       for(j=0; j&lt;wifi_cfg[N].vifnum; j++)\n+       {\n+           if (strlen(wifi_cfg[N].vifs[j].apcli_password.value) &gt; 0)\n+               FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[j].apcli_password.value);\n+       }\n+       if (j &lt; wifi_cfg[N].vifnum)\n+           FPRINT(fp, p, \"%s\", wifi_cfg[N].vifs[i].apcli_password.value);\n    }\n     \/* the rest part is quite simple! *\/\n     else\n<\/code><\/pre>\n<p>\u7f16\u8f91\/etc\/config\/wireless\uff1a<\/p>\n<pre><code>config wifi-device 'mt7628'\n    option type 'mt7628'\n    option vendor 'ralink'\n    option band '2.4G'\n    option channel '11'   \/\/ \u8fd9\u4e2a\u5fc5\u987b\u662f\u4f60\u8981\u8fde\u63a5\u8def\u7531\u5668\u7684\u4fe1\u9053\u4e00\u81f4\uff0c\u5426\u5219\u4f1a\u8fde\u4e0d\u4e0a\u7684\n    option country 'CN'\n    option region '1'\n\nconfig wifi-iface 'ap'\n    option device 'mt7628'\n    option ifname 'ra0'\n    option network 'lan'\n    option mode 'ap'\n    option ssid 'AP\u540d'\n    option key 'AP\u5bc6\u7801'\n    option encryption 'psk2'\n    option wpa_crypto 'TKIP+AES'\n    option hidden '1'\n\nconfig wifi-iface 'sta'\n    option device 'mt7628'\n    option ifname 'apcli0'\n    option network 'wan' \/\/ \u4f5c\u4e3a\u5916\u7f51\u63a5\u53e3\n    option mode 'sta'   \/\/  \u8fd9\u4e2a\u6ca1\u7528\uff0cuci2dat\u6839\u672c\u4e0d\u89e3\u6790\n    option ApCliEnable '1'\n    option ApCliSsid '\u8def\u7531\u5668\u540d'\n    option ApCliAuthMode 'WPA2PSK'\n    option encryption 'psk2'     \/\/ \u8fd9\u4e2a\u5fc5\u987b\uff0c\u5982\u679c\u7701\u7565\u8fd9\u4e2a\u4f1a\u5bfc\u81f4WIFI\u9a71\u52a8\u9519\u8bef\u7684\u8ba4\u8bc1\u534f\u8bae\n    option ApCliEncrypType 'TKIP'\n    option ApCliWPAPSK '\u8def\u7531\u5668\u5bc6\u7801'\n<\/code><\/pre>\n<p>\u5728\/etc\/config\/network\u91cc\u4fee\u6539wan\uff1a<\/p>\n<pre><code>config interface 'wan'\n    option ifname 'apcli0'\n    option force_link '1'\n    option proto  dhcp\n<\/code><\/pre>\n<p>\u4e00\u5f00\u59cb\u8c03\u8bd5\u6b7b\u6d3b\u8fde\u4e0d\u4e0a\uff0c\u903c\u5f97\u53ea\u80fd\u770bWIFI\u9a71\u52a8\u4ee3\u7801\u53d1\u73b0\u5e95\u5c42\u7684\u8ba4\u8bc1\u534f\u8bae\u9700\u8981\u52a0\u4e0aoption encryption\uff0c\u8fd8\u6709\u5c31\u662f\u5982\u679c\u662fAP-Client\u6a21\u5f0f\u7684\u8bdd\u5c31\u4e0d\u80fd\u81ea\u52a8\u9009\u62e9\u4fe1\u9053\u4e86\uff0c\u5fc5\u987b\u8ddf\u7740\u8def\u7531\u5668\u7684\u4fe1\u9053\u6765\uff0c\u5176\u5b9e\u628aAP\u548cClient\u505a\u4e2a\u6865\u63a5\u5c31\u662f\u4e00\u4e2a\u4fe1\u53f7\u4e2d\u7ee7\u4e86\uff0c\u4e0d\u8fc7WIFI\u9a71\u52a8\u5e95\u5c42\u597d\u50cf\u652f\u6301MAC\u5c42\u4e0a\u7684\u4e2d\u7ee7\uff0c\u8fd9\u4e2a\u6ca1\u7a7a\u7814\u7a76\u4e86\u3002<\/p>\n<p>\u5728LEDE\u7684iwinfo\u6ca1\u6cd5\u67e5\u770bWIFI\u7684Link Quality\uff0c\u800c\u4e14iw\u4e5f\u8f93\u51fa\u4e3a\u7a7a\uff0c\u539f\u56e0\u5c31\u662fWIFI\u9a71\u52a8\u8fd8\u6ca1\u542f\u7528CFG80211\u652f\u6301\u3002\u4f46\u662fMT7688\u7684WIFI\u9a71\u52a8\u6bd4\u8f83\u8001\uff0c\u5bfc\u81f4CFG80211\u7684\u4ee3\u7801\u8ddf\u6700\u65b0\u7684\u5185\u6838\u4e0d\u517c\u5bb9\uff0c\u6240\u4ee5\u6211\u75af\u72c2\u7684\u5728github\u4e0a\u4e00\u904d\u67e5\u627e\u8865\u4e01\uff0c\u4e00\u904d\u4fee\u6539\u4ee3\u7801\u3002\u6700\u540e\u603b\u7b97\u662f\u80fd\u8fd0\u884ciw\u4e86\uff0c\u4f46\u662fiwinfo\u8f93\u51fa\u7684\u4fe1\u606f\u4e0d\u5168\uff0c\u4f30\u8ba1\u662f\u901a\u8fc7ioctl\u7684\u65b9\u5f0f\u4e0e\u9a71\u52a8\u6253\u4ea4\u9053\uff0c\u9a71\u52a8\u4e0d\u652f\u6301\uff0c\u8fd9\u4e2a\u540e\u9762\u518d\u4fee\u590d\u3002<\/p>\n<p>\u6211\u5173\u4e8e\u6700\u8fd1\u7206\u51fa\u7684WIFI\u7684WPA2\u6f0f\u6d1e<a href=\"https:\/\/www.krackattacks.com\/\">KRACK<\/a>\uff0c\u6df1\u611f\u9707\u60ca\uff01\u57fa\u672c\u4e0a\u6240\u6709WIFI\u8bbe\u5907\u6ca1\u6709\u5e78\u514d\uff0c\u90a3\u4e9bIoT\u8bbe\u5907\u4f30\u8ba1\u6c38\u8fdc\u90fd\u6ca1\u6cd5\u66f4\u65b0\u8865\u4e01\u3002\u6839\u636e\u6f0f\u6d1e\u63cf\u8ff0\uff0c\u57fa\u672c\u4e0a\u662f\u53ef\u4ee5\u63ed\u79d8\u5ba2\u6237\u7aef\u6216\u53cc\u5411\u901a\u4fe1\u7684\u6570\u636e\uff0c\u4f46\u4e0d\u80fd\u7834\u89e3WIFI\u5bc6\u7801\uff01<\/p>\n<p>BTW: \u8fd9\u4e2a\u662f\u51e0\u4e2a\u793c\u62dc\u524d\u641e\u7684\u4e86\uff0c\u653e\u8349\u7a3f\u7bb1\u91cc\u90fd\u8981\u957f\u8349\u4e86\uff0c\u4eca\u5929\u665a\u4e0a\u62bd\u7a7a\u586b\u4e86\u5751\uff0c\u8fd1\u5e74\u6765\u8bb0\u5fc6\u529b\u8870\u9000\uff0c\u5fc5\u987b\u591a\u8bb0\u5f55\uff01\uff01\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1\u6211\u5728\u7814\u7a76MT7688\u7684\u95ed\u6e90WIFI\u6e90\u7801\uff0c\u53d1\u73b0\u9ed8\u8ba4\u5f00\u542f\u4e86AP\u548cAP-Clien &hellip; <a href=\"https:\/\/bl4kraven.com\/index.php\/2017\/10\/30\/mt7688-ap-client%e6%a8%a1%e5%bc%8f\/\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a> <a href=\"https:\/\/bl4kraven.com\/index.php\/2017\/10\/30\/mt7688-ap-client%e6%a8%a1%e5%bc%8f\/\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-413","post","type-post","status-publish","format-standard","hentry","category-openwrt"],"_links":{"self":[{"href":"https:\/\/bl4kraven.com\/index.php\/wp-json\/wp\/v2\/posts\/413","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bl4kraven.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bl4kraven.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bl4kraven.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bl4kraven.com\/index.php\/wp-json\/wp\/v2\/comments?post=413"}],"version-history":[{"count":0,"href":"https:\/\/bl4kraven.com\/index.php\/wp-json\/wp\/v2\/posts\/413\/revisions"}],"wp:attachment":[{"href":"https:\/\/bl4kraven.com\/index.php\/wp-json\/wp\/v2\/media?parent=413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bl4kraven.com\/index.php\/wp-json\/wp\/v2\/categories?post=413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bl4kraven.com\/index.php\/wp-json\/wp\/v2\/tags?post=413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}