WebAssembly環境の構築
卒研で WebAssembly を使った開発をしてもらっているけど、自分でも試したいので環境の構築。
Debian emscripten パッケージだけではダメだった
卒研の学生さんが、emscripten 使っているという話だったので、”aptitude search emscripten” を実行したら、パッケージがあったので、”aptitude install emscripten” を実行。鉄板の hello world をコンパイルしようとしたら、”LLVM version appears incorrect (seeing “11.0”, expected “10.0”)”というエラーが出て、コンパイルに失敗。
llvm の C コンパイラとのバージョンが合わない様子。ということで、git より環境を構築してみる。
git で emsdk 環境の構築
通常ユーザであれば、”git clone https://github.com/juj/emsdk.git” を実行すると、その PATH 直下に環境が作られるみたい。こういう使い方は好きじゃないので…
$ sudo bash ((( ひとまず emscripten は必要みたい ))) # apt-get install emscripten # 導入後は不要? ((( emsdk のインストール ))) # cd /usr/local # git clone https://github.com/juj/emsdk.git # cd emsdk # ./emsdk install latest # ./emsdk activate latest
Hello World を試す
((( 自分の環境で以下のコマンドにより環境変数をセット ))) $ source /usr/local/emsdk/emsdk_env.sh ((( Hello World をコンパイル ))) $ cd ~/public_html $ mkdir test $ cd test $ vi hello.c #include int main( int argc , char* argv[] ) { printf( "Hello World\n" ) ; return 0 ; } $ emcc test.c -s WASM=1 -o test.html $ ブラウザで test.html を開く http://...URL.../~t-saitoh/test/test.html
ブラウザから自分のC言語(wasm)を呼び出し結果を出力
$ mkdir html_template $ cp /usr/local/emsdk/upstream/emscripten/src/shell_minimal.html html_template $ vi html_template/shell_minimal.html ((( C言語側を呼び出すボタンを埋め込む ))) <textarea class="emscripten" id="input"></textarea> <input type="button" value="CALL WASM" onclick="Module._ems_func();"/> ((( test.cxx ))) #include <stdio.h> #include <emscripten/emscripten.h> #include <string> int main( int argc , char* argv[] ) { return 0 ; } // void* getElementValue_( char const* id ) { ... } が作られる EM_JS( void* , getElementValue_ , (char const* id) , { var e = document.getElementById( UTF8ToString( id ) ) ; var str = e.value ; var len = lengthBytesUTF8( str ) + 1 ; // コンパイル時に -s EXPORTED_FUNCTIONS="['_malloc']" しないとエラーがでる var heap = _malloc( len ) ; stringToUTF8( str , heap , len ) ; return heap ; } ) ; // std::string型はC++の文字列処理の型 // std::string s( "abcde" ) ; // s.c_str() で、C言語のNULターミネータ付きの文字列を参照できる。 std::string getElementValue( std::string const &id ) { void *p = getElementValue_( id.c_str() ) ; std::string s( (char const*) p ) ; free( p ) ; return s ; } void setElementValue( std::string const &id , std::string const &value ) { EM_ASM( { var e = document.getElementById( UTF8ToString( $0 ) ) ; e.value = UTF8ToString( $1 ) ; } , id.c_str() , value.c_str() ) ; } #ifdef __cplusplus extern "C" { #endif /* HTMLに埋め込んだ onclick=_ems_func() で呼び出される*/ void EMSCRIPTEN_KEEPALIVE ems_func() { std::string input = getElementValue( "input" ) ; setEnvironmentValue( "output" , input ) ; } #ifdef __cplusplus } #endif ((( test.cxx をコンパイル ))) $ source /usr/local/emsdk/emsdk_env.sh $ em++ -o test.html test.cxx -O3 -s WASM=1 -s EXPORTED_FUNCTIONS="['_main','_malloc']" --shell-file html_template/shell_minimal.html
情報処理演習室のルータを交換
EI棟3F演習室で、Aruba の WiFi 環境のための Buffalo ルータを使っていたけど、警告メッセージが出始めたので、確認したらルータの管理画面さえ表示できなくなってきた。古いルータだったので寿命と思われる。
かといって、このルータは、4EI教室,5EI教室,2F実験室,3F演習室,4F創成LABを束ねる Aruba WiFi の上流にあたるため、実験室がことごとく使えなくなる。そこで、手持ちのマニアックな Edgerouter-X に入れ替える。
「サイバー攻撃の手口と守り方」の準備
2/6(土)に「サイバー攻撃の手口と守り方~情報セキュリティ入門~」にて、CTFを中高生に体験してもらう準備のお手伝い中。
コマンドラインをたたいてもらう体験の部分は、クラウド上に準備した noVNC を使い、ブラウザさえあれば参加可能。問題は、以前 K-SEC 主催の CTF 問題から「いんすぱいぁ(≠ぱくった)」されて作った問題を少々。
Teams 説明会のトラヒック
fukuikousen-bot の更新周期を短く
福井高専のホームページの最新情報を、つぶやく bot ( https://twitter.com/FukuiKousen )を動かしているけど、この連日、コロナウィルスのため重要な公式情報の流れる機会が増えている。
通常は、5時,9時,11時,15時,19時 としていたが、当面頻度を高めておこう。8時から22時まで2時間刻みとしておく。
ネットワークセキュリティのためのTips
- デーモン(ネットワークサービス)の起動
- rc.d(古い方法)
- systemd(新しい方法)
- スーパーサーバによる起動
- ファイアウォール
- 検査手法
- Linuxで開いているポートを確認する方法(netstat)
- ポートスキャン
- パケットキャプチャ
- Webサーバへの攻撃方法
- 一般的な知識
- バックドアの確認方法
- 仕掛けられたバックドアの検出と対処
- maldetect
- ルートキット検出ツールの比較(rkhunter,chkrootkit)
Thunderbirdの送信時エンコーディングがJISじゃなかった
とある先生から、メールが文字化けで読めないとの連絡があった。古いメールソフトを使っているとのことだったけど、私はThunderbirdで極力プレインテキストで送っているからJISコードだろうし古いメールソフトでも読めるはず…と思っていたけど、確かめると @kosen-ac.jp が BASE64 で送られていたり、@gmail.com が quoted-printable だったり。
設定を再確認したら、設定のフォントと文字エンコーディングで、デフォルトエンコーディングがUTF-8になってた。古い人間なので、送受信もデフォルトエンコーディングが「JIS(iso-2022-jp)」、「可能な限り返信でもデフォルトエンコーディングを使用」に設定を行った。
うーむ、ちゃんとJISに設定したのに、@gmail.com のメールのタイトルが、”=?UTF-8?B?…”になってら。
福井高専のドメイン名
そろそろ前期期末の成績締め切り。学生さんがレポート課題提出で先生にメールを送ることも多いが、メールアドレスの書き間違いでメールがエラーになって届かないトラブルがちらほら。
メールアドレスをどう書き間違えているのか確認すると、hoge@fukui-nct–ac.jp と書いていたりする。高専機構のドメイン名は、hoge@fukui.kosen-ac.jp で、ac の前がハイフンに間違えてるんだろうな。
まずは結論
高専機構(福井)のメールアドレスは、hoge@fukui.kosen–ac.jp です。
福井高専のメールアドレスは、hoge@fukui–nct.ac.jp です。
ということで、以下解説。
ドメイン名の一般ルール
ちなみに、日本のドメイン名は古くは、組織ドメイン.種別ドメイン.国ドメイン の形式。
組織ドメイン=fukui-nct , 種別ドメイン=ac(教育機関) , 国ドメイン=jp(日本)
種別ドメインには、.co.jp(会社) , .ne.jp(ネットワークサービス) , .or.jp(団体) , .go.jp(政府機関) といったものがあるが、企業のサービスだと、.co.jp なのか .ne.jp なのか曖昧だったりするので、最近は省略したものを申請できるようになっている。
国ドメインは、アメリカはネットを作った所なので、国ドメインは省略され、.us(アメリカ) を使うことはめったに無い。一方、国ドメインも、.jp(日本) , .uk(イギリス) , .ch(中国) とかあっても、世界中に拠点を持つ企業では、.jp なのかよくわからないので、国ドメインを持たない種別ドメイン .com (企業) を取得することも多い。
高専機構のドメイン名
日本では最近様々な形式の学校が出てきたため、.ac.jp のドメインを取る時の審査は厳しくなっている。
このため、高専機構では、kosen.ac.jp を取得したいが審査が通らず、しかたがないので kosen–ac.jp を取得している。
組織ドメイン=kosen-ac , 種別ドメイン=なし , 国ドメイン=jp(日本)
ちなみに、”-ac.jp” といった変則的なドメイン名は、教育機関を偽装したドメイン名と勘違いされやすく、kosen-ac.jp のドメイン名を見て「怪しい…」と思う人も多い。
福井高専のドメイン名
一方、高専機構ができた後の福井高専の英語の正式名称は、“National Institute of Technology, Fukui College” であり、福井高専のドメイン名としては、本来 “nit-fukui.ac.jp” を取得したい。
組織ドメインの綴りのルールは無いので、大学でも 大学名-u.ac.jp だったり u-大学名.ac.jp など色々あるが、最近は後者が主流となっている。(福井大学も以前は、fukui-u.ac.jp だったが、最近は u-fukui.ac.jp に変更されている)
しかし、.ac.jp の審査が厳しく、高専機構の1組織っぽい nit-fukui.ac.jp は審査が通らない可能性が非常に高く、どの高専も以前のドメイン名をそのまま使用しているのが現状である。