linux学习笔记——tcpdump
前言:
正文:
1. 选项:
tcpdump是一种嗅探器(sniffer),利用以太网的特性,通过将网卡适配器(NIC)置于混杂模式(promiscuous)来获取传输在网络中的信息包。
使用tcpdump, root.
# tcpdump -i eth0 -n -X ‘port 53′ -c 1
-i选项:
interface,告诉tcpdump去监听哪一个网卡。
-n选项:
当遇到协议号或端口号时,不要将这些号码转换成对应的协议名称或端口名称。
-X选项:
告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。
'port 53':
指定端口号
-c选项:
Count, 设置抓包个数
-e选项
增加以太网帧头部信息输出
(OUI,即Organizationally unique identifier,是“组织唯一标识符”,在任何一块网卡(NIC)中烧录的6字节MAC地址中,前3个字节体现了OUI,其表明了NIC的制造组织。通常情况下,该标识符是唯一的。)
-l选项
使得输出变为行缓冲
(Linux/UNIX的标准I/O提供了全缓冲、行缓冲和无缓冲三种缓冲方式。标准错误是不带缓冲的,终端设备常为行缓冲,而其他情况默认都是全缓冲的。)
# tcpdump -i eth0 -l |awk \'{print $1}\'
-t选项
输出时不打印时间戳
-v选项
输出更详细的信息
-F选项
指定过滤表达式所在的文件
-w选项
将流量保存到文件中
-r选项
读取raw packets文件
2. 过滤表达式:
# man pcap-filtertcpdump过滤表达式大致分为:类型, 方向和协议三种类型
指定网络协议
# tcpdump -i eth0 -c 10 'udp'
可以把udp改为ip、ip6、arp、tcp、rarp等。tcpdump支持应用层以下的协议。
指定源机器(src)和目的机器(dst),支持and 和or, 默认:src or dst
# tcpdump -i eth0 'dst 8.8.8.8'
指定目标机器的端口:
# tcpdump -i eth0 -c 3 'dst port 53 or dst port 80'
指定过滤类型, 默认是host
1. port: 指定端口
2. host: 指定主机名或ip地址
3. net: 指定网络段
4. portrange: 指定端口区域
以下例子引用自[6]
【例子1】- 我想抓到那些通过eth0网卡的,且来源是roclinux.cn服务器或者目标是roclinux.cn服务器的网络包
tcpdump -i eth0 'host roclinux.cn'
【例子2】- 我想抓通过eth0网卡的,且roclinux.cn和baidu.com之间通讯的网络包,或者,roclinux.cn和qiyi.com之间通讯的网络包
tcpdump -i eth0 'host roclinux.cn and (baidu.com or qiyi.com)'
【例子3】- 我想获取使用ftp端口和ftp数据端口的网络包
tcpdump 'port ftp or ftp-data'
【例子4】- 我想获取roclinux.cn和baidu.com之间建立TCP三次握手中第一个网络包,即带有SYN标记位的网络包,另外,目的主机不能是qiyi.com
tcpdump 'tcp[tcpflags] & tcp-syn != 0 and not dst host qiyi.com'
【例子5】- 打印IP包长超过576字节的网络包
tcpdump 'ip[2:2] > 576'
【例子6】- 打印广播包或多播包,同时数据链路层不是通过以太网媒介进行的。
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
进一步阅读:
参考资料:
[1]神探tcpdump第一招 [2]神探tcpdump第二招 [3]神探tcpdump第三招 [4]神探tcpdump第四招 [5]神探tcpdump第五招
[6]神探tcpdump第六招