您是否遇到过网络地址和端口号被占用的情况?如果能找到占用该地址和端口号的进程并终止它,从而释放该网络地址和端口号,问题岂不就得到解决了吗? 有关具体的操作,请参阅以下
Q: How do I find out what process is associated with a socket connection (a .network address and port number)?
------------------------------------------------------------------
There are several ways to accomplish this (lsof, pfiles, crash):
A1. Use lsof which is available on the net from several locations:
ftp://vic.cc.purdue.edu/pub/tools/unix/lsof/lsof.tar.Z
http://www.sunfreeware.com/programlistsparc7.html#lsof64
http://www.sunfreeware.com/programlistsparc8.html#lsof
http://sunsite.doc.ic.ac.uk/sun/Solaris/freeware
lsof examples:
Ex: netstat -a shows a connection between hodware port 36169 to ravin port 23
lsof shows the PID owner of the telnet connection.
example1# netstat -a
...
hodware.36169 ravin.telnet 8760 0 8760 0 ESTABLISHED
# lsof -i TCP@hodware:36169
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
telnet 2686 steve 6u inet 0x709f21e8 0t0 TCP hodware:36169->ravin:telnet (ESTABLISHED)
Ex: netstat -an shows a connection in close_wait.
lsof showd the PID and process associated with that port.
example2# netstat -an |grep CLOSE_WAIT
10.10.192.103.58046 10.10.37.122.44788 24820 0 24820 0 CLOSE_WAIT
# /usr/local/bin/lsof -i | grep 44788
netscape 27096 steve 34u inet 0x300039bf760 0t0 TCP hodware:58046->nop:44788 (CLOSE_WAIT)
# ps -elf |grep 27096
8 S steve 27096 19185 0 51 20 ? 9307 ? Feb 18 pts/19 50:03 /opt/netscape/netscape
example3# netstat -an |grep 7100
*.7100 *.* 0 0 0 0 LISTEN
# /usr/local/bin/lsof -i TCP:7100
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
inetd 4512 root 33u inet 0x300014ef750 0t0 TCP *:fs (LISTEN)
to list all ports with a process:
example4# lsof -i -P | grep snmpdx
snmpdx 5771 root 4u inet 0x60f5add0 0t0 UDP *:161 (Idle)
snmpdx 5771 root 5u inet 0x60ded648 0t0 UDP *:38725 (Idle)
snmpdx 5771 root 6u inet 0x61101358 0t0 UDP *:38726 (Idle)
#
to list all TCP connections
example5# /usr/local/bin/lsof -i TCP
note: lsof is not supported by Sun Enterprise Services, so you are on your own
as far as obtaining it, compiling it and running it and any problems you may encounter.
________________
A2. or use Solaris 8 pfiles
Solaris 8 added new feature to display socketname using pfiles tool.
see proc(1) and below example.
solaris 8 pfiles methods :
example5# cd /proc ; /usr/proc/binpfiles * | egrep "^[0-9]|sockname" | more
....
968: in.ftpd
sockname: AF_INET6 ::ffff:10.1.1.77 port: 21
sockname: AF_INET6 ::ffff:10.1.1.77 port: 21
or
example6# su
# cd /proc
# /usr/proc/bin/pfiles * > /tmp/pfiles.out
# vi /tmp/pfiles.out
/port: PortOfInterest
?^[0-9]
________________
A3. if you are resourceful enough, use adb or crash to trace down each open file descriptor
that a process owns, but there is no way to go in the reverse direction so this would be extremely
time consuming and tedious.
C.Arthur 回复于:2004-02-26 11:28:24 |
好文,验证过了吗 |
xieliangcheng 回复于:2004-02-26 11:46:17 |
注意以上bin与pfiles中间应有一个/(斜杠)
solaris 8 pfiles methods : example5# cd /proc ; /usr/proc/binpfiles * | egrep "^[0-9]|sockname" | more .... 应加上一斜如下: solaris 8 pfiles methods : example5# cd /proc ; /usr/proc/bin/pfiles * | egrep "^[0-9]|sockname" | more .... |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/