tcpdump的学习

正文

在Linux下抓包需要使用tcpdump命令,本文就主要对该命令进行一个简单的学习与总结。

简介

tcpdump是一个抓包工具。它能够监听、记录通过某一个主机进出的网络流量。并且可以保存到文件,或者再从文件读取抓下来的数据包。它保存下来的包也可以导入到wireshark里面,利用gui工具进行查看。当然非常重要的一点是,抓取的时候能够设置各种各样的过滤器,在海量数据里寻找有用信息。

使用

首先,使用tcpdump要使用root登录或者sudo权限,且在使用时如果不加任何参数,它会抓网络设备中第一个设备的包(不包括lo),并且打印出每个包的简短信息。

  • -nn:tcpdump遇到协议号或者端口号时,不将这些号码转换成对应的协议名称或者端口名称。比如,21端口是FTP端口,我们希望直接显示21,而非FTP。
  • -x:告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。
  • -t:输出不打印时间戳
  • -c:设置抓取的包的个数
  • -s:限定包的大小,默认每个包存68bytes。加上-s选项,调整这个参数。

指定协议

常用协议包括tcp、udp、icmp等,使用方法:

tcpdump tcp

总共可指定的协议如下:

  • ether——链路层协议
  • fddi——链路层协议
  • tr——链路层协议
  • wlan——链路层协议
  • ppp——链路层协议
  • slip——链路层协议
  • link——链路层协议
  • ip
  • arp
  • rarp
  • tcp
  • udp
  • icmp
  • ip6
  • radio

文件

  • -w:将抓到的包写入文件,文件格式为.cap
  • -r:从文件中读取数据

指定网卡

  • -i:可以指定网卡,其中 -i any表明监听所有网卡

运算符

当设置的过滤条件过多时,可以使用运算符来将多个过滤条件合在一起使用。

  • and “与”运算符,使用and 或者 &&
  • or “或”运算符,使用or 或者 ||
  • not “非”运算符,使用not 或者 !

host

  • host:只抓取经过该host的数据

port

  • port:只抓取目的端口或源端口的数据

src dst

  • src:指定数据源地址
  • dst:指定数据发送的目标地址

示例

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port !22 and src net192.168.1.0/24 -w ./target.cap

# tcp: 数据报类型,必须放在最前面
# -i:只抓取经过网卡eth1的数据
# -t:不显示时间戳
# -s 0:抓取数据包时默认抓取长度为68字节,设置为0可抓取到完整的数据包
# -c 100:只抓取前100个包
# dst port !22:抓取除22端口外的所有数据包
# src net 192.168.1.0/24:数据包的源地址为192.168.1.0/24
# -w ./target.cap:将抓取到的数据保存到cap文件中,方便使用wireshark查看


标题:tcpdump的学习
作者:staymeloo7
联系方式:staycoolsun@gmail.com

    评论
    0 评论
avatar

取消