1998-12-23[n年前へ]
■流れている電子メールを解読してみる
目的のためには手段は正当化されるか?
今月のC MagazineのNetWatch Cool&Hotはセキュリティ特集だった。その中でEthernetに流れているパケットの中からMailに関するデータを表示するソフトの紹介があった。もちろん、自分宛てのものだけでなく、他人宛ての物も全て表示するソフトである。
こういったソフトの正しい使われ方というものがあるとは思えないのだが、技術的には興味がある。ネットワークに関する勉強もしてみたかったので、同じようなことをしてみたい。
言うまでもないが、今回の実験は家庭内のLAN内ですべて行っている。ただし、メールサーバーは外部のものを使用してはいる。
自分宛てでないパケットを見る(sniffing)にはイーサーネットのインターフェースをプロミスカス・モードで動かしてやれば良いという。UNIXであればtcpdumpを始めとしていくつもフリーのソフトがある。Windows上で動かすことを考えても、いくつかのフリーソフトがあった。また、OpenDesighnNo.10にプログラミングの例があった。OpenDesighnはソース配布がディスクでしか行っていないのが残念だ。
今回はWindows上でプロミスカス・モードでパケットをダンプしてくれるソフトを用いた。普通に探せば、すぐに見つかると思う。
それでは、流れているパケットを見てみる。パケットのダンプ画面には部分的に伏せ字を入れた。また、ユーザー名やパスワードはオリジナルとは違う文字に入れ替えてある。
LANに繋がっているLibretto50でメールサーバーに対してメールチェックを行った際に流れたパケットを同じネットワークに繋がっているPortege320で読み取ったものの一部が下のものである。
Packet No.: XX00000005Time: 0361530480 msec Length: XX
Ethernet Dest: XX.00.F4.5F.2D.F8 Src: XX.00.24.30.08.ACType: 0x0800
000000: XX XX XX 5F 2D F8 XX XX : 24 30 08 AC 08 XX XX XX..._-...$0....E.
000010: XX 34 58 05 40 XX XX 06 : B3 C2 AC 12 XX 02 D2 E6.4X.@. ..... ...
000020: B0 01 04 XX XX 6E XX 2C : 14 F7 XX AE 43 03 XX 18...f.n.,....C.P.
000030: 22 0B 98 18 XX XX XX XX : XX XX XX XX XX XX XX XX".....USER john
000040: XX XX:................
Packet No.: XX00000006Time: 0361530540 msec Length: 88
Ethernet Dest: XX.00.24.30.08.AC Src: XX.00.F4.5F.2D.F8Type: 0x0800
000000: XX XX 24 30 08 AC XX XX : XX 5F 2D F8 08 XX XX XX..$0....._-...E.
000010: XX 4A E0 27 40 XX EE 06 : 5D 89 D2 E6 B0 01 AC 12.J.'@...].......
000020: XX 02 XX 6E 04 XX XX AE : 43 03 XX 2C 15 03 XX 18..n.f..C..,..P.
000030: 22 XX 24 26 XX XX 2B 4F : 4B XX XX XX XX XX XX XX"8$&..+OK Passwo
000040: XX XX XX XX XX XX XX XX : XX XX XX XX XX XX XX XXrd required for
000050: XX XX XX XX XX XX XX XX :john...........
Packet No.: XX00000007Time: 0361530550 msec Length: XX
Ethernet Dest: XX.00.F4.5F.2D.F8 Src: XX.00.24.30.08.ACType: 0x0800
000000: XX XX XX 5F 2D F8 XX XX : 24 30 08 AC 08 XX XX XX..._-...$0....E.
000010: XX 37 59 05 40 XX XX 06 : B2 BF AC 12 XX 02 D2 E6.7Y.@. ..... ...
000020: B0 01 04 XX XX 6E XX 2C : 15 03 XX AE 43 25 XX 18...f.n.,....C%P.
000030: XX XX XX XX XX XX XX XX : XX XX XX XX XX XX XX XX!./...PASS 12345
000040: XX XX XX XX XX:678.............
このダンプ画面を眺めると、次のような
Libretto:私はjohnですがメールチェックをさせて下さいな。過程がよくわかる。パスワードの認証を「通常のテキストそのまま」で行っているため、パスワードが丸見えである。
サーバー:じゃぁ、johnさんのパスワードを言って下さい。
Libretto:12345678です。
もう少し、各パケットの内部がどうなっているかを考えてみる。
ネットワーク・プロトコルとは何か(TCP/IP を例として) (http://www.kobe-u.ac.jp/~ipc/mage/mage24/terashima/terashima.html)
IPパケットの構造について(http://www.dtinet.or.jp/~torao/program/)
Hey!Java Programming! (http://www.dtinet.or.jp/~torao/program/protocol/pop3.html)
を参考に考えてみた。 例えば、先のイーサーネットに流れているメールに関するパケットの中からメールの内容を見るにはどうしたら良いだろうか。
ひとまず、先頭54Byteと末尾2Byteを捨ててやればTCPの部分だけを取り出せて、良いように思える。また、TCPのポート番号のみでフィルターをかけてやれば、任意のプロトコルのみを取り出すことが出来るだろう。多分。ここでは、47,48Byte目か?
そのようなフィルターを作成し、取得したパケットにかけてみたのが以下である。
. RETR 1 +OK 771 octets Received: from xxxx (xxxx.xxxx.ne.jp[xxxx.xxxx.251.14])見事にメールの内容が見えてしまう。
by xxxx.xxxx.ne.jp (xxxx.xxxx.1/3.7W) with SMTP id xxxx
for <xxxx@xxxx.ne.jp>; Wed, 23 Dec 1998 11:20:54 +0900(JST)
Message-ID: <xxxx@xxxxxxxx>
From: "xxxx" <xxxx@xxxx.xxxx.xxxx.xxxx>
To: <xxxx@xxxx.ne.jp>
Subject: test 試験
Date: Wed, 23 Dec 1998 11:43:38 +0900
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 4.72.2106.4
X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4
Content-Type: text/plain;
charset="iso-2022-jp"
X-UIDL: 57c82a0ae2ea513ae1221c507123f459This is a test.
これは日本語です。
さて、読めるでしょうか。. DELE 1 +OK Message 1 has been deleted. QUIT +OK +OK Popserver at xxxx signing off. +OK
今回はWindows上で全て行った。難しい所はあまりなかった。ネットワークのことなんかほとんど知らない私でも1から始めて半日で出来たのだから、きっと誰でも出来てしまうだろう。それにUNIX上であればツールは全て揃っているようだ。
他人のメールの内容を見るのは私的利用であれ、公的利用であれ、許されるとは思えない。また、例えネットワーク管理者が行うにしても、「メールを盗み見する」という予告・了解なしに行って良いとは思えない。先のメールの内容を盗み見するソフトにどんな正当な使い方があるのだろうか?
1999-02-28[n年前へ]
■分数階微分に基づく画像特性を考えてみたい
同じ年齢でも大違い
前回、分数階微分の謎 - 線形代数、分数階微分、シュレディンガー方程式の三題話- で分数階微分について調べた。例えば、0.7階微分といった、整数階でない微分である。今回はそれを使った応用を考えてみたい。
人間の視覚というものは明るいものは強く感じることができる。これは当たり前である。そして、それだけでなく、強さが変化している所にも(興味を)強く感じ取るようになっている。岡本安春氏の「Delphiでエンジョイプログラミング」によれば、そのような考えはLaming(1986)がdifferential coupling(差動結合)として発表しているらしい。
ということは、人間が画像を感じる特性というものは、画像強度と画像強度変化(画像強度の一階微分)の中間的なものであると言うことができるかもしれない。とすれば、分数階微分を導入すれば面白い表現ができるかもしれない。
今回は、そういう考えのもとに分数階微分を用いて人間の画像特性について考えてみたい。
まずは、元画像を示す。元画像はガウス分布に基づいて作成されたものである。
まずは、左の元画像を見て欲しい。どこに強い感じを受けるだろうか?白い部分はもちろんであるが、白と黒の境界部にも強い感じを受けるだろう。ギザギザになっているのはデータが少ないからなので、無視して欲しい。というわけで、人間の視覚画像特性は
- 画像強度
- 画像強度変化(画像強度の一階微分)
元画像 | |
1/2階微分画像 | |
15/20階微分画像 | |
1階微分画像 |
白地に黒画像バージョンも示しておく。紙の上の画像に慣れた人にはこちらの方が良いだろう。
元画像 |
1/2階微分画像 |
15/20階微分画像 |
1階微分画像 |
なお、今回の画像の作成は次のような手順で行っている。
- 1次元のガウス分布を作成する。
- 微分値が正であるような半分の領域を線対称に回転させ、2次元画像を作成する。
今回は
- 画像強度
- 画像強度変化(画像強度の一階微分)
- 電位
- 電界(電位の微分、といっても本来は電位が電界の積分か)
- 人口密度
- 人口密度変化(人口密度の微分)
さて、分数階微分を調べる中で、バナッハ空間についても調べた。調べ始めた時には、聞き覚えもなかったが、調べてみるとヒルベルト空間の導入で登場していた。きれいさっぱり忘れていたようである。
京大数学教室 徳永健一氏のWEB (http://www.kusm.kyoto-u.ac.jp/~kenichi/)
から辿れる「「年齢の本」数学者版」によれば
バナッハがバナッハ空間を提唱したのは30歳の時であるらしい。(http://www.kusm.kyoto-u.ac.jp/~kenichi/age/30.html)
うーん...
1999-09-05[n年前へ]
■ACIIアートの秘密
画像をASCII文字に変換するソフトを作ろう
ASCII文字で描かれたモナリザを初めて見たのは、まだ大型コンピューターしかなかった頃だ。当時、記憶媒体の紙テープをパンチした紙くずと、ラインプリンタから出力されたASCIIアートで遊んでいた。
今回ASCIIアートを用いていくつか実験をしてみたかったので、画像をASCII文字に変換するソフトウェアを探してみた。例えば、
- 清竹's テキスト絵 HPリンク集 (http://www2.nkansai.ne.jp/users/kiyo/ )
子どもである作成したソフトウェアは以下だ。もちろん、フリーウェアだ。ただし、いつものごとくアルファ版の中のアルファ版なので、再配布は禁止である。ここからいくらでもダウンロードできるので、構わないだろう。
さて、このソフトウェアは画像をASCII文字に変換して表示・保存することができる。変換の仕方は、- 白背景に黒文字
- 黒背景に白文字
- 白背景に色文字
- 黒背景に色文字
- Windows Bitmap形式
- Text形式
- Html形式
画像を読みこむには標準ではWindowsBitmapのみであるが、Susieプラグインを用いれば、色々な画像形式に対応することができる。
使用手順は以下の通りだ。
- image2asciiを起動する。
- OpenFileボタンを押して、画像を読みこむ。
- Fontボタンを押して、フォントを選択する。(このソフトは使用するフォントの濃度カーブを計測し、正確な画像再現を狙うのだ!!)
- 画像変換モードを選択する。
- ImageToAsciiボタンを押して、変換を行う。
- 必要であれば、SaveFileボタンから適当な形式で保存を行う。
動作画面例は、例えば以下のようなものだ。
Text形式で保存した場合のサンプルはこんな感じだ
Html形式で保存した場合のサンプルも示しておく。白黒文字への変換モードであればテキスト形式で保存するのが良いと思う。白黒文字の場合にスペースが変換画像中に含まれていると、画像ずれが生じてしまうからだ。これも簡単に直せるのであるが、直すのは次回にしておく。慣れないプログラミングを一気にしたせいで疲れてしまったのだ。もしすぐに使いたい方は、エディターで適当に置換すれば良いと思う。 さてさて、このプログラムを作成した理由は、これを用いて実験を多々行ってみたいからなのである。キーワードは、デバイス、ガンマ、安定性、逆問題、色空間...である。というわけで、続きは次回に...
2001-01-04[n年前へ]
■世界の国からこんにちは
hirax.net版GeoWhoisを作る
VisualC++ MFCを使ったWindowsプログラミングはどうもお気楽という感じにはいかない。もちろん、「子供の科学」にすらMFCを使ったプログラミング入門が連載(何故、VisualC++で!?)されるくらいであるから、別にそれが難しいわけではないのかもしれない。しかし、VisualC++MFCでWindowsプログラミングがキライになる人は絶対いるはずだ。現に突撃実験室のwebmasterはかつてVisualC++と闘った結果、「俺は永遠に組み込み屋じゃっ」と叫んでいたらしい(C.突撃実験室)。
私も含めて、そんなWindowsプログラミング難民達を優しく女神のように迎えてくれるのがBorlandC++Builderである。いや、女神は必ずしも私たちを優しく迎えてくれるわけではない。むしろ、女神は私達を冷たくあしらうことの方が多いので、実は女神よりもC++Builderの方が優しいと言っても良いくらいである。しかも、C++Builderは自然にWindowsプログラミング(そして嫌でもDdelphi)を覚えさせてくれるところが実にありがたい。そして、そんなC++Builder(Delphi)ユーザー達にとって実に便利なのがTorry'sDelphi Pages.だ。
というわけで、先日Torry's Delphi Pages.をチェックしていると、とても面白いコンポーネントがあった。それはYehudaSharvit.による
である。ドメインネームから地理的な位置座票への変換を、地理データベースを持っているイリノイ大学の"cello.cs.uiuc.edu"を使って行い、そしてゼロックスのパロアルト研究所(parc)の"mapweb.parc.xerox.com"から地図画像をダウンロードして表示するコンポーネントである。ドメインネーム->持ち主の住所(WHOIS)→位置座票("cello.cs.uiuc.edu")->地図表示("mapweb.parc.xerox.com")という流れでドメインが位置している場所を表示するわけだ。 例えば、DelphiでGeographicWhois Componentを使ってapple.comを検索・表示してみたのが次の画像である。
もちろん、「ドメインが位置している場所」と言っても、ドメインの登録者の住所を表示するわけで、必ずしもそのドメインのサーバーが位置する場所を表示するわけではない。だけど、そもそも「ドメインが位置する場所」というのは「実際のドメインのサーバーが位置する場所」ではなくて、「ドメインの登録者の住所」だと私は思うのでこれはこれで良いのである。そしてまた、「ネットワーク上であまり意識することのない地理的な位置情報を表示する」というのがかなり面白いと私は思う。
日頃、ちょこちょことブラブラと色々なサイトを巡回して楽しんでいる(といっても実は多くはない)のだが、そのサイト達は世界中のどこにいるのだろう?なんて時折と思うことがある。以前、
でネットワーク上を自分の家からロンドンまでヒッチハイクしてみたけど、そんなヒッチハイクも地理的な位置情報が判れば、それはもっと楽しいかもしれない。WEBで辿る「世界一周の旅」なんてのも簡単にできることだろう。そしてまた、「インターネット上の距離」と「地理的な距離」を並べて見てみるのも面白いだろう。というわけで、今回は色々なサイトがどんな場所に位置しているかを表示するアプリケーションを作ってみることにした。ところで、先のGeographicWhois Component自体はDelphi用のコンポーネントでC++Builder用ではない。もちろん、C++BuilderはPascalで書かれたDelphi用のコンポーネントだって読み込めるわけだが、とりあえずこのコンポーネントはそのままではC++Builderには取り込めない。それだけではなく、地図の縮尺や位置などの指定をすることができないため、このままでは色々なサイトの位置を重ねて表示することはできない。
そこで、「ドメインネーム->持ち主の住所(WHOIS)→位置座票("cello.cs.uiuc.edu")->地図表示("mapweb.parc.xerox.com")というルーチン」をC++Builderで自分用に作り、できあがったアプリケーションがこれである。
もちろん、いつものように数回だけの動作(不?)確認しかしてない完全無保証版である。 GeoWhois.exeの動作画面が次の図である。ドメインの場所を検索しその結果が上の方の画像に表示される。また、検索履歴が下の画像に表示される。検索履歴画像の方はSaveボタンでbmpファイルとして保存することができる。
検索履歴が下の画像に表示される。 |
ちなみに、上の画像の検索履歴は私のよく見に行くところである。結構世界の各地に広がっているような気もするし、広がっていないような気もする。こんなプロットをもっともっと重ねてみて、あとリンクの様子も線でプロットしてみたりすればかなり面白いグラフができることだろう。
さて、ドメイン名から位置座票への変換("cello.cs.uiuc.edu")はあまり色々な場所が登録されているわけではないので、少なくとも日本などでは東京くらいしか変換することができない。だから、当然のごとくtomoya.comやhirax.netは表示されない。だから、実際のところ私が良く見に行く個人サイトは本当はあまり検索することができない。もちろん、プロバイダー内にWEBページを持っているようなところは検索・表示することができるのだけれど、そんなところはみんな東京になってしまうのである。しかも「WEBページの持ち主= ドメインの持ち主」でもないので、そもそも「そのドメインの位置情報 = WEBページの位置情報」では全然無い。だけど、そもそもそんな日本国内の「ご近所さんを探せ!」コーナーではないのだから、もうそれはそれで良いのである。遙か遠くの国のサーバーを地図で眺めることができる、というところが良いのである。
このGeoWhoisを応用していけば色んな遊び方があると思うのだが、今回はこのアプリケーションを作ってみたところで終わりにしたいと思う。次回以降(といってもいつになるか判らないけど)で、「インターネット上の距離」と「地理的な距離」でも調べてみたいと思う。
それにしても、こんな地図を眺めていると、本当に旅行したい気分になってきたぞ〜
2001-07-01[n年前へ]
■小さな掌に未来の地球儀をのせて
この手で地球を作ってやろう
先日、「サラリーマンとして会社に入ったからには社長を目指すのが当り前」と言う人とじっくりと話をしていた。まぁ、その話の内容はそれはそれで結構面白かったのだけれど、何故かその時私は映画の1シーンを思い出してしまった。チャップリンの映画「独裁者」の中で、世界制覇を目指すヒンケルが地球を模った風船を抱きしめようとして、結局その風船を割ってしまうあのシーンである。
私と話す相手の背中のずっと向こうにその地球の風船を眺めながら、私はそれとはちょっと違う地球儀をさらに思い浮かべていた。それはこんな正二十面体の小さな地球儀である。正二十面体の表面に地球の表面の写真を描いたものだ。
大学の教養の頃だったか、それとも大学院に入ってからだったか覚えていないのだけれど、こんな「正二十面体の地球儀」を先生の一人がよくポケットから出して使っていた。それは、もしかしたら今考えてみればFullerが作ったDymaxionMapに影響されたものかもしれないし、その先生が独自に作ってみたものかもしれない。その辺りのことも聞いたことがあるような記憶もあるのだけれど、聞いた内容はもうとっくの昔に忘れてしまった。ただ、ポケットから小さな地球儀を手品のように取り出す仕草がとてもかっこよく見えたことは覚えている。
小さな、だけど立派に地球儀の役を果たす正二十面体をサッとポケットから取り出す仕草は、まるでのび太のために秘密道具をポケットから取り出す「ドラえもん」のようだった。もしかしたら、私に「独裁者」のヒンケルより大それた「ドラえもんになりたい」という野望を持たせるに至った理由の一つは、その小さな正二十面体の地球儀にもあったのかもしれない。
その先生が自分で作って持っていたのは、たった一種類の地球儀だけだった。だけど、そんな正二十面体の表面に色んな写真や地図、例えばそれは衛星写真であったり、国別に塗り分けられた世界地図であったり、あるいは月の表面の写真であったり、を貼り付けて色々な地球儀や月儀を作ってみたい、とその頃からずっと思っていた。そこで、そんなことができそうな道具を探してみると、
- PaperaArto(ペーパークラフトのページ)
- ( http://hp.vector.co.jp/authors/VA023341/arto/hp_arto.htm )
しかし、少しばかり考えてみれば「道具をサッとポケットから取り出すドラえもんになりたい」と野望を持つくせに、道具を探すばかりではあまりに恥ずかしい態度ではないだろうか。ドラえもんが人の道具に頼ってばかりでどうする?というわけで、急遽そんなことができるソフトを作ってみた。それがこのIcosahedronである。というわけで、いつものごとく「必要は発明の母」で「父は私」なのである。
とりあえず、このIcosahedron.exeを使うと、Windows Bitmapファイルとして保存されたメルカトル図法の地図を、正二十面体の展開図に変換した後に、Bitmap画像に保存することができる。
Icosahedron.exeの使用手順は次のようになっている。いつものように「動いてしまえば、ハイそれまでよ」というプログラミング態度なので、ボタンを押す順番が違うと動作しなかったりするけれど、その時は単に動かないだけで、大した問題はないと思う(多分)。- Loadボタン → メルカトル図法で描かれた地図ファイルを読み込む
- Resizeボタン → 作成する正二十面体のサイズを決める。プリンタでの出力解像度、正二十面体の直径(とは言わないかな)を決める。
- Convertボタン → 正二十面体の展開図を作成する
- Saveボタン → Windows Bitmapファイルとして正二十面体の展開図を保存する
画面の上半分に読み込んだメルカトル図法の地図が表示され、画面の下半分には作成した正二十面体の展開図が表示される。もっとも、正二十面体の展開図の「のりしろ部分」は一部表示をはしょっているので、下の訂正図を参考にして切り取って欲しい。
上の図のような正二十面体の展開図をプリンターで出力して、さらにそれを切り取って、正二十面体の地球儀を組み立ててみたものが下の図である。
ところで、私がかつて在籍していた研究室は「理学研究科 地球惑星科学専攻地球物理学分野 測地学講座」という名前なのである。その名前を見れば一目瞭然、私はまさに「地球を描くための英才教育」を受けてきた?のである。「その実力を見せてやれ」というわけで書いてみたのが下の図だ。これが「私の世界地図」である。
確か地球ってこんな感じ?というわけで書いてみたのだが、どうもおかしい。いや、はっきり言えばかなりヘンである。アメリカ大陸の辺りなんかむちゃくちゃ無理がある。コロンブスが使っていた大航海時代の(アメリカなんかなかった頃の)地図の方がよっぽど正確に違いないのである。そう私には地球を描く実力なんかはなから無いのであった。そう、哀しいけれどこれっぽちも無いのである。
いや、そんなことはどうでもいいのだ。とりあえず、私の世界地図を使って「私だけの地球儀」を組み立ててみたのが下の写真である。
まるでSF映画の異世界の星みたいな感じになってしまったが、誰が何と言おうとこれが「私だけの地球儀」なのだ。世界にたった一つの私だけの地球儀なのである。
もちろん、私には私だけの地球儀があるが、それは誰しも同じハズである。十人十色、十人の人がいれば十個の地球儀があるはずだ。だから、こんな「私の地球儀」だけではなくて、これを読んだ方はぜひぜひ色んな地図を書いたり、手に入れたりして、色んな地球儀(それとも月儀、メルヘンちっくな人だったら例えば「星の王子さま」の「星儀」なんてのもいい感じかも…etc.)を作成してみてもらいたいなと思う。
そして、特に世界地図を覚えているわけもない小さな子供達に世界地図を書かかせてみて、そしてこんな正二十面体の地球儀を組み立ててみたらきっと面白いことだろう、と思う。「独裁者」の中のヒンケルみたいに地球の風船を抱きしめて遊ぶなんて、とてもイヤな感じだ。けれど、小さな子供達がそれぞれの世界地図を描いて、その世界地図で正二十面体の地球儀を作って、そしてそれぞれの小さな掌にその正二十面体の地球儀をのせて遊ぶ、なんてのはとても素晴らしく良い感じだと思う。
子供達がどんな世界地図を描くかは想像もできない。きっとずいぶんとヘンテコな世界地図がイッパイ出来上がるに違いない。そして、そんな世界地図から生まれる地球儀だって、奇妙奇天烈なものになること間違いなしだ。
だけど、その地球儀はもしかしたら未来の地球儀かもしれない。だって、子供達が未来の地球を作るということも、それもまた事実なんだから。子供達が小さな掌に未来の地球を乗せて作っていくのだから、この正二十面体の地球儀は本当に「未来の地球儀」に違いないと思うのだ。