Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1022831
  • 博文数量: 584
  • 博客积分: 2293
  • 博客等级: 大尉
  • 技术积分: 3045
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-28 11:15
文章分类

全部博文(584)

文章存档

2012年(532)

2011年(47)

2009年(5)

我的朋友

分类: 系统运维

2011-12-09 13:20:35

http://blog.csai.cn/user1/23422/archives/2007/portproc.html

在AIX系统下如何知道在给定端口侦听的进程?

 

一、前言

 

   在使用AIX操作系统时,用netstat命令能很容易看到系统内有哪些端口被占用了,哪些端口有进程在侦听。但是,要想知道在给定端口上侦听的进程是什么,恐怕就不那么容易了。IBM AIX 5L上的rmsock命令能输出侦听在网络地址的进程PID。本文详细介绍了用Shell输出在端口侦听的进程信息的实现原理和脚本封装方法。对于急于看到效果的读者可以直接阅读第四小节,先了解该脚本的用法,有兴趣时回过头再阅读第二小节和第三小节,进一步了解实现原理和如何设计脚本。

 

二、实现原理

 

   它的实现原理是:用netstat命令查询在给定端口侦听的网络地址,调用rmsock命令显示在网络地址侦听的进程PID,调用ps命令显示活动进程的完整信息。

   它的核心是rmsock命令,rmsock命令是IBM AIX 5L系统自带的命令。该命令的功能是删除网络地址对应的套接字,假如使用套接字的进程已经退出或者被杀死,该套接字将被从系统内删除,网络地址可以重新使用。假如使用套接字的进程仍然存在,该命令会提示套接字被进程使用,并显示进程号PID。

   下面以telnet端口23为例,演示一下手工方式调用命令获得进程PID的过程:

   * 看网络地址

   netstat -Aan | grep *.23

   执行上述命令后,系统输出如下:

   f100060003652398 tcp        0      0  *.23               *.*                LISTEN

   *.23表示在端口23侦听的网络地址,*代表该主机的任意IP地址。

   f100060003652398 是该套接字的(16进制表示的)系统内核地址。

   * 看进程PID

   rmsock f100060003652398 tcpcb

   执行上述命令后,系统输出如下:

   The socket 0x3652008 is being held by proccess 332008 (inetd).

   显然,占用网络地址的进程PID是 332008,进程执行映像是inetd。

   * 看进程的详细信息

   ps -efl | grep 332008

   执行上述命令后,系统输出如下:

   240001 A     root 332008 393220   0  60 20 40214400   448                1221      -  0:01 /usr/sbin/inetd

   其中第4列是进程PID,最后一列是进程执行映像的完整路径。

  

   至此,进程的完整信息都被暴露出来,我们的目标基本达到了。不过用了三条命令才达到目标,在日常系统管理过程中显得相当繁琐,作者使用Shell脚本把三条命令整合到一起,方便大家使用。

阅读(1131) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~