PQI Air Penでbusybox-mipsの追加なしに既存WiFiに接続する[追記あり]

2017年3月8日パソコン・インターネット,モバイル

PQI Air Penを持ってます。ネットワークブリッジ機能と、WiFiストレージ機能を搭載した装置です。

[amazonjs asin="B00BNAST0O" locale="JP"]

先人の解析の結果、rootアカウントでtelnetログインできる事がわかりました。また、自動起動スクリプトの使い方も解析されています。ありがとうございます。

この記事の中では、既存WiFiに接続するために、PQI Air Penの設定画面にwgetでアクセスしています。wgetはPQI Air Pen搭載のbusyboxには組み込まれていないので、次の所からbusybox-mipsをダウンロードして使っています。

接続は、設定画面のCGIとして動作しているのだから、原理的にはwgetでつながなくても動作させられるはずと考え、解析を進めました。その結果、次の事がわかりました。

  • 設定フォームからはCGIとしてcmdを呼び出しているが、このCGIの実体は/tmp/www/cgi-biin/cgiMain
  • このコマンドが呼び出されると、一つ上の同名のhtmlファイルにアクセスされる
    • この場合は、../cmd.html (/tmp/www/cmd.html)
    • このファイルが見つからないと、プログラムが動作しない
  • PATHに/tmp/www/cgi-binを追加し、引数をQUERY_STRINGに設定して、../cmd.htmlがあるディレクトリで、cmdを呼び出せば良い

これがわかれば、簡単です。

~ # ls -l /tmp/www/cmd.html /tmp/www/cgi-bin/cgiMain /tmp/www/cgi-bin/cmd 
-rwxr-xr-x    1 root     root       126332 Feb  7  2013 /tmp/www/cgi-bin/cgiMain
lrwxrwxrwx    1 root     root            7 Jan  1 00:00 /tmp/www/cgi-bin/cmd -> cgiMain
-rw-r--r--    1 root     root            0 Feb  7  2013 /tmp/www/cmd.html

まずは、PQI Air Penの設定画面で、WiFiステーションに接続できる様にしておいてください。

PQI Air Pen設定

次のスクリプト(connect.sh)を実行すると、最後に接続したWiFiステーションに自動接続します。接続に必要なSSIDやパスワードは、NVRAMに保存されています。

#!/bin/sh
# Copyright (c) 2017 Oichinote
# Created by Oichinokata on 2017-03-03
# License GPL2
echo 1 > /proc/gpio/gpio23_out
#export STA_SSID='Your Station'\''s SSID'
#export STA_SECMODE='WPA-PSK'
#export STA_SECMODE='WEP'
#export STA_SECMODE='NONE'
#export STA_PASSWD='Your Station'\''s Password'
export PATH='/usr/bin:/bin:/usr/sbin:/sbin:/etc/ath:/tmp/www/cgi-bin'
cd /tmp/www/cgi-bin
#QUERY_STRING='set=STASSID&STASSID_VALUE='$STA_SSID cmd
#QUERY_STRING='set=STAWPA&STAWPA_VALUE='$STA_SECMODE cmd
#QUERY_STRING='set=STAPASS&STAPASS_VALUE='$STA_PASSWD cmd
QUERY_STRING='cmd=CONNECT' cmd
echo 0 > /proc/gpio/gpio23_out

個別に、SSIDやパスワードを指定したい方は、上記のコメントを適切に設定して試してみてください。使い方がわからなければ、コメントでご質問ください。SSIDやパスワードに"'"(シングルクォート)を使っていると、エスケープ方法がちょっと特殊になります。

切断するためには、次のスクリプト(disconnect.sh)を実行します。

#!/bin/sh
# Copyright (c) 2017 Oichinote
# Created by Oichinokata on 2017-03-03
# License GPL2
echo 1 > /proc/gpio/gpio23_out
export PATH='/usr/bin:/bin:/usr/sbin:/sbin:/etc/ath:/tmp/www/cgi-bin'
cd /tmp/www/cgi-bin
QUERY_STRING='cmd=DISCONNECT' cmd
echo
echo 0 > /proc/gpio/gpio23_out

接続状態を確認するには、次のスクリプト(connstat.sh)で可能です。

#!/bin/sh
# Copyright (c) 2017 Oichinote
# Created by Oichinokata on 2017-03-03
# License GPL2
echo 1 > /proc/gpio/gpio23_out
export PATH='/usr/bin:/bin:/usr/sbin:/sbin:/etc/ath:/tmp/www/cgi-bin'
cd /tmp/www/cgi-bin
QUERY_STRING='ask=CONNSTATE' cmd
echo 0 > /proc/gpio/gpio23_out

次のように使います。コマンド実行中は、緑色のLEDが光ります。(追記 2017-03-08 22:47 上記の他に、reboot.shも追加しました。)

$ telnet 192.168.200.1
Trying 192.168.200.1...
Connected to 192.168.200.1.
Escape character is '^]'.
(none) login: root
Password: pqiap


BusyBox v1.01 (2013.02.07-09:36+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ # cd /tmp/www/ftp/sda1/commands/
/tmp/www/ftp/sda1/commands # ./connect.sh 
HTTP/1.0 200 OK
Content-type: text/html
Connection: close


OK
/tmp/www/ftp/sda1/commands # ./connstate.sh 
HTTP/1.0 200 OK
Content-type: text/html
Connection: close


Connected
/tmp/www/ftp/sda1/commands # ./disconnect.sh 
HTTP/1.0 200 OK
Content-type: text/html
Connection: close


OK
/tmp/www/ftp/sda1/commands # ./connstate.sh 
HTTP/1.0 200 OK
Content-type: text/html
Connection: close


Disconnected
/tmp/www/ftp/sda1/commands # ./reboot.sh 
HTTP/1.0 200 OK
Content-type: text/html
Connection: close


Rebooting
/tmp/www/ftp/sda1/commands # Connection closed by foreign host.

PQI Air Penの電源をオンにして、自動的に設定済みのWiFiにつなぐためには、次のスクリプトをthisisautorunとして、上記のスクリプトと共に、microSDのトップディレクトリに保存しておきます。接続スクリプトを開始するまでの8秒待ちが肝かもしれません。それと、やはりthisautorunとは別に実行する必要があるようです。

#!/bin/sh
# Copyright (c) 2017 Oichinote
# Created by Oichinokata on 2017-03-03
# License GPL2
(sleep 8; /tmp/www/ftp/sda1/connect.sh) &

次の記事で設定されている8秒をそのまま使わせていただきました。ありがとうございます。

これらのスクリプトをZIPにまとめておきました。microSDカードのトップディレクトリに展開してください。ディレクトリを作らずに、ベタに展開しますので、ご注意ください。

[amazonjs asin="B00ER06PV2" locale="JP"]

cmdコマンドの実体の/tmp/www/cgi-biin/cgiMainには、/bin/cfgからもリンクが張られています。cfgコマンドから、ネットワーク関係のほとんどの設定ができる様になっています。英語ですが、次のページで詳しく解説されています。

なお、PQI Air Penの設計思想は、ネットワークブリッジ的な動作を想定していると思われます。WAN側(有線LAN、WiFiとも)にも、telnet、ftpのポートが開かれていますので、ホテルルータとして使うのは危険です。microSDカードの中とか、覗き見されてしまいます。パケットもスルーになっているので、LAN側も外から丸見えになります。安全な環境の中でお使いください。

PQI Air Penはブリッジ、いや、やはりルーター?![追記あり]

Posted by お市のかた