ターミナルサービスを実行したクライアントIPアドレスをテキストに保存させてみた

一応、RDPなどでWindows Serverにログインするとシステムイベントに記録されていたりするんですが、そのままだと利用しづらいしって事で、ログインスクリプトで保存してみるテスト。
まー、最初はVBSでいけるかと思ったけどうまくいかず、結局Delphi7でコンソールアプリ作ってた。
何という計画性のなさ。流石俺。 (ぇー

やった事は単純で、ターミナルサービスにログインしてきたユーザのクライアント側のIPアドレスをWTSQuerySessionInformation関数のWTSClientAddressにて取得しております。
動くのはIPv4接続時のみで、IPv6・IPX・NETBIOS・Consoleの場合はそれを出力して終わり。
IPv6は頑張れば取れるんですが、Windows Server 2008のIPv6の返し方がおかしいらしくパッチ当ててないと動作させれないっぽいのでパス。

Download: IP_is_WTS.zip (50.7KB)

Delphiのソースコード付ですが、汎用ライブラリのJEDI API Libraryを使ってます。本当はWtsApi32のpasラッパーを自分でちゃらっと作ろうと思ったけど、知恵熱出たので断念(笑)
JEDIをパスの通ったところに置くか、プロジェクトよりパスを通さないとコンパイルできないかも。

使い方としてはこんな感じ。Windows Server 2003で動作確認。
IPisWTS.exe -d -f "c:\iplogs.txt"
次のようなバッチファイルを作って、ログインスクリプトへ登録すると良いかも。

@echo off

@rem 実行しているディレクトリ
set SCRIPT=%~0
for /f "delims=\ tokens=*" %%z in ("%SCRIPT%") do (
set SCRIPT_DRIVE=%%~dz
set SCRIPT_PATH=%%~pz
)
%SCRIPT_DRIVE%
cd %SCRIPT_PATH%

@rem IPの記録
IPisWTS.exe -d -f "%SCRIPT_DRIVE%%SCRIPT_PATH%ip_logs.txt"


記録先のファイル名指定は絶対パスじゃないと動作しないので注意。
あと、当然ながら実行と記録をする場所に対して、読み込み・書き込み権限が必要。
記録されるのは時間(オプション)とIPアドレスで、タブ区切り。こんな感じで記録される。
2009/08/07 19:17:55 192.168.24.50
2009/08/07 19:18:32 192.168.24.31
2009/08/07 19:22:55 192.168.24.161
2009/08/07 19:23:01 192.168.24.123

使い方としては、DMZ環境への中継サーバとか、後はMetaFrameでのIP記録ですかね?
でも、MetaでIP引くのは業務アプリとかに載せた方が効率良いですし。
RDPのセッションIPを取るぐらいにしか役に立たないかも。
ちょっぴり頑張った割には、使い道無いですな(笑)

| コメント(0) | トラックバック(0) |
■Yahoo!オークション おすすめ商品■
Web Services by Yahoo! JAPAN

トラックバック(0)

トラックバックURL: http://type-y.com/mt/mt-tb.cgi/958

コメントする