Q. 如何使用 Linux / UNIX 平台下的 TCPDump 工具捕获特定协议或端口比如 80 (http)?如何使用 TCPDump 将流记录下来,然后(根据记录)查找到问题所在?
A. TCPDump 是一个用于网络监控和数据采集的工具。它可以给我们节约大量的时间,并能用于网络调试或者服务器相关的问题的解决。Tcpdump 会将通过匹配布尔表达式的网络接口的包的内容的描述信息打印出来。
监控 eth1 接口的所有包
tcpdump -i eth1
监控端口 80 (HTTP) 的所有网络流量
tcpdump -i eth1 'port 80'
监控端口 25 (SMTP) 的所有网络流量
tcpdump -vv -x -X -s 1500 -i eth1 'port 25'
其中,
- -vv:更详细的输出信息。
- -x:在解析和打印时,作为打印每一包的头信息的补充(默认情况下 TCPDump 只打印每一包的头信息),将每一包的数据内容也打印出来。
- -X:在解析和打印时,作为打印每一包的头信息的补充,将每一包的内容信息也以十六进制和 ASCII 码的方式打印出来。这样对于解析新协议是很方便的。
- -s 1500:粗略地显示每一包的信息而不是默认的 68。这在查看大量信息时是很有用的。
- -i eth1:监控 eth1 接口。
使用定时任务捕获流量信息
TCPDump 可以用于查找攻击和其他一些问题。比如你的 Web 服务器每天半夜遇到的问题。将以下命令写进
定时任务,它将定时捕捉 30000 包的信息并将裸数据写进一个叫做 port.80.debug.txt 的文件里:
@midnight /usr/sbin/tcpdump -n -c 30000 -w /root/port.80.debug.txt
第二天你可以登录服务器,读取 /root/port.80.debug.txt 文件:
tcpdump -X -vv -r /root/port.80.debug.txt
这种简单的技术可以用来记录和调试问题。
更多阅读
- man page tcpdump
原文链接: http://www.cyberciti.biz/faq/tcpdump-capture-record-protocols-port/。