Linux网络编程 - 网络调试工具

tcpdump的使用

参考链接:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/05/1771563.html

我们用尽量简单的话来定义tcpdump,就是:dump the traffice on anetwork.,根据使用者的定义对网络上的数据包进行截获的包分析工具。作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东西之一。tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。

# tcpdump 
tcpdump: listening on fxp0
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
                         0000 0000 0080 0000 1007 cf08 0900 0000
                         0e80 0000 902b 4695 0980 8701 0014 0002
                         000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
                         ffff 0060 0004 ffff ffff ffff ffff ffff
                         0452 ffff ffff 0000 e85b 6d85 4008 0002
                         0640 4d41 5354 4552 5f57 4542 0000 0000
                         0000 00

tcpdump工具打印指定网络接口中与布尔表达式expression匹配的报头信息。tcpdump采用命令行方式,它的命令格式为:

(1). tcpdump的选项介绍 


            -a    将网络地址和广播地址转变成名字;
   -d    将匹配信息包的代码以人们能够理解的汇编格式给出;
   -dd    将匹配信息包的代码以c语言程序段的格式给出;
   -ddd   将匹配信息包的代码以十进制的形式给出;
   -e    在输出行打印出数据链路层的头部信息;
   -f    将外部的Internet地址以数字的形式打印出来;
   -l    使标准输出变为缓冲行形式;
   -n    不把网络地址转换成名字;
   -t    在输出的每一行不打印时间戳;
   -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
   -vv    输出详细的报文信息;
   -c    在收到指定的包的数目后,tcpdump就会停止;
   -F    从指定的文件中读取表达式,忽略其它的表达式;
   -i    指定监听的网络接口;
   -r    从指定的文件中读取包(这些包一般通过-w选项产生);
   -w    直接将包写入文件中,并不分析和打印出来;
   -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)

(2). tcpdump的表达式介绍

表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字。
    第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23指明端口号是23。如果没有指定类型,缺省的类型是host.http://anheng.com.cn/news/24/586.html 
    第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。
    第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
     除了这三种类型的关键字之外,其他重要的关键字如下:gateway,broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ',与运算是'and','&&';或运算 是'or','││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
       A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
  #tcpdump host 210.27.48.1


  B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中使用括号时,一定要添加'\')
  #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

  C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
  #tcpdump ip host 210.27.48.1 and ! 210.27.48.2


  D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
  #tcpdump tcp port 23 host 210.27.48.1

  E 对本机的udp 123 端口进行监视 123 为ntp的服务端口
  # tcpdump udp port 123

  F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据:
  #tcpdump -i eth0 src host hostname


  G 下面的命令可以监视所有送到主机hostname的数据包:
  #tcpdump -i eth0 dst host hostname

  H 我们还可以监视通过指定网关的数据包:
  #tcpdump -i eth0 gateway Gatewayname

  I 如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令:
  #tcpdump -i eth0 host hostname and port 80

  J 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
  #tcpdump ip host 210.27.48.1 and ! 210.27.48.2

  K 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:
  #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

  L 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
  #tcpdump ip host 210.27.48.1 and ! 210.27.48.2

  M 如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
  #tcpdump tcp port 23 host 210.27.48.1

(3). tcpdump的输出结果介绍

下面我们介绍几种典型的tcpdump命令的输出信息
A,数据链路层头信息
使用命令: #tcpdump --e host ice
     ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
     H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne
t 0:0(0) ack 22535 win 8760 (DF)
    分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0>表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包.0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60是数据包的长度, h219.33357 > ice.telnet表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.

B,ARP包的TCPDUMP输出信息
使用命令:#tcpdump arp
得到的输出结果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包,who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。0:90:27:58:af:1a是主机ICE的MAC地址。

