ポートを開いているプロセスを特定する
使いたいと思ったポートが何者かに使われていたとき、どのプロセスが使ってるのか知りたいってことありますよね。そんなときは、netstatに-oオプションをつけるとプロセスIDを表示してくれるようになるらしいです。例えば、以下のようにして調べられます。ちなみに-aは全部表示、-nはアドレスとポートを数値形式表示のオプションです。
一番右側のPIDのところに出てくるのがプロセスIDになります。
C:\>netstat -nao Active Connections Proto Local Address Foreign Address State PID TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1064 TCP 0.0.0.0:389 0.0.0.0:0 LISTENING 124 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:515 0.0.0.0:0 LISTENING 1404 TCP 0.0.0.0:2030 0.0.0.0:0 LISTENING 292 TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 2008 TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 996 TCP 0.0.0.0:10002 0.0.0.0:0 LISTENING 624 TCP 0.0.0.0:10005 0.0.0.0:0 LISTENING 624 TCP 0.0.0.0:10006 0.0.0.0:0 LISTENING 624 TCP 0.0.0.0:11039 0.0.0.0:0 LISTENING 1900 TCP 127.0.0.1:1067 0.0.0.0:0 LISTENING 2392 TCP 127.0.0.1:4403 127.0.0.1:4404 ESTABLISHED 2464 TCP 127.0.0.1:4404 127.0.0.1:4403 ESTABLISHED 2464 TCP 127.0.0.1:4405 127.0.0.1:4406 ESTABLISHED 2464 TCP 127.0.0.1:4406 127.0.0.1:4405 ESTABLISHED 2464
で、プロセスIDが分かったら、tasklistコマンドで実行ファイルとぶつけるです。これで分かれば、問題ないけど、svchost.exeとかだと、どのサービスか分からないですね。
C:\>tasklist イメージ名 PID セッション名 セッション# メモリ使用量 ========================= ====== ================ ======== ============ System Idle Process 0 Console 0 16 K System 4 Console 0 236 K smss.exe 688 Console 0 388 K csrss.exe 736 Console 0 14,296 K winlogon.exe 760 Console 0 3,876 K services.exe 804 Console 0 5,632 K lsass.exe 816 Console 0 35,456 K svchost.exe 996 Console 0 37,860 K svchost.exe 1064 Console 0 34,064 K svchost.exe 1152 Console 0 75,356 K svchost.exe 1272 Console 0 26,200 K
そこで、/svcオプションの登場。これを使えば、svchost.exeでも中身が分かるってことです。
C:\>tasklist /svc イメージ名 PID サービス ========================= ====== ============================================= System Idle Process 0 N/A System 4 N/A smss.exe 688 N/A csrss.exe 736 N/A winlogon.exe 760 N/A services.exe 804 Eventlog, PlugPlay lsass.exe 816 Netlogon, PolicyAgent, ProtectedStorage, SamSs svchost.exe 996 DcomLaunch, TermService svchost.exe 1064 RpcSs svchost.exe 1152 AudioSrv, Browser, CryptSvc, Dhcp, dmserver, ERSvc, EventSystem, helpsvc, HidServ, lanmanserver, lanmanworkstation, Netman, Nla, RasMan, Schedule, seclogon, SENS, SharedAccess, ShellHWDetection, srservice, TapiSrv, Themes, W32Time, winmgmt, wuauserv, WZCSVC svchost.exe 1272 Dnscache svchost.exe 1308 LmHosts, RemoteRegistry, SSDPSRV, WebClient
この手順はWindows XP、Windows Server 2003で使えるらしいので、私はこれだけで十分そうです。似たようなことをやるために、WindowsではfportやActivePortsってソフトウェアがあるらしいです。ちなみにUnixの場合はlsofって外部コマンドが使えるらしいです。入れてないから試せませんでしたが。。。
なお、今回の手順はこちらの情報に基づいてます。というか、そのままです。
http://www.atmarkit.co.jp/fwin2k/win2ktips/236portcheck/portcheck.html