系统检测工具
学习《Linux 高性能服务器编程》第十七章多线程编程,里面介绍了各种 Linux 中提供给开发人员调试和测评的服务器程序,为了印象深刻一些,多动手多实践,所以记下这个笔记。
tcpdump
tcpdump
是一款经典的网络抓包工具。tcpdump
给使用者提供了大量的选项,用以过滤数据包或者定制输出格式。
1 | -n,使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称。 |
除了使用选项外,tcpdump
还支持用表达式来进一步过滤数据包。tcpdump
表达式的操作数分为 3 种:类型 (type)、方向 (dir) 和协议 (proto)
类型,解释其后面紧跟着的参数的含义。
tcpdump
支持的类型包括 host、net、port 和 portrange。它们分别指定主机名(或 IP 地址),用 CIDR 方法表示的网络地址,端口号以及端口范围。比如,要抓取整个 1.2.3.0/255.255.255.0 网络上的数据包,可以使用如下命令:1
tcpdump net 1.2.3.0/24
方向,src 指定数据包的发送端,dst 指定数据包的目的端。比如要抓取进人端口 13579 的数据包,可以使用如下命令:
1
tecpdump dst port 13579
协议,指定目标协议。比如要抓取所有 ICMP 数据包,可以使用如下命令:
1
tcpdump icmp
当然,我们还可以使用逻辑操作符来组织上述操作数以创建更复杂的表达式。tcpdump
支持的逻辑操作符和编程语言中的逻辑操作符完全相同,包括 and (或者 &&)、or (或者 ll)、not (或者!)。比如要抓取主机 ernest-laptop 和所有非 Kongming20 的主机之间交换的 IP 数据包,可以使用如下命令:
1 | tcpdump ip host ernest-laptop and not Kongming20 |
如果表达式比较复杂,那么我们可以使用括号将它们分组。不过在使用括号时,我们要么使用反斜杠 “\” 对它转义,要么用单引号 “ ” 将其括住,以避免它被 shell 所解释。比如要抓取来自主机 10.0.2.4,目标端口是 3389 或 22 的数据包,可以使用如下命令:
1 | tepdump 'src 10.o.2.4 and (dst port 3389 or 22) ' |
此外,tcpdump 还允许直接使用数据包中的部分协议字段的内容来过滤数据包。比如,仅抓取 TCP 同步报文段,可使用如下命令:
1 | tcpdump 'tcp[13]&2 != 0' |
这是因为 TCP 头部的第 14 个字节的第 2 个位正是同步标志。该命令也可以表示为:
1 | tcpdump 'tcp[tcpflags] & tcp-syn != 0 ' |
最后,tcpdump 的具体输出格式除了与选项有关外,还与协议有关。可以查询 man 手册进行学习。
lsof
lsof
(list open file)是一个列出当前系统打开的文件描述符的工具。通过它我们可以了解感兴趣的进程打开了哪些文件描述符,或者我们感兴趣的文件描述符被哪些进程打开了。
lsof
命令常用的选项包括:
1 | -i 显示socket文件描述符。 |
其中,4 表示 IPv4 协议,6 表示 IPv6 协议;protocol 指定传输层协议,可以是 TCP 或者 UDP ; hostname 指定主机名;ipaddr 指定主机的 IP 地址;service 指定服务名;port 指定端口号。比如,要显示所有连接到主机 192.168.1.108 的 ssh 服务的 socket 文件描述符,可以使用命令:
1 | lsof -i@192.168.1.108:22 |
如果 - i 选项后不指定任何参数,则 lsof
命令将显示所有 socket 文件描述符。
除此之外,还有其他参数,比如:
1 | -u 显示指定用户启动的所有进程打开的所有文件描述符。 |
nc
nc
(netcat〉命令短小精干、功能强大,有着 “瑞士军刀” 的美誉。它主要被用来快速构建网络连接。我们可以让它以服务器方式运行,监听某个端口并接收客户连接,因此它可用来调试客户端程序。我们也可以使之以客户端方式运行,向服务器发起连接并收发数据,因此它可以用来调试服务器程序,此时它有点像 telnet 程序。
1 | -i 设置数据包传送的时间间隔。 |
netstat
netstat 是一个功能很强大的网络信息统计工具。它可以打印本地网卡接口上的全部连接、路由表信息、网卡接口信息等。我们主要利用的是上述功能中的第一个,即显示 TCP 连接及其状态信息。毕竞,要获得路由表信息和网卡接口信息,我们可以使用输出内容更丰富的 route 和 ifconfig 命令。
nctstat 命令常用的选项包括:
1 | -n 使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称。 |
Gitalk 加载中 ...