C,TCP包的输出信息
用TCPDUMP捕获的TCP包的一般输出信息是:
src > dst: flags data-seqno ack window urgent options
src> dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R(RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号,window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.

D,UDP包的输出信息
    用TCPDUMP捕获的UDP包的一般输出信息是:
route.port1 > ice.port2: udp lenth
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth

运行tcpdump命令出现错误信息排除

tcpdump: no suitable device found
tcpdump: no devices found /dev/bpf4: A file or directory in the path name does not exist. 
解决方案 2种原因:
1.权限不够,一般不经过处理,只用root用户能使用tcpdump
2.缺省只能同时使用4个tcpdump,如用完,则报此类错。需要停掉多余的tcpdump

netstat工具使用

参考链接:http://www.cnblogs.com/hnrainll/archive/2011/10/21/2220557.html

基本介绍

Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一用于检验本机各端口的网络连接情况。 如果你的计算机有时候接受 到的数据报会导致出错数据删除或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收 的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。Netstat的一些常用选项: 

netstat -s——本选项能够按照各个协议分别显示其统计数据。如果你的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以 用本选项来查看一下所显示的信息。你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。 
netstat -e——本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发 送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量。 
netstat -r——本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的信息。除了显示有效路由外,还显示当前有效的连接。 
netstat -a——本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。 
netstat -n——显示所有已建立的有效连接。 

Netstat的妙用 

经常上网的人一般都使用ICQ的,不知道你有没有被一些讨厌的人骚扰得不敢上线,想投诉却又不知从和下手?其实,你只要知道对方的IP,就可以向他所属的 ISP投诉了。但怎样才能通过ICQ知道对方的IP呢?如果对方在设置ICQ时选择了不显示IP地址,那你是无法在信息栏中看到的。其实,你只需要通过 Netstat就可以很方便的做到这一点:当他通过ICQ或其他的工具与你相连时(例如你给他发一条ICQ信息或他给你发一条信息),你立刻在DOS Prompt下输入netstat -n或netstat -a就可以看到对方上网时所用的IP或ISP域名了。甚至连所用Port都完全暴露了,如果你想给他一些教训,这些信息已经足够…… 
Netstat命令也是可以运行于Windows 95/98/NT的DOS提示符下的工具,利用该工具可以显示有关统计信息和当前TCP/IP网络连接的情况 ,用户或网络管理人员可以得到非常详尽的统计结果。当网络中没有安装特殊的网管软件,但要对整个网络的使用状况作个详细地了解时,就是Netstat大显 身手的时候了。 
  它可以用来获得你的系统网络连接的信息(使用的端口和在使用的协议等),收到和发出的数据,被连接的远程系统的端口等。 

  1、Netstat命令的语法格式 

  Netstat格式:netstat [-a] [-e] [-n] [-s] [-p protocol] [-r] [interval] 
  参数解释如下: 
  -a——用来显示在本地机上的外部连接,它也显示我们远程所连接的系统,本地和远程系统连接时使用和开放的端口,以及本地和远程系统连接的状态。这个 参数通常用于获得你的本地系统开放的端口,用它您可以自己检查你的系统上有没有被安装木马,如果您在你的机器上运行Netstat的話,如发現诸 如:Port 12345(TCP) Netbus、Port 31337(UDP) Back Orifice之类的信息,则你的机器上就很有可能感染了木马。 
  -n——这个参数基本上是-a参数的数字形式,它是用数字的形式显示以上信息,这个参数通常用于检查自己的IP时使用,也有些人使用他是因为更喜欢用数字的形式來显示主机名。 
  -e——显示静态太网统计,该参数可以与 -s 选项结合使用。 
  -p protocol——用来显示特定的协议配置信息,它的格式为:Netstat -p xxx,xxx可以是UDP、IP、ICMP或TCP,如要显示机器上的TCP协议配置情况则我们可以用:Netstat -p tcp。 
  -s——显示机器的缺省情况下每个协议的配置统计,缺省情况下包括TCP、IP、UDP、ICMP等协议。
        -r——用来显示路由分配表。 
  interval——每隔“interval”秒重复显示所选协议的配置情况,直到按“CTRL+C”中断。 

  2、netstat的应用 

  从以上各参数的功能我们可以看出netstat工具至少有以下向方面的应用: 
  (1)、显示本地或与之相连的远程机器的连接状态,包括TCP、IP、UDP、ICMP协议的使用情况,了解本地机开放的端口情况; 
  (2)、检查网络接口是否已正确安装,如果在用netstat这个命令后仍不能显示某些网络接口的信息,则说明这个网络接口没有正确连接,需要重新查找原因。 
  (3)、通过加入“-r”参数查询与本机相连的路由器地址分配情况; 
  (4)、还可以检查一些常见的木马等黑客程序,因为任何黑客程序都需要通过打开一个端口来达到与其服务器进行通信的目的,不过这首先要使你的这台机连入互联网才行,不然这些端口是不可能打开的,而且这些黑客程序也不会起到入侵的本来目的。

lsof工具使用

参考链接:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316599.html

简介

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

输出信息含义

在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
直接输入lsof部分输出为:

[cpp]  view plain  copy
 print ?
  1. COMMAND     PID        USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME  
  2. init          1        root  cwd       DIR                8,1     4096          2 /  
  3. init          1        root  rtd       DIR                8,1     4096          2 /  
  4. init          1        root  txt       REG                8,1   150584     654127 /sbin/init  
  5. udevd       415        root    0u      CHR                1,3      0t0       6254 /dev/null  
  6. udevd       415        root    1u      CHR                1,3      0t0       6254 /dev/null  
  7. udevd       415        root    2u      CHR                1,3      0t0       6254 /dev/null  
  8. udevd       690        root  mem       REG                8,1    51736     302589 /lib/x86_64-linux-gnu/libnss_files-2.13.so  
  9. syslogd    1246      syslog    2w      REG                8,1    10187     245418 /var/log/auth.log  
  10. syslogd    1246      syslog    3w      REG                8,1    10118     245342 /var/log/syslog  
  11. dd         1271        root    0r      REG                0,3        0 4026532038 /proc/kmsg  
  12. dd         1271        root    1w     FIFO               0,15      0t0        409 /run/klogd/kmsg  
  13. dd         1271        root    2u      CHR                1,3      0t0       6254 /dev/null  

每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。
lsof输出各列信息的意义如下:
COMMAND:进程的名称 PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改,txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。
其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为 10。u 表示该文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。同时还有大写 的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。
与 FD 列相比,Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。

常用参数

lsof语法格式是:
lsof [options] filename

[cpp]  view plain  copy
 print ?
  1. lsof abc.txt 显示开启文件abc.txt的进程  
  2. lsof -c abc 显示abc进程现在打开的文件  
  3. lsof -c -p 1234 列出进程号为1234的进程所打开的文件  
  4. lsof -g gid 显示归属gid的进程情况  
  5. lsof +d /usr/local/ 显示目录下被进程开启的文件  
  6. lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长  
  7. lsof -d 4 显示使用fd为4的进程  
  8. lsof -i 用以显示符合条件的进程情况  
  9. lsof -i[46] [protocol][@hostname|hostaddr][:service|port]  
  10. --> IPv4 or IPv6  
  11.   protocol --> TCP or UDP  
  12.   hostname --> Internet host name  
  13.   hostaddr --> IPv4地址  
  14.   service --> /etc/service中的 service name (可以不止一个)  
  15.   port --> 端口号 (可以不止一个)  

lsof使用实例

查找谁在使用文件系统
在卸载文件系统时,如果该文件系统中有任何打开的文件,操作通常将会失败。那么通过lsof可以找出那些进程在使用当前要卸载的文件系统,如下:
# lsof /GTES11/ 
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME 
bash 4208 root cwd DIR 3,1 4096 2 /GTES11/ 
vim 4230 root cwd DIR 3,1 4096 2 /GTES11/
在这个示例中,用户root正在其/GTES11目录中进行一些操作。一个 bash是实例正在运行,并且它当前的目录为/GTES11,另一个则显示的是vim正在编辑/GTES11下的文件。要成功地卸载/GTES11,应该在通知用户以确保情况正常之后,中止这些进程。 这个示例说明了应用程序的当前工作目录非常重要,因为它仍保持着文件资源,并且可以防止文件系统被卸载。这就是为什么大部分守护进程(后台进程)将它们的目录更改为根目录、或服务特定的目录(如 sendmail 示例中的 /var/spool/mqueue)的原因,以避免该守护进程阻止卸载不相关的文件系统。
恢复删除的文件
当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以通过lsof来恢复这些文件。
当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。
在/proc 目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中,即 /proc/1234 中包含的是 PID 为 1234 的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。
当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过lsof从/proc目录下恢复该文件的内容。 假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages文件恢复的方法如下:
首先使用lsof来查看当前是否有进程打开/var/logmessages文件,如下:
# lsof |grep /var/log/messages 
syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)
从上面的信息可以看到 PID 1283(syslogd)打开文件的文件描述符为 2。同时还可以看到/var/log/messages已经标记被删除了。因此我们可以在 /proc/1283/fd/2 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:
# head -n 10 /proc/1283/fd/2 
Aug 4 13:50:15 holmes86 syslogd 1.4.1: restart. 
Aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started. 
Aug 4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 ([email protected]) (gcc version 4.2.0) #1 SMP Wed Jul 18 11:18:32 EDT 2007 Aug 4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map: Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000000000 - 000000000009f000 (usable) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000100000 - 000000001f7d3800 (usable) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000001f7d3800 - 0000000020000000 (reserved) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000e0000000 - 00000000f0007000 (reserved) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000f0008000 - 00000000f000c000 (reserved)
从上面的信息可以看出,查看 /proc/8663/fd/15 就可以得到所要恢复的数据。如果可以通过文件描述符查看相应的数据,那么就可以使用 I/O 重定向将其复制到文件中,如:
cat /proc/1283/fd/2 > /var/log/messages
对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。

