hirax.net::Keywords::「パケット」のブログ



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: 57c82a0ae2ea513ae1221c507123f459

This is a test.
これは日本語です。
さて、読めるでしょうか。

. DELE 1 +OK Message 1 has been deleted. QUIT +OK +OK Popserver at xxxx signing off. +OK

 見事にメールの内容が見えてしまう。
 今回はWindows上で全て行った。難しい所はあまりなかった。ネットワークのことなんかほとんど知らない私でも1から始めて半日で出来たのだから、きっと誰でも出来てしまうだろう。それにUNIX上であればツールは全て揃っているようだ。

 他人のメールの内容を見るのは私的利用であれ、公的利用であれ、許されるとは思えない。また、例えネットワーク管理者が行うにしても、「メールを盗み見する」という予告・了解なしに行って良いとは思えない。先のメールの内容を盗み見するソフトにどんな正当な使い方があるのだろうか?

2005-05-17[n年前へ]

品川から三島までの揺れデータ 

新幹線地図 というわけで、下りのこだま585号 8号車 通路側のシート上の「品川駅から三島駅まで」の揺れデータ(10ms間隔)です。加速度センサの傾斜出力値を微分しXY成分を2乗平方根をとったものを示しています。時刻表を見ると、「0分後 品川 → 11分後 新横浜 → 29分後 小田原 → 43分後 熱海 → 51分後 三島着」という感じです。もちろん、セットアップに若干の時間が掛かっていますので、その補正を行うと、大雑把に

-4分後  品川9分後 新横浜27分後 小田原39分後 熱海47分後 三島着
au携帯のGPSで位置を連続的に通知という感じになると思います。よく眺めれば、停車時間(25-30分の間の「小田原での長い停車時間」とか)も見えてきますので、もう少し正確に走行場所に繋げることも簡単そうです。あぁ、携帯電話でGPS追尾をしておけばよかったですね。1分1回追尾なら、パケット代金もたいしたことないでしょうから。
 ちなみに、縦軸の値で15を超える辺りだと、PCのハードディスク保護回路が働いて、ハードディスクが停止する感じです。
品川から三島までの揺れデータ

2005-10-30[n年前へ]

「携帯電話GPSスピード・メータ」を作る 

UntitledUntitledUntitledUntitled 忙しくしていた間に、perlがやっぱり顔文字にしか見えなくなってしまった。そこで、今日は自分用の「(au)携帯電話GPSスピード・メータ」を作ることにした。

 「携帯電話GPSスピード・メータ」を作り始めた理由は他にもある。一つは、「今日見た景色」の地名入力をするのが面倒になってきたので、増井さんを見習って「自分がいる場所を24時間追跡」して地名を自動入力してみようか、と思ったのである。そして、他の理由の一つは、屋外でランニングなどをしている時に走っている速度を出力する機械が欲しかった、ということだ。ジムのトレッドミルのように、走っている速度を自動出力してくれる機械が欲しかったのだ。自分がどこにいるかはさておき、「自分が移動している速度を知りたい」と思うことが多かったのである。そこで、うらさんのperlスクリプトを眺めながら、自分用のスクリプトを作ってみた。

 明日にでもパケット定額コースに変更すれば料金は気にならない。今の携帯電話なら、ネットに繋ぎっぱなしにしていても、メールを受けたり、電話を受けることもできる。とりあえず、来週は実験を続けてみることにしよう。自分が欲しいものを色々作ってみることにしよう。

2006-03-12[n年前へ]

WEB 2.0時代のコンビニ・プリント活用法 

「自分がいる場所」の便利地図を見やすく素早く作り出そう

