虽然像Wireshark(易于掌握)等图形化的抓包工具已经被我们大量使用,但是有的时候tcpdump还是能派上用场,所以我们依然要掌握一些基本的用法和参数
1.tcpdump的参数说明
参数 | 说明 |
---|---|
-n | 使用IP地址表示主机,而不是主机名;使用数字表示端口而不是服务名称 |
-i | 指定要监听的网卡接口。”-i any”表示抓取所有网卡上的数据包 |
-v | 输出一个稍微详细的信息,例如显示IP数据包里的TTL和TOS信息 |
-t | 不打印时间戳 |
-e | 显示以太网帧头部信息 |
-c | 只抓取指定数量的数据包 |
-x | 以16进制显示数据包内容 |
-s | 设置抓包时的抓取长度。当数据包的长度超过抓取长度时,tcpdump抓取的将是被截断的数据包 |
-S | 以觉对值来显示TCP报文段的序号 |
-w | 将tcpdump的输出以特殊的格式定向到某个文件中 |
-r | 从文件读取数据包信息并显示 |
2.tcpdump的基本表达式说明
tcpdump的表达式分为3种,类型(type)方向(dir)和协议(proto)
(1)类型
tcpdump支持的类型包括host,net,port和portrange,他们分别指定主机名(或IP地址),用CIDR方法表示的网络地址,端口号以及端口范围。比如要抓取整个1.2.3.0/255.255.255.0网络上的数据包,可以使用如下命令
tcpdump net 1.2.3.0/24
(2)方向
src指定数据包的发送端dst指定了数据包的目的端。比如要抓取进入端口3333的数据包,可以使用如下命令
tcpdump dst port 3333
(3)协议
指定目标协议,比如要抓取ICMP数据包,可以使用如下命令
tcpdump icmp
3.tcpdump所支持的逻辑操作符
tcpdump支持and,or,not等,比如要抓取主机shreck和所有非leo主机之间交换的IP数据包可以使用如下命令
tcpdump ip host shreck and not leo
如果表达式比较复杂,我们也可以使用括号将他们分组,并且用“’“将他们括住,以免被shell所解释
比如要抓取来自主机10.0.2.4,目标端口是3389或22的数据包,可以使用如下命令
tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'