«前の日記(2004-07-20(Tue)) 最新 次の日記(2004-07-24(Sat))» 編集

これ日記なん?


2004-07-21(Wed) [長年日記]

_ ポート番号からプロセスID

fportだと、うちの2000サーバはお亡くなりになったことがあったらしい。どうも5分に一回psexecを使って統計データを取ってたことがあったのだが、ブルースクリーンが出たとか。

うーん、しかしどうしてもポート番号から対象プロセスIDは調べないといけないし...こまった。

fport.exeはソース公開してないみたいだし、IPHelperAPIにもそのものずばりはなさげだし。でもなにかきっとあるに違いない。違いないんだけど...

_ 続き2

ぐぐってみたところ、

に記載があった。ぐーぐるキャッシュにもないようなので、転載しておこう

 netstat -o(xp以降)のようなnetstat + プロセスIDをwin2000で実現しようとしています。
 xp以降は散々既出な非公開関数で実現できるのですが、win2000ではググってみたところ

 NtQuerySystemInformationでハンドル-プロセスID情報を取得。
 上記に対しgetsockname / getpeernameが有効であればこれを利用。
 無効なら取得ハンドルからDeviceIoControlの制御コード0x210012 + 適当に情報を入れた
 TDI_CONNECTION_INFORMATIONからTDI_CONNECTION_INFOを取得。

 のような流れが主流のようで、これで一応ローカルIP、ポート、プロセスID
 のデータを取得できています。が、TCPにおけるリモートIP、ポートや
 connection statusがうまく取得できていません。

 TDI_CONNECTION_INFORMATIONを取得するような方法、または他の実現方法、
 TDIに関する情報等ありませんでしょうか?
 DDKのサンプルには目を通していますが、今一バッチリとは来ませんでした。

TDIってなんだろ?

_ 続き3

WMIのSNMPだと、netstatレベルのものは取れるらしい。

そういえばスクリプトセンターは全部目を通したはずだったけど、たしかなかったっけ。