Linux下:
# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.1:80 0.0.0.0:* LISTEN 1167/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 25386/sshd
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1152/php-fpm
tcp 0 40 192.168.1.1:22 192.168.1.8:4281 ESTABLISHED 25435/sshd
tcp 0 0 :::22 :::* LISTEN 25386/sshd
linux下用的是netstat,-p(或--program)表示“显示PID号和程序名称”,-t表示“TCP”,另一个-u表示“UDP”。
显示结果的最后一段“PID/Program name”就是-p的表现,斜杠前面是pid号,后面是程序的名称。
从上面的结果可以看出,该机器开了80,22端口,其中22端口绑定在ipv4和ipv6之上,其中80对应于nginx,22对于于sshd。另外还开了一个本地的9000端口,是php的服务。
目前有一个机器192.168.1.8连接到该机,用的是ssh服务,由sshd负责接入。
另外一个问题:怎么样查看sshd在哪儿呢?这时用whereis sshd,正常情况下就能查到,如果查不到的话,干脆用locate sshd,如果还找不到,那么就是系统出问题了^_^
FreeBSD下:
% % sockstat -l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root sshd 3954 3 tcp4 *:122 *:*
www nginx 9388 6 tcp4 192.168.6.63:80 *:*
www nginx 9388 7 tcp4 192.168.6.63:808 *:*
www nginx 9387 6 tcp4 192.168.6.63:80 *:*
www nginx 9387 7 tcp4 192.168.6.63:808 *:*
www nginx 9386 6 tcp4 192.168.6.63:80 *:*
www nginx 9386 7 tcp4 192.168.6.63:808 *:*
www nginx 9385 6 tcp4 192.168.6.63:80 *:*
root syslogd 630 4 dgram /var/run/log
root syslogd 630 5 dgram /var/run/logpriv
FreeBSD的sockstat,-l参数表示“只显示监听的socket”。
显示结果中,第二例就是程序的名称,第三列是pid号。查找程序同样可以用whereis和locate。
这台机器开启了22端口的ssh服务,同样command列显示为sshd。同时还开启了web服务,由nginx提供,注意有多个nginx监听,并且有两个端口号,这是因为nginx是多进程的程序,启用了多个实例,并且用虚拟机的技术同时监听了两个端口。
windows:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator>netstat -ano
Active Connections
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1248
TCP 192.168.6.201:139 0.0.0.0:0 LISTENING 4
TCP 192.168.6.201:1284 192.168.6.109:80 ESTABLISHED 252
TCP 127.0.0.1:1027 127.0.0.1:1028 ESTABLISHED 252
TCP 127.0.0.1:1028 127.0.0.1:1027 ESTABLISHED 252
UDP 192.168.6.201:137 *:* 4
UDP 192.168.6.201:138 *:* 4
windows下也是用netstat命令,显示pid号要用一个比较偏门点的参数-o,-o表示“显示pid号”,结果中的最后一列就是pid。
上面显示只有一个80的连接,pid号对应的是252。可能有人会感觉奇怪,不是有很多行吗?怎么才只有一个连接呢?在windows中,135-139端口就是“网上邻居”相关的,这玩意是系统自带的,关不掉,不想要也不行。1027和1028相互连接了,是Firefox内部通信使用的。
但是这个命令只显示了pid号,怎么样具体到某一个程序呢?
C:\Documents and Settings\Administrator>tasklist
图像名 PID 会话名 会话# 内存使用
========================= ====== ================ ======== ============
System Idle Process 0 0 16 K
System 4 0 284 K
smss.exe 384 0 428 K
csrss.exe 668 0 8,564 K
winlogon.exe 756 0 4,800 K
services.exe 880 0 3,860 K
lsass.exe 892 0 1,276 K
nvsvc32.exe 1080 0 6,748 K
svchost.exe 1164 0 3,704 K
svchost.exe 1248 0 4,608 K
svchost.exe 1392 0 3,476 K
svchost.exe 1484 0 15,820 K
svchost.exe 1524 0 3,868 K
explorer.exe 1736 0 22,264 K
ctfmon.exe 316 0 3,408 K
firefox.exe 252 0 268,636 K
cmd.exe 568 0 2,920 K
conime.exe 1376 0 3,056 K
tasklist.exe 556 0 4,916 K
wmiprvse.exe 1772 0 6,332 K
其实这就是“任务管理器”中的那一页,第一列是程序的名称,第二列就是pid号,顺着pid号找252,可以看到是firefox,最后一列是占用的内存,firefox占用内存268m。
顺便说一下,我的机器进程数已经非常精减了,除了firefox外,只有不足100m,当然这是“裸奔”的结果,装上任何一款杀毒软件,你的系统不会这么干净的。
windows下怎么样查找程序在什么地方呢?搜索知道在什么地方吗??_?
当然如果习惯用命令行的话,可以用dir c:\ /s firefox.exe试试,但是查询速度嘛,还是不要心急的好!
该贴由hui.chen转至本版2014-11-27 18:24:24