Windows上で特定のUDPポートがオープンになっているかを確認するのにPythonのpsutilを使ってみました。psutilはWindowsでもLinuxでも同じように使えるので、移植も簡単です。
要はZabbix agentみたいなものを作りたかったのです。
netstatコマンドで同じことをしようとすると、言語ごとに表示内容が変わったりするのを自力で整形する必要があるので、一元的に管理できるのは助かります。
インストールは
easy_install psutil
だけでOKです。
psutil – A cross-platform process and system utilities module for Python – Google Project Hosting
公式サイトを見てもらえばわかるのですが、psutilは本当に強力で、CPUの使用率からメモリ、ディスクスペース、ネットワークインターフェイスの状態、プロセスの優先度設定、停止、再開など色々なことが簡単にできます。
以下はPyDHCPLibで動いているプログラムがUDP67番ポートをListenしているかを確認するコードです。
import psutil import re found = False iter = psutil.process_iter() for p in iter: if re.search("python", p.name) != None: connections = p.get_connections(kind='udp4') for con in connections: if con.local_address == ('0.0.0.0', 67): found = True print p break if (found): break
あと、オフライン環境のマシンにもインストールさせたいのでeggファイルを用意します。eggファイルの形式では公開されていないので、easy_installでインストールしたものをコピーしてきます。eggファイルはpython\Lib\site-packages\psutil-0.4.1-py2.7-win32.eggにあります。
pydファイルも含まれているので、ファイルひとつだけコピーしてきて、
easy_install psutil-0.4.1-py2.7-win32.egg
でインストールできます。