工具"/>
1 系统监测工具
1 系统监测工具
- 常用工具
- tcpdump
- 常用的选项
- 常用的表达式
- 逻辑操作符
- lsof
- 常用的选项
- 查询结果
- netstat
- 常见参数
- 举例
常用工具
LInux提供了很多方便开发人员调试和测评服务的工具,本节按照使用频率依次介绍这些工具: tcpdump 、 lsof、 netstat
tcpdump
常用的选项
tcpdump是一款网络抓包工具,他给使用者提供了大量的选项,用来过滤数据包。
- 参数
-n
:使用IP地址
表示主机而不是主机名;使用数字
表示端口号,而不是服务名; - 参数
-i
:指定要抓包的网卡,-i any
表示抓取所有网卡的数据包; - 参数
-t
:不打印时间戳; - 参数
-s
:设置抓包时的抓取长度,默认是65535字节,这个默认值已经够大了。如果写-s0
,表示抓一个完整的包而不要截断; - 参数
-w
:将抓包内容输出到文件中; - 参数
-v
:当分析和打印的时候, 产生详细的输出. 比如, 包的生存时间, 标识, 总长度以及IP包的一些选项. 这也会打开一些附加的包完整性检测, 比如对IP或ICMP包头部的校验和.; - 参数
-vv
:产生比-v更详细的输出. 比如, NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码; - 参数
-vvv
:产生比-vv更详细的输出. 比如, telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面; - 参数
-c
:仅抓取指定数量的数据包; - 参数
-C
:该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w
选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576); - 参数
-W
:此选项与-C 选项配合使用, 这将限制可打开的文件数目, 并且当文件数据超过这里设置的限制时, 依次循环替代之前的文件; - 参数
-r
:从文件读取数据包信息并显示; - 参数
-S
:打印TCP 数据包的顺序号时, 使用绝对
的顺序号, 而不是相对的顺序号.
笔者经常抓包使用的命令是:
tcpdunp -vv -i ethxxx host xxx -s100 -W100 -C100 -w a.pcap
常用的表达式
tcpdump除了提供选项外,还支持使用表达式过滤数据包,表达式有3种:类型
、方向
、协议
-
类型
:解释后面紧跟着的参数含义,当前支持的类型有:主机名或IP地址host
、用CIDR方法表示的网络地址net
、端口port
、端口范围portrange
。
比如抓取所有进入或离开sundown的数据包。
tcpdump host sundown
比如抓取所有210.27.48.1 主机收到的和发出的数据包
tcpdump host 210.27.48.1
比如抓取整个1.2.3.0/255.255.255.0网络上的数据包
tcpdump net 1.2.3.0/255.255.255.0
-
方向
:src
指定数据包的发送端,dst
指定数据包的目的端,比如抓取进入端口31000的数据包;
tcpdump dst port 31000
比如抓取主机hostname发送的所有数据
tcpdump -i eth0 src host hostname
比如抓取所有送到主机192.168.1.100的数据包
tcpdump -i eth0 dst host 192.168.1.100
-
协议
:指定目标协议,比如抓取所有的ICMP数据包,
tcpdump icmp
逻辑操作符
tcpdump的逻辑操作符与 编程语言操作符完全相同,包括and(或者&&),or(或者||),not(或者!)
,如果表达式比较复杂,可以用括号
将它们分组,不过使用括号时,要么用反斜杠\
进行转义,要么用单引号'
括住
比如抓取helios 与 hot 或者与 ace 之间通信的包
tcpdump host helios and \( hot or ace \)
比如抓取主机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 \)
比如抓取主ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
tcpdump ip host ace and not helios
比如抓取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
比如抓取主机210.27.48.1接收或发出的telnet包,使用如下命令
tcpdump tcp port 23 and host 210.27.48.1
比如抓取udp 123 端口进行监视 123 为ntp的服务端口
tcpdump udp port 123
比如抓取来自主机1.2.3.4,目标端口为31000或者32000的数据
tcpdump 'src host 1.2.3.4 and (dst port 31000 or 32000)'
lsof
lsof(list open file)是一个列出系统打开了哪些文件描述符的工具,通过这个命令,我们可以查看一个进程打开了哪些文件描述符,也可以查看某个文件描述符被哪些进程打开了。
常用的选项
lsof的常用选项包括:
-
lsof -i
用以显示符合条件的文件描述符,完整格式如下,
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 或者 IPv6协议,
protocol --> 传输层协议,TCP 或者UDP,
hostname --> 主机名,
hostaddr --> IP地址,
service -->服务名,
port --> 端口。
比如显示所有连接到192.168.1.200的ssh服务端socket文件描述符
lsof -i@192.168.1.200:22
lsof -i
//显示所有打开的文件描述符lsof -i:80
//显示所有打开80端口的进程lsof -i -U
//显示所有打开的端口和UNIX domain文件lsof -i UDP@[url]www.akadia:123
//显示哪些进程打开了到www.akadia的UDP的123(ntp)端口的链接lsof -i tcp@ohaha.ks.edu.tw:ftp -r
//不断查看目前ftp连接的情况(-r,lsof会永远不断的执行,直到收到中断信号,+r,lsof会一直执行,直到没有档案被显示,缺省是15s刷新)lsof -i tcp@ohaha.ks.edu.tw:ftp -n
//lsof -n不将IP转换为hostname,缺省是不加上-n参数 -
lsof -u
选项限定只列出所有被指定用户打开的文件描述符,可以通过逗号指定多个用户:
lsof -u sms,root
(该条也可使用lsof -u sms -u root) -
lsof -c
显示指定命令打开的文件描述符
lsof -c websrv
-
lsof -p
显示指定进程打开了哪些文件
lsof -p 30297
//显示那些文件被pid为30297的进程打开 -
lsof abc.txt
显示开启文件abc.txt的进程
查询结果
lsof的结果如下:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 8,1 4096 2 /
init 1 root rtd DIR 8,1 4096 2 /
init 1 root txt REG 8,1 150584 654127 /sbin/init
udevd 415 root 0u CHR 1,3 0t0 6254 /dev/null
udevd 415 root 1u CHR 1,3 0t0 6254 /dev/null
udevd 415 root 2u CHR 1,3 0t0 6254 /dev/null
udevd 690 root mem REG 8,1 51736 302589 /lib/x86_64-linux-gnu/libnss_files-2.13.so
syslogd 1246 syslog 2w REG 8,1 10187 245418 /var/log/auth.log
syslogd 1246 syslog 3w REG 8,1 10118 245342 /var/log/syslog
dd 1271 root 0r REG 0,3 0 4026532038 /proc/kmsg
dd 1271 root 1w FIFO 0,15 0t0 409 /run/klogd/kmsg
dd 1271 root 2u CHR 1,3 0t0 6254 /dev/null
lsof输出各列信息的意义如下:
COMMAND:进程的名称,默认只显示前9个字符
PID:进程标识符
USER:拥有该文件描述符的用户的用户名
FD:文件描述符,应用程序通过文件描述符识别该文件。
其中,cwd表示进程的工作目录,rtd表示用户的根目录,txt表示进程运行的程序代码,mem表示直接映射到内存中的文件,有的FD是以“数字+访问权限”表示的,其中数字是文件描述的具体数值,访问权限包括r(可读),w(可写),u(可读可写),0u,1u,2u分别表示标准输入,标准输出,标准错误,3u表示处于LISTEN状态的监听socket,4u表示epoll内核事件表对应的文件描述符。
TYPE:文件类型,如DIR(目录)、REG(普通文件)、CHR(字符设备)等
DEVICE:文件所属设备
SIZE:文件的大小或者偏移值,比如“0t*”或者“0x*”,就是一个偏移值,其余就是个文件大小。
NODE:索引节点,对于socket,则显示协议类型,比如TCP
NAME:打开的文件名称
netstat
netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 ,多播成员等等。
常见参数
-a
:(all) 显示所有选项,默认不显示LISTEN相关。
-t
:(tcp) 仅显示tcp相关选项。
-u
:(udp) 仅显示udp相关选项。
-n
:使用IP地址
表示主机而不是主机名;使用数字
表示端口。
-l
:仅列出有在 Listen (监听) 的服务状态。
-p
:显示socket所属的进程的pid和名字
-r
:显示路由信息,路由表
-e
:显示扩展信息,例如uid等
-s
:按各个协议进行统计
-c
:每隔一个固定时间,执行该netstat命令
举例
netstat -a | moreActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 localhost:30037 *:* LISTENudp 0 0 *:bootpc *:*
Proto:显示连接使用的协议。
Recv-Q:socket内核接收缓冲区中尚未被应用程序读取的数据量。
Send-Q :未被对方确认的数据量。
Local Address :本端地址和端口
Foreign Address:对端地址和端口
State:显示套接口当前的状态,对于无状态协议,比如UDP,显示为空。
更多推荐
1 系统监测工具
发布评论