2021-08-03 tcpdump

tcpdump基本使用介绍

tcpdump

  tcpdump是一款经典的网络抓包工具。即使在今天,我们拥有像Wireshark这样更易于使用和掌握的抓包工具,tcpdump让然是网络程序员的必备利器。

  tcpdump给使用者提供了大量的选项,用以过滤数据包或者定制输出格式。前面章节中我们介绍过其中的一些,现在我们把常见的选项总结如下:

  • -n,使用IP地址表示主机,而不是主机名;使用数字代表端口号,而不是服务名称。
  • -i,指定要监听的网卡接口。“-i any”表示抓取所有网卡接口上的数据包。
  • -v,输出一个稍微详细的信息,例如,显示IP数据包中的TTL和TOS信息。
  • -t,不打印时间戳。
  • -e,显示以太网帧头部信息。
  • -c,仅抓取指定数量的数据包。
  • -x,以十六进制数显示数据包的内容,但不现实包中以太网帧的头部信息。
  • -X,与-x选项类似,不过还打印每个十六进制字节对应的ASCII字符。
  • -XX,与-X相同,不过还打印以太网帧的头部信息。
  • -s,设置抓包时的抓取长度。当数据包的长度超过抓取长度时,tcpdump抓取到的将是被截断的数据包。在4.0以及之前的版本中,默认的抓包长度是68字节。这对于IP、TCP和UDP等协议已经足够了,但对于像DNS、NFS这样的协议,68字节通常不能容纳一个完整的数据包。比如我们在1.6.3小节抓取DNS数据包时,就使用了-s选项(测试机器ernest-laptop上,tcpdump的版本是4.0.0)。不过4.0之后的版本默认的抓包长度被修改为65535字节,因此我们不用再担心抓包长度问题了。
  • -S,以绝对值来显示TCP报文段的序号,而不是相对值。
  • -w,将tcpdump的输出以特殊的格式定向到某个文件。
  • -r,从文件读取数据包信息并显示之。

  除了使用选项外,tcpdump还支持用表达式来进一步过滤数据包。tcpdump表达式的操作数分为3种:类型(type)、方向(dir)和协议(proto)。下面依次介绍之。

  • 类型,解释其后面紧跟着的参数的含义。tcpdump支持的类型包括host、net、port和portrange。它们分别指定主机名(或IP地址),用CIDR方法表示的网络地址,端口号以及端口范围。比如,要抓取整个1.2.3.0/255.255.255.0网络上的数据包,可以使用如下命令:
$ tcpdump net 1.2.3.0/24
  • 方向,src指定数据包的发送端,dst指定数据包的目的端。比如要抓取进入端口13579的数据包,可以使用如下命令:
$ tcpdump dst port 13579
  • 协议,指定目标协议。比如要抓取所有ICMP数据包,可以使用如下命令:
$ tcpdump icmp

  当然,我们还可以使用逻辑操作符来组织上述操作数以及创建更复杂的表达式。tcpdump支持的逻辑操作符和编程语言中的逻辑操作符王权相同,包括and(或者&&)、or(或者||)、not(或者!)。比如抓取主机ernest-laptop和所有非Kongming20的机器之间交换的IP数据包,可以使用如下命令:

$ tcpdump ip host ernest-laptop and not Kongming20

  如果表达式比较复杂,那么我们可以使用括号将它们分组。不过在使用括号时,我们要么使用“/”对它转义,要么用单引号“'”将其括住,以避免它被shell所解释。比如要抓取来自主机10.0.2.4,目标端口是3389或22的数据包,可以使用如下命令:

$ tcpdump 'src 10.0.2.4 and (dst port 3380 or 22)'

  此外,tcpdump还允许直接使用数据包中的部分协议字段的内容来过滤数据包。比如,仅抓取TCP同步报文段,可使用如下命令:

$ tcpdump 'tcp[13] & 2 !=0'

  这是因为TCP头部的第14个字节的第2个位正是同步标志。该命令也可以表示为:

$ tcpdump 'tcp[tcpflags] & tcp-syn !=0'

  最后,tcpdump的具体输出格式除了与选项有关外,还与协议有关。前文中我们讨论过IP、TCP、ICMP、DNS等协议的tcpdump输出格式。关于其他协议的tcpdump输出格式,请读者自己参考tcpdump的man手册,本书不再赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值