实用命令

[cpp]  view plain  copy
 print ?
  1. lsof `which httpd` //那个进程在使用apache的可执行文件  
  2. lsof /etc/passwd //那个进程在占用/etc/passwd  
  3. lsof /dev/hda6 //那个进程在占用hda6  
  4. lsof /dev/cdrom //那个进程在占用光驱  
  5. lsof -c sendmail //查看sendmail进程的文件使用情况  
  6. lsof -c courier -u ^zahn //显示出那些文件被以courier打头的进程打开,但是并不属于用户zahn  
  7. lsof -p 30297 //显示那些文件被pid为30297的进程打开  
  8. lsof -D /tmp 显示所有在/tmp文件夹中打开的instance和文件的进程。但是symbol文件并不在列  
  9.   
  10. lsof -u1000 //查看uid是100的用户的进程的文件使用情况  
  11. lsof -utony //查看用户tony的进程的文件使用情况  
  12. lsof -u^tony //查看不是用户tony的进程的文件使用情况(^是取反的意思)  
  13. lsof -i //显示所有打开的端口  
  14. lsof -i:80 //显示所有打开80端口的进程  
  15. lsof -i -U //显示所有打开的端口和UNIX domain文件  
  16. lsof -i UDP@[url]www.akadia.com:123 //显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接  
  17. lsof -i [email protected]:ftp -r //不断查看目前ftp连接的情况(-r,lsof会永远不断的执行,直到收到中断信号,+r,lsof会一直执行,直到没有档案被显示,缺省是15s刷新)  
  18. lsof -i [email protected]:ftp -n //lsof -n 不将IP转换为hostname,缺省是不加上-n参数  

原文链接

http://blog.csdn.net/geng823/article/details/41749901

你可能感兴趣的:(linux编程之网络编程)