詳しいことはすでにこちらのブログやこちらで書かれているので省略しますが、要するにWifiAPにもWifiClientにもなるSDカードで、中でFTPとHTTPD(と、何故かTelnetd)が動いているのであれこれしやすいというわけです。ちなみに、いつどこで買ったかもよく覚えてないGreenHouseのGH-CRSDHCというカードリーダだと、中のファイルを覗いている間でもWifiのアンテナは立っていました。
さて、ここからが本題なのですが、Aircardには以下のようなWebUIがあり、ここにクライアントとして繋ぐ場合にどのSSIDに繋ぐのか指定できるのですが、ステルスではないAPの場合は問題なく繋がったのですが、APがStealth(SSIDをブロードキャストしない設定にしている)な場合、いつまでも見つけてくれないのです。
自分は今、auのDATA08をステルスAPで運用しているのですが、これの為にステルスを解除するのもなあと思い、どうにかならないかあれこれ試してみました。
全部入りBusyboxを入れる(任意)
まず下準備から。こちらのブログにも書かれているように、なぜかSDカードでperl/Ruby/PHPが動いてしまいますが、そこまでしないにしろ全部入りのBusyboxはあると何かと便利です。viとかxargsとか。なのでこれを手順に沿って入れます。まあ、ステルスAPに繋ぐだけであればこれが無くてもいいのですが。
これを、SDのどこかに保存してください。自分はbinaryと言うフォルダを作りそこに入れました。/mnt/sd/binary/busyboxとなります。
どうにかしてAirCardにTelnetで繋ぐ
上記ブログに書いてあるので詳しいことは省きますが、デフォルトではPQI Air CardというAPがたつので、そこに繋いでtelnet 192.168.1.1をするなり、上記WebGUIで先に設定してデジカメからWSD00002.JPGを削除してAPに繋げるなりしてください。
ところで、自分のAirCardだと何故かWSD00002.JPGを消しても、そもそもAPに繋ぎに行かなかったのですが何か設定間違えてしまいましたかね?というかWSD00002.JPGを一度消してしまうと、WSD00002.JPGはデジカメやPCから認識できない画像と言われてしまい、SDをPCからフォーマットするか/DCIMフォルダを消して初期化しないといけなかったのですが…。そのデジカメから初期化するトリガになるWSD00003.JPGも発動しないという…。なんで?
wpa_supplicantに食わせる設定ファイルを書く
中身がLinuxなので、wifiの接続にはwpa_supplicantを使います。起動すると/etc/wpa.confを元にwpa_supplicantがデーモンで起動するので、それを元にファイルを作ります。
wpa_supplicant に食わせるファイルの書式は以下のようになります。
ap_scan=3//←ステルスAPの動いているチャンネルに合わせないと繋がらない
network={
scan_ssid=1//←ステルスの場合は追記
ssid="Stealth"//←接続するAP名
key_mgmt=WPA-PSK//←WEPの場合はWEPですが省略
proto=WPA WPA2
pairwise=TKIP CCMP
group=TKIP CCMP
psk="Passkey"//←PreSharedKey(事前共有鍵)に設定したパスフレーズを入れる
priority=1
}
ただし、/etc/以下はRAMなので、ここに書いても再起動後に消えてしまいます。なので、SDカード(/mnt/sd/)か/mnt/mtd/以下にファイルを書く必要があります。SDカード内に書く場合はそのままだとWPAキーがばれてしまうので、chmod 700 /mnt/sd/wpa.conf&&chown root /mnt/sd/wpa.confしてroot以外は読めないようにするべきです。
試しに繋いでみる
telnetで繋いだ状態で、上記wpa.confをwpa_supplicantに食わせ、接続してみます。ただし、接続後はIPが被ってしまう可能性があるので、ifconfigでIPを指定します。今回はSDカード上にあるwpa.confを食わせ、接続後は192.168.1.2を指定しています。
wpa_supplicant -c /mnt/sd/wpa.conf -i mlan0 -d wext -B&&sleep 1&&ifconfig mlan0 192.168.1.2 netmask 255.255.255.0
Configuration file '/mnt/sd/wpa.conf' -> '/mnt/sd/wpa.conf'
Reading configuration file '/mnt/sd/wpa.conf'
ap_scan=3
Priority group 1
id=0 ssid='Stealth'
Initializing interface (2) 'mlan0'
SIOCGIWRANGE: WE(compiled)=22 WE(source)=13 enc_capa=0xf
capabilities: key_mgmt 0xf enc 0xf flags 0x0
WEXT: Operstate: linkmode=1, operstate=5
Own MAC address: b0:38:29:00:XX:XX
wpa_driver_wext_set_wpa
wpa_driver_wext_set_key: alg=0 key_idx=0 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_key: alg=0 key_idx=1 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_key: alg=0 key_idx=2 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_key: alg=0 key_idx=3 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_countermeasures
wpa_driver_wext_set_drop_unencrypted
RSN: flushing PMKID list in the driver
Setting scan request: 0 sec 100000 usec
EAPOL: SUPP_PAE entering state DISCONNECTED
EAPOL: KEY_RX entering state NO_KEY_RECEIVE
EAPOL: SUPP_BE entering state INITIALIZE
EAP: EAP entering state DISABLED
Added interface mlan0
Daemonize..
ここでTelnetが切れますが、これでパスフレーズなどを間違えていなければ、StealthというAPに接続したあとにおそらく192.168.1.2に対してtelnetが使えると思います。いつまでたっても繋がらない場合は、APのチャンネルを間違えているかSSIDを間違えているかpskを間違えていると思われます。
autorun.shを使う
これで繋がったら、あとは電源を入れたら自動でステルスAPに繋ぐようにします。
wifiの接続の設定は、WebUI(/www/cgi-bin/post_config.cgi)から設定したときに/mnt/mtd/config以下にあるファイルを/usr/bin/kcard_cmdが --post_configと言う引数を追加してパースし、どうにかして/etc/wpa.confとして起動時にはき出しているようなのですが、これらを追って正しく書くよりもSDのルートフォルダ上にautorun.shを書くと起動時に実行されるという方法を使う方が楽だったので、autorun.shを使います。
上記のBusyboxを入れると最初からautorun.shが入っているので、それをまねて作ります。また、/usr/bin/w2というスクリプトがAPモードからクライアントモードに変更するスクリプトなのですが、これを実行します。最終的には以下のようになりました。
#!/bin/sh
ln -s /mnt/sd/binary/bin/* /bin/
ln -s /mnt/sd/binary/usr/bin/* /usr/bin/
ln -s /mnt/sd/binary/usr/local /usr/local
ln -s /mnt/sd/binary/usr/lib /usr/lib
ln -s /mnt/sd/binary/usr/include /usr/include
ln -s /mnt/sd/binary/usr/libexec /usr/libexec
ln -s /mnt/sd/binary/sbin/* /sbin/
ln -s /mnt/sd/binary/lib/* /lib/
ln -s /mnt/sd/binary/etc/* /etc/
ln -s /mnt/sd/binary/www/* /www/
ln -s /mnt/sd/binary/www/cgi-bin/* /www/cgi-bin/
ln -s /mnt/sd/binary/busybox /bin/awk
rm /bin/dd
rm /bin/vi
ln -s /mnt/sd/binary/busybox /bin/vi
ln -s /mnt/sd/binary/busybox /bin/dd
ln -s /mnt/sd/binary/busybox /bin/find
ln -s /mnt/sd/binary/busybox /bin/grep
ln -s /mnt/sd/binary/busybox /bin/hexdump
ln -s /mnt/sd/binary/busybox /bin/killall
ln -s /mnt/sd/binary/busybox /bin/less
ln -s /mnt/sd/binary/busybox /bin/passwd
ln -s /mnt/sd/binary/busybox /bin/sed
ln -s /mnt/sd/binary/busybox /bin/tar
ln -s /mnt/sd/binary/busybox /bin/telnetd
ln -s /mnt/sd/binary/busybox /bin/watch
ln -s /mnt/sd/binary//busybox /bin/whoami
/usr/bin/w2&&/bin/wpa_supplicant -c /mnt/sd/wpa.conf -i mlan0 -d wext -B&&/bin/sleep 10&&/sbin/ifconfig mlan0 192.168.1.2 netmask 255.255.255.0
これで、SDに電源を入れると毎回同じステルスAPに繋ぐようになると思います。
問題
これの問題としては、APを決めうちで指定しているので、たとえば家のWLANと持ち歩きのポケットWifiの切り替えが出来ないという点です。どうにかしてデジカメからのファイル操作で/usr/bin/w2を実行できれば切り替えられそうですが、実行する方法は分かりませんでした。というか、WSD00002.JPGが普通に動く環境であれば、おそらくこれを消せばWebGUIで設定した設定の通り動く気がします。動かないので検証できないのですが。
しかし、家で同期するときは直接SDを繋いだ方が断然早いので、結局SDから直接同期してしまうという。外出先でスマホから繋がればいいかなーと思うので特に困らないのですが…。
そして、そもそもの問題として、Wifiカードが結構熱を持つと言うか、電力を消費するので、デジカメの電池の減りが早くなります。。当たり前ですが。
おまけ1
/usr/bin/w2はviやcatで開けるのですが、開くと以下のように書いてあります。
# cat /usr/bin/w2
#!/bin/sh
echo "w2..."
buzzer -f 1
#ifconfig mlan0 down
#load wifi driver
a0
a1
sleep 5
iwconfig
ifconfig mlan0 192.168.1.1 netmask 255.255.255.0 up
sleep 1
echo "auto connect available router"
wifi_connect_router
buzzer -f 5
sleep 2
udhcpc -i mlan0 -s /etc/dhcp.script
buzzer -f 5
#cp /mnt/sd/iperf /bin
#iperf -c 192.168.6.21 -N -w 512K -i 1 -t 300
なぜiperfが…
おまけ2
AirCardにSDを挿入すると、SDHCからSD規格へのブリッジとして動いてくれます。8GBのSDとしてみえます…。
これのおかげで、Thinkpad X61のSDカードリーダーでマイクロSDHCカードが読めました。ただし、ThinkpadのSDスロットでは電力が足りないのか、中身を見ることは出来ても安定してWifiとして動きませんでした。余り期待は出来ないですね。
ツイート
"PQI Air Card 不具合"でGoogleから飛んで来ました。
PQIからファームウェア V147がダウンロード可能で、WSD00002.JPG が壊れる問題は解消されましたよ。是非お試しください。
SSIDステルスで繋がらない件、ここに辿り着きました。
助かりました。
SSIDステルスで繋がらない件、ここに辿り着きました。
助かりました。
Borussia Dortmund Lukasz Piszczek fotbollsTröjor Borussia Dortmund Matthias Ginter matchställ fotboll Borussia Dortmund Marcel Schmelzer fotbollsTröjor barn Borussia Dortmund Erik Durm Tröjor
Hello Web Admin, I noticed that your On-Page SEO is is missing a few factors, for one you do not use all three H tags in your post, also I notice that you are not using bold or italics properly in your SEO optimization. On-Page SEO means more now than ever since the new Google update: Panda. No longer are backlinks and simply pinging or sending out a RSS feed the key to getting Google PageRank or Alexa Rankings, You now NEED On-Page SEO. So what is good On-Page SEO?First your keyword must appear in the title.Then it must appear in the URL.You have to optimize your keyword and make sure that it has a nice keyword density of 3-5% in your article with relevant LSI (Latent Semantic Indexing). Then you should spread all H1,H2,H3 tags in your article.Your Keyword should appear in your first paragraph and in the last sentence of the page. You should have relevant usage of Bold and italics of your keyword.There should be one internal link to a page on your blog and you should have one image with an alt tag that has your keyword....wait there's even more Now what if i told you there was a simple Wordpress plugin that does all the On-Page SEO, and automatically for you? That's right AUTOMATICALLY, just watch this 4minute video for more information at. <a href="http://www.SEORankingLinks.xyz">Seo Plugin</a>
コメントを書く
必要事項とコメントを入力して下さい。