- 「自分がいる場所」の便利地図を見やすく素早く作り出そう -

 最近の携帯電話はGPS測位機能が標準装備されているのが普通です。初めて行く場所で誰かと待ち合わせるときや、外出先で道に迷ったときなどは、携帯電話付属のソフトで地図を眺めて場所を確認したりすることがあります。それはそれで便利なのですが、携帯電話の小さな画面ではどうにも見づらくて、結局近くの本屋やコンビニに駆け込んで、地図を眺めたりします。ところが、それはそれで自分が今いる位置を見つけ出すのに苦労します。その時点で既に迷っていたりするわけで、地図を眺めてみても「ココはドコ?ワタシはダレ?」状態になってしまうのです。

 そこで、今回は「街中に溢れているコンビニ(セブンイレブン)と自分が持っている携帯電話を使うことで、自分がいる場所がちゃんとわかる地図、しかも紙の大きく見やすい地図、さらに自分が探している場所などの便利な情報が入った地図を一瞬で作り出す」ということをしてみようと思います。

携帯電話ナビ機能は便利だけど…小さすぎる

携帯電話のナビ機能 私の携帯電話にはGPS測位機能とナビ機能がついています。右の写真は、携帯電話で自分がいる場所辺りの地図を眺めている例です。初めて行く場所で誰かと待ち合わせるときや、外出先で道に迷ったときなどは、こんな携帯電話地図を眺め場所を確認したりすることがあります。これはこれで便利なのですが、写真を見ればわかるように、こんな携帯電話の小さな画面ではどうにも見づらくて、結局近くの本屋やコンビニに駆け込んで、(大きな)地図を眺めたりするのです。やはり、携帯電話画面に映し出された小さな地図よりは、紙の大きな地図の方がずっとわかりやすいわけです。

 ところが、紙の地図の場合、自分が今いる場所を見つけ出すのに苦労したりします。携帯電話なら、(GPS測位された)今現在の場所にアイコン表示がされていたりするわけですが、紙の地図ではそうはいきません。紙の地図はどこかの印刷所で印刷・製本されているわけで、私やあなたようにカスタマイズされた地図ではないのですから、それは当然の話です。その結果、地図は見やすいけれど、自分の場所がわからないという(現実にも地図上でも)「ココはドコ?ワタシはダレ?」状態になってしまうのです。地図を探している時点で既に道に迷っているわけですから、そうなりやすいのも当然の話です。それに、自分の位置がわかったところで、地図本はそんなに安くありませんからなかなか買いづらかったりします。必要なページはたった1ページだけなのに、一冊の本を買うのもなぁ…と思い始めて、地図を頭の中に記憶して本屋をそのまま出てしまう、なんていうことをします。これでは、単なる立ち読み野郎です。…しかも、えてして、その記憶の中の地図は全然あてにならず、またすぐに迷ったりするのです。

自分専用の地図をコンビニ・プリントで作り出す

コンビニのプリント・サービス 以上のジレンマを整理してみるとこうなります。

  • 「携帯電話なら自分の位置がわかるけれど、地図は小さく見にくい」
  • 「本屋やコンビニに置いてある地図は大きく見やすいけれど、自分の位置がわからない」
  • 「地図本の中で、自分にとって必要なのはたった1ページしかないが、1ページ単位の地図はなかなか売っていない」
最近はWEB2.0とやらが声高々に謳われる時代のようです。であるなら、「携帯電話」や「コンビニ」や「紙」といったモノの利点を組み合わせて、すなわちマッシュアップして、便利なものを作り出してみれば良いのではないでしょうか。つまり、携帯電話で位置を調べ、WEBサービスでその位置に特化した便利な地図を作り出し、その作り出した地図などのデータをネット経由でコンビニに転送し(データ転送を携帯電話のパケット通信でなく、セブンイレブンの店舗・サーバ間網を利用するのです)、コンビニに置いてある(カラー)プリンタで「自分用にカスタマイズ・パーソナライズされた(大きく見やすい)1枚の紙の地図としてプリントする」というわけです。色んなモノの利点を上手く組み合わせて使ってみるのです。そうすれば、「自分の今いる場所を中心にした、自分を探している場所や電話番号・住所が記入され、色んな場所アイコンもちゃんと描かれている見やすく大きくカラフルな地図」がモノクロなら30円くらい、A4カラー地図でも80円程度で手に入るのです。

「携帯電話・Googleローカル・ネットプリント」を組み合わす

 実際にやることはとても簡単です。

  • 「携帯電話」
  • 「Googleローカル」
  • 「(セブンイレブン・富士ゼロックスの)ネットプリント」
を組み合わせるスクリプトCGIを自分用に作るだけ、です。携帯電話で位置を調べ、探したい情報と位置情報をもとにGoogle ローカルからパーソナライズ・カスタマイズされた地図を作り出し、セブンイレブンと富士ゼロックスのネットプリントを使い地図データをネットプリントのサーバーに格納させて、そして、自分の目の前にあるコンビニにおもむろに入りプリンタを(15~20秒程度で携帯電話に送られてくるプリント番号を使って)操作すれば、自分専用の「1枚の地図」を出力することができるのです。

Google ローカルネットプリントコンビニのプリント・サービス

 実際にそんなスクリプト(ダウンロード・説明などはさらに下にあります)などを作って、試してみたようすが下になります。まずは、携帯電話でフォームページにアクセスしボタンを押すと(1番左の画像)、測位が開始され(2番目の画像)、作業が完了した旨が表示されます(3枚目の画像は"周辺マンガ喫茶地図を作成"した例です)。そして、ネットプリントのサーバから「コンビニでプリントする際に必入力するプリント番号」がメールで送られてくる、というわけです。一番最初からここまで、必要な時間はせいぜい30秒といったところです。やることは、リンクを呼び出してボタンを一回押すだけ、です。

入力ページ測位中…周辺マンガ喫茶地図を作成通知メール

 さて、ここまで来たら近くにあるセブンイレブンに入りましょう(もちろん、上の手順をコンビニの中で行ったって構いません)。最近であれば、都会の街中で周囲を眺めてみれば、セブンイレブンは必ず視界のどこかにあることが多いので、セブンイレブンを捜すのに苦労はしないはずです。そして、店舗中に設置された多機能プリンタの「ネットプリント」のボタンを押し、予約番号を入力し、そしてプリントボタンを押せば、下のような地図が出力されるのです。ただ、それだけ、です。その作業にかかる時間はせいぜい30秒~1分以内といったところでしょう。そんな風にお手軽に「自分の今いる場所を中心にした、自分を探している場所や電話番号・住所が記入され、色んな場所アイコンもちゃんと描かれている見やすく大きくカラフルな地図」がすぐ手にはいるのです。下の地図は、渋谷駅周辺でイタリア料理レストランを検索した結果の地図、です。大きな紙上に、自分にとって必要な情報・地図がとても見やすく出力されていることがわかると思います。

プリントした地図プリントした地図

 例えば、上に示した地図の場合は、A4カラーで出力したので1枚で80円ポッキリです。セブンイレブンで白黒プリントを選択すれば、(例えA3サイズでも)1枚30円ポッキリですし、A3カラーにしてもたったの120円なのです。手間も掛からず、値段も80円程度で最高にカスタマイズされた地図が手にはいる…なんて考えたら、携帯電話でパケット料金を気にしつつ小さな見にくい携帯画面を頼りに街をさまよう気にはもうなれません。

 今回作成してみたのは携帯・Googleローカル・セブンイレブンを組み合わせた(マッシュアップした)地図出力ですが、今回のスクリプト(あるいは単に今回のアイデア)を色々改造してみれば、便利な活用法はたくさんありそうです。例えば、Googleローカルでなく、Googleを使って検索キーワードの高順位のものを組み合わせたページを出力する。あるいはニュース記事やRSSなどを組み合わせたページを作成し、コンビニで出力させて、「あなただけにパーソナライズされたニューズペーパー」を電車の中で読む、そんな面白い可能性が見えてくるはずです。素晴らしく楽しい、そしてあなたの生活を幸せにする「WEB 2.0時代のコンビニ・プリント活用法」が浮かび上がってくるのではないでしょうか?今回の記事がそんなキッカケになったら良いな、と空想してみたりします。

「スクリプト」の説明

 携帯電話で位置を調べ、探したい情報と位置情報をもとにGoogle ローカルからパーソナライズ・カスタマイズされた地図を作り出し、セブンイレブンと富士ゼロックスのネットプリントを使い地図データをネットプリントのサーバーに格納させる、という

  • 「携帯電話」
  • 「Googleローカル」
  • 「(セブンイレブン・富士ゼロックスの)ネットプリント」
を組み合わせるスクリプトCGIはこのようになります(とりあえずWindows用ですが、他のプラットフォーム用に書き直すのも簡単でしょう)。メインルーチンを簡単に抜粋すると、こんな感じです。
if ( param() ) {    my $pass = 'hoge';  # ネットプリントのパスワード    my $user = 'hoge';  # ネットプリントのユーザ名    my $mail_adress = 'hoge@hoge'; #予約番号通知先    # 緯度経度取得    my $lat = param('lat');    my $lon = param('lon');    $lat =~ s/\+//;    $lon =~ s/\+//;    my $str = param('cond');  # 検索条件    $str = jcode(  UrlDecode( $str ) )->euc;    $str = jcode( $str )->utf8;    $str = UrlEncode( $str );
# GoogleローカルのアクセスURL my $uri = '"http://local.google.co.jp/local?f=l&hl=en&sll=' .$lat.','.$lon.'&q=' . $str . '&near=' . '' . '"'; # 地図画像作成 my $file = makeFile( $uri, 1600, 1600 );
# ネットプリントに地図画像送信 postFileToNetprint( $user, $pass, $mail_adress, $file ); # 完了画面表示 printHTML2( $lat, $lon, jcode( UrlDecode( $str ) )->euc );} else { # 初期画面表示 printHTML1();}
 各サブルーチン中を順を追って説明すると、printHTML1()中で、
form action="device:gpsone" method="GET"
というようなフォームを使って、auのGPS携帯から位置情報を取得します(それ以外のキャリアであれば、汎用のライブラリを使うのが簡単でしょう)。そして、メインルーチンGoogleローカルのアクセスURLなどを作成し、postFileToNetprint()で地図画像を作成します。今回はWindowsサーバでテストしたので、url2bmp.exeをsystem()で呼びJPEG画像を作成しています(他のOSであれば、適当なWEBサムネイル画像作成アプリを使えば良いでしょう)。そして、作成した画像をpostFileToNetprint()でネットプリントのサーバに送信するわけです。なお、postFileToNetprint()は下記のようになります。
#========ネットプリントにファイル登録==================sub postFileToNetprint {	my ( $user, $pass, $mail_adress, $file ) = @_;	my $net_print_url    = 'https://www.printing.ne.jp/cgi-bin/mn.cgi';   	$net_print_url = "$net_print_url?i=$user&p=$pass";	my $mech = WWW::Mechanize->new();	# ネットプリントへ	my $response = $mech->get( $net_print_url );	# ファイル登録ページへ	$mech->follow_link( url_regex => qr/&c=0&m=1/i )	 # ファイル送信フォーム;	$mech->submit_form(                                     form_name => 'uploadform',            fields    => { file1 => $file,            color => '1',      # プリント時にカラー/白黒 選択            number => '1',     # 数字のみ番号に設定            secretcodesw =>'0',# 暗証番号は設定しない            secretcode => '',            ailsw => '1',      # 登録結果を通知する            mailaddr => $mail_adress,        },    );	$mech->submit_form( 	    form_name => 'm1form',   # サイズ指定        fields    => { papersize => 'A4',}, # A4, A3, B5, B4                      );	return 1;}
 (Perl素人の私が作成したので、ヘンな箇所も色々ありそうですが)内容自体はとても簡単であることがわかると思います。このスクリプトをもとに、色々改造して「素晴らしく楽しい、そして人の生活を幸せにするWEB 2.0時代のコンビニ・プリント活用法」が生まれるキッカケになれば良いな、と思ったりします。



■Powered by yagm.net