水曜日, 8月 30, 2006

Javaのソケットプログラミング

Jpcap

Windowsではできなかった、ネットワークレイヤ以下も編集できるようになります。

http://www.geocities.jp/appn_hpr/system/jpcap/package-summary-j.html

土曜日, 8月 26, 2006

iDiskをWindows XPから利用する。

Appleの.Macウェブページからではファイル単位でのアップロード・ダウンロードしかできないため、iDisk Utility for Windows XPを使って、Windows Exproler上でFTPの動作を行う。

以下引用。

WindowsベースのコンピュータからiDiskにアクセスする

iDiskへは、Windowsベースのコンピュータからでもインターネットを使ってアクセスできます。たとえば、職場ではMicrosoft Windows、自宅ではMacをお使いの場合でも、ファイルをディスクに入れて移動させたり、ノートブックパソコンを持ち歩いたりする必要はなく、ま た、大きなサイズのファイルをメールで送信してエラーになることもありません。対応しているWebブラウザさえあればiDiskにアクセスできるので、余 分なソフトウェアをダウンロード・インストールせずに、ファイルをiDiskにアップロードしたり、iDiskからファイルを別のコンピュータにダウン ロードすることが可能です。

ダウンロードはこちら
http://www.mac.com/2/idiskutility_download.html

利用方法はこちら
http://www.mac.com/2/learningcenter/Modules/dmStoringFiles_t3.html

金曜日, 8月 25, 2006

文字コード変換ツール「KanjiTranslator」

KanjiTranslator

古いリナックスマシンで作られていたソースの文字コードを変換するのに利用しました。

解凍後、exeを起動してドラック&ドロップで「変換」をクリックすればOKです。

水曜日, 8月 23, 2006

Lineeの実行メモ

eth0はIP: 172.24.163.211
eth1はIP割り当てなし

にしたつもり。

設定方法はGUIでeth1を止める。IPアドレスを消して#ipconfig eth1 upで起動する
(GUIではIPを割り当てないと休止中に見えるが大丈夫)


問題点!!

Linee実行状態でpingテストを行ったが問題点あり。

まず、conf設定は、
デフォルトの固定400ms, 廃棄20% から 固定400ms,廃棄30%に変更。
pingはすべてエラー(宛先不明?)する。

次に、固定400ms, 廃棄25%に設定。
ほぼ送信可能。最初のネゴシエーション?時に少し遅延とエラーが発生しているよう。

なぜ!?

Bootcamp 1.1

  • 無線LANが使えるようになっていました。(Atherosドライバサポート)
  • イジェクトが可能になった。(イジェクトキーによる)
  • モニターの輝度調整可能(fnキーとの連携)
  • オーディオミュート可能(fnキーとの連携)
  • 音量コントロール使用できず
  • 二本指のトラックパッドも未対応

土曜日, 8月 19, 2006

RAWモード・ソケット

UDPヘッダの編集をしたり、イーサネットを流れるフレームのMACアドレスからまるまる受信したりする、通常では許されていないソケットの使用方法。アプリケーションの実行にはスーパーユーザ特権が必要。一般ユーザ権限で実行するとソケットを生成できずにエラーとなる。

ケース1
アプリケーションがTCPやUDPのレイヤ4ヘッダを編集し、カーネルはIPヘッダより下のレイヤのヘッダーを生成。
protoent = getprotobyname("tcp");
s = socket(PF_INET, SOCK_RAW, protoent->p_proto);

読み出し書き込みには送信元を取得するためにrecvfromや送信先を指定するためにsendtoといったシステムコールを利用する。

ケース3
イーサネットのMACアドレス部分からアプリケーションで編集する。
s = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL) );
ソケットはパケット・ドメインでオープンされる(第一引数に注目)。

読み出し書き込みには、相手先IPアドレスを指定する必要がないのでシステムコール、readとwriteを利用する。

インタフェースを「プロミスキャス・モード」にすると、あて先MACアドレスによらず、インタフェースに接続されているネットワークセグメントを流れるすべてのフレームを取り込むことも可能になる。(通常では自分宛またはブロードキャストのみ)

ケース2
IPヘッダを送受信する。tracerootコマンドなどでの利用が考えられる。
利用方法はケース1の変形版で、TCPを指定した部分でIPを指定するだけです。

ただしIPヘッダまで含めて取得したい場合、IPヘッダも含めて編集したパケットを送出したい場合は、setsocketoptを使って、その旨をカーネルに指定しておく必要がある。
int onoff = 1;
s = socket(PF_INET, SOCK_RAW, IPPROTO_RAW);
setcoketopt(s, IPPROTO_IP, IP_HDRINCL, (void *)&onoff, sizeof(onoff) );


これらケース1から3の方法はLinuxカーネルが前提で、Windows APIではケース1は利用できるがケース3はサポートされていません。(これを実現するにはデバイス・ドライバを作成するか、他のDLL(Dynamic Link Library)を呼び出す必要がある。DLLはWinPcapが有名。)
ケース1のRAWモード・ソケットをWindowsで利用するためには、RAWモードで指定したソケットをWSARecvというAPIで読み出せば、IPヘッダの最初からパケットを取得できる。また、自分のIPアドレス宛以外のパケットも含むすべてのパケットを取得するにはWSAIoctlというAPIを使って、ソケットのSIO_RCVALLオプションを有効にする。
DWORD optval, d;
optval = 1;
s = WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, NULL, 0, WSA_FLAG_OVERLAPPED);
WSAIoctl(s, STO_RCVALL, &optval, sizeof(optval), NULL, 0, &d, NULL, NULL);

参考文献
1. 「いまどきのソケットプログラミング」 波多 浩昭 著 日経BP社 2004年