******************************************************************************** WSOCK32 Winsock Spy Facility... Version 0.91 By Walt Howard April 12, 1996 E-Mail: walth@netcom.com. 文中にある「WSOCK32」とは正式なWinSock32の事です。「WSOCK32SPY」はWaltHowardさん の作ったアプリケーションの事です。WSOCK32.DLLとは特に注意書きが無い場合はWSOCK32 SPYの事を指しています。 ******************************************************************************** WSock32Spyは私がWinsockプログラマーに世界的に無料で利用可能にしている パーソナル なツールです。私はそれを最も良い生産性に繋げる為にバグレポートとフィードバックを 正当に評価するつもりです。WSockSpyが十分高い品質のものであることを知ってもらうた めにソースコードを利用可能にしようとも考えています。 QUICK SETUP ----------- 0)WSOCK32は32ビットのみでWindows95 アプリケーションをモニターします。WSOCK32SPY もまた32ビットのみで動作するように、16ビットWinsock アプリケーションで作動しませ ん。試してはいませんがWin32s、あるいはNTでの動作の保証はありません。 1)調べたい実行ファイルが位置するディレクトリにWSOCK32.DLLをコピーし てください。 2)次の環境変数をつけてください: WSOCK_LOG=LOG WSOCK_FLAGS=s 3)通常のWindows95をインストールした場合、WSOCK32.DLL(標準のSocketアプリケーショ ン用のライブラリ)はC:¥Windows¥System¥WSOCK32.DLLにあります。Windows95を別のドラ イブにセットアップしたなら、次の環境変数を標準WSOCK32.DLL が存在するところにセッ トしてください: SET WSOCK_PATH = 4)Winsockアプリケーションを実行してください。 5)WSOCK32SPYが起動するとメッセージが表示されます。 6)Winsockアプリケーションを終了してください。 7)拡張子xxx が16進数であるLOG.xxxのようなファイルを探してください。通常はWinsock アプリケーションの実行ディレクトリにあります。 8)そのファイルはWinsockセッションのログを含んでいます。大事にとっとい てください WHY WSOCK32 ----------- WinsockAPIに精通することは難しいです。ですが、SMTP、POP3、NNTP、FTP、TELNET 、NF S、NTPなどのプロトコルようにそれらの概要を学ぶ事より容易です。 RFC (浄化のリクエストですか?)書籍が与える標準は完全なものですが、初心者にとっ てはあまりにも完全すぎます。経験無しでは何が重要で、そして何が必要ないものなのか の判断は難しいものです。 WSOCK32SPYはSocketを専門的に扱うWinsockアプリケーションを調べ、世界中 のプログラ マーがWinsockで何をしているのか詳しく示します。WSOCK32SPY を使えば非常に速く、そ して正確にNNTP、SMPT、TELNET、FTPが内 部で何をしているのか見ることが出来るでしょ う。また自分自身が作ったWinSock アプリケーションをデバッグするのに役にたつでしょ う。 WSOCK32SPYは完全デバッガではありません。それは数ヶ月あるいは数年かかるであろうWi nSockプログラミングを単純にするための方法の一つです。 HOW IT WORKS ------------ WSOCK32.DLLは32ビットのWindows95アプリケーションと本物のWSOCK32.DLLの 「間に滑る 」DLLです。 WSOCK32.DLLはWinSockを監視し、WinSockが吐き出す出力と、WinSockが求め る要求を取得します。 WinSockの16ビット版がある上で動作させるのは避けてください。16ビット版 にはまった く使用出来ません。WinSockアプリケーションはWINSOCK.DLLではなくWSOCK32.DLL を使用 するからです。 WSOCK32SPY を使うためには、実行可能はファイルを含んでいるディレク トリにそれを置いてください。WinSockアプリケーションは標準のWSOCK32.DLLを探すため に、まず自分のディレクトリを探すからです。 OPTION ------- WSOCK32SPYはDLLなので、コマンドラインオプションによってそれをコントロ ールする方 法はありません。その制御は環境変数を使用することによって可能になります。追跡する プログラムを実行する前に次の環境変数の1つまたはそれ以上の環境変数を設定しなけれ ばなりません。 1.) WSOCK_LOG= 重要です! これは必ず指定しなければならない設定です。 これを設定しない場合、WSOCK32SPY は結 果を出力しません。これは再ログオンして初めて有効になるスイッチです。 どんな値を与えたとしても、WSOCK32SPY は追跡中のプロセスIDの3つの桁を付加すること によってログファイルを組み立てます。 例: SET WSOCK_LOG=C:¥TRACE¥LOG はログインフォメーションをC:¥TRACEディ レクトリのファ イルの中に置きます。LOG.*というファイルになります。(例えば、LOG.32a、LOG.F1C な どのような) リアルタイムでWSOCK32の入出力を見る必要がある場合、WSOCK32PROパッケー ジを入手必 要があります。(私はたいして役立たないと思ったけど)例えばDOS"Type" コマンドは、 書き込みモードで開いているファイルも内容を出 力してくれます。そのようにしてLOGを 見るか、あるいはこのようにもう一つファイルにそれをコピーすることができます: "Type LOG.34b > savefile " 2.) WSOCK_FLAGS = これは単純な小文字で形成された文字列です。WSOCK32SPYの行動を制御します。あなたは このようにそれを指定するでしょう: SET WSOCK_FLAGS = sfdt f = 直接トレースした情報をクリアする。バッファはクリアしない。 d = データ無し。データの流れを追わない。WSOCK32の呼び出しのみ追跡。 s = データの流れ(Send/Recv/SendTo/RecvFrom)を表示する i = 「i」はIN Boundデータを検出。「o」はOUT Boundデータを検出。 q = 通知メッセージボックスを隠す n = バイナリデータ無し。英数字のバイト以外を表示しない。 t = ディスプレイタイミングマーク(ミリセカンド単位) h = ディスプレイHigh解像度タイミングマーク(マイクロセカンド単位) "n"選択がセットされないなら、WSOCK32SPYは16進法の値として表示できない文字を#サイ ンで表示します。例えば、#ffは0xffです。私は0xと¥が両方x(標準的なC16進法の表 記法) を持つところが非常に厄介なので#を使いました。 タイミングマークをオンにしていると、ミリセカンド単位で"ms"が現れマイクロセカンド 単位で"u"が現れます "n"が選択されているなら、2進法のデータの合計を{と}の間に表示 します。もし16進法の表示できない文字が伝わったなら、それは{16進数}として表示する でしょう。 3.) WSOCK_PATH = 本当のwsock32.dllのパス WSOCK32SPYはAPIコールにトラップを仕掛け、それらの情報を出力してそれから本当のWSO CK32.DLLにそれらを伝えます。WSOCK32SPYは本当のWSOCK32.DLLをロードするためにLoadL ibrary関数を使います。通常C:¥WINDOWS¥SYSTEM¥WSOCK32をロー ドします。もしあなたの 本当のWSOCK32.DLLがそれより異なったディレクトリに あるなら、あなたはこの環境変数 にそのフルパスを設定する必要があります。 TRACE FILE ---------- WSOCK32SPYのトレースファイルはWSOCK32.DLLの関数を少しの重要な情報と一 緒に呼び出 します。呼び出し関数が[]で囲まれ、:で内部は区切られます。()の 中身は戻り値です。 例えばこんな風、 [ソケット:WinSock関数名: データ (戻り値)] [8:connect: 204.236.30.2.119 (-1)] 例: ここにAGENTと呼ばれるWindowsで高い人気を誇るメールリーダーのプログラムをトレース した例があります。(私のメモはかっこに入っている) --------------------------------------------------------------------- [WSAStartup (0)](WSAStartupが呼び出された。戻り値0) [socket: 7](ソケット呼び出しはソケット番号7番に割り当てた) [7:setsockopt (0)](ソケット7番にソケットオプションを設定) [getservbyname](標準関数) [socket: 8] [8:setsockopt (0)] [inet_addr: news.alt.net (0xffffffff)](よくワカンナイ) [WSAAsyncGetHostByName: news.alt.net](IPアドレスを得る) [8:WSAAsyncSelect: HWND:78c msg:1037 mask:59 (0)](WinSockでも重要な関 数。すべてのパラメータを表示) [8:connect: 204.236.30.2.119 (-1)](接続。戻り値-1,失敗) [WSAGetLastError: (10035)] [getservbyname] [socket: 15] [15:setsockopt (0)] [inet_addr: netcom.com (0xffffffff)] [WSAAsyncGetHostByName: netcom.com] [WSAGetLastError: (10035)] [8:recv]MODE READER(むむ!興味深いNNTPコマンドだ) [WSAGetLastError: (10035)] [15:WSAAsyncSelect: HWND:78c msg:1037 mask:59 (0)] [15:connect: 192.100.81.100.110 (-1)] [WSAGetLastError: (10035)] [WSAIsBlocking (false)] [8:recv]AUTHINFO USER hoser(NNTPサーバへログイン) [WSAGetLastError: (10035)] [WSAGetLastError: (10035)] [WSAIsBlocking (false)] [WSAIsBlocking (false)] [8:recv]AUTHINFO PASS bozo (パスワードを指定) [WSAGetLastError: (10035)] [15:recv]USER yomomma [WSAGetLastError: (10035)] [8:recv]GROUP alt.bite.me [WSAGetLastError: (10035)] [15:recv]PASS YoMommabeaho [WSAGetLastError: (10035)] [WSAIsBlocking (false)] [WSAIsBlocking (false)] [15:recv] ******************************************************************************** 翻訳:Sierra