tcpdump获取数据包

1. 设置网卡的工作模式为混杂模式PROMISC

混杂模式下网卡能够接收一切通过它的数据,而不管该数据的目的地址是否为该网卡;

命令:ifconfig   网卡设备    promisc

然后可以通过ifconfig命令查看网络配置开启了混杂模式:

root@ubuntu:/home/zhu# ifconfig ens33 promisc
root@ubuntu:/home/zhu# ifconfig
ens33: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet 192.168.198.133  netmask 255.255.255.0  broadcast 192.168.198.255
        inet6 fe80::a56e:981d:d530:7d19  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6e:8f:7c  txqueuelen 1000  (Ethernet)
        RX packets 232860  bytes 327392014 (327.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 23757  bytes 1790289 (1.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2. 实用命令详解

tcpdump命令:

tcpdump [-aAbdDefhHIJKlLnNOpqRStuUvxX] [ -B buffer_size ] 
        [ -c count ] [ -C file_size ] 
        [ -E algo:secret ] [ -F file ] [ -G seconds ]
        [ -i interface ] [ -j tstamptype ] [ -M secret ]
        [ -P in|out|inout ]
        [ -r file ] [ -s snaplen ] [ -T type ] [ -V file ] [ -w file ]
        [ -W filecount ] [ -y datalinktype ] [ -z command ]
        [ -Z user ] [ expression ]
  • -c count 

在收到指定数量的分组后,tcpdump就会停止。 

  • -C file_size  (此选项用于配合-w file 选项使用)

该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576)

  • -D

打印系统中所有tcpdump可以在其上进行抓包的网络接口. 每一个接口会打印出数字编号, 相应的接口名字, 以及可能的一个网络接口描述;

  • -e

每行的打印输出中将包括数据包的数据链路层头部信息;

23:39:45.513367 00:50:56:c0:00:08 (oui Unknown) > 01:00:5e:7f:ff:fa (oui Unknown), ethertype IPv4 (0x0800), length 219: 192.168.198.1.59810 > 239.255.255.250.1900: UDP, length 177

//可以看出数据链路层头部信息:6个字节的目的MAC地址、6字节的源MAC地址、2字节的表示网络层所用的协议类型:IPv4、
  • -F  file

使用  file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略;

  • -i  interface

指定tcpdump 需要监听的接口

  • -l 

对标准输出进行行缓冲(nt: 使标准输出设备遇到一个换行符就马上把这行的内容打印出来).在需要同时观察抓包打印以及保存抓包记录的时候很有用. 比如, 可通过以下命令组合来达到此目的:
    ``tcpdump  -l  |  tee dat'' 或者 ``tcpdump  -l   > dat  &  tail  -f  dat''.(nt: 前者使用tee来把tcpdump 的输出同时放到文件dat和标准输出中, 而后者通过重定向操作'>', 把tcpdump的输出放到dat 文件中, 同时通过tail把dat文件中的内容放到标准输出中)

  • -L 

列出指定网络接口所支持的数据链路层的类型后退出.(nt: 指定接口通过-i 来指定)

  • -q

快速(也许用'安静'更好?)打印输出. 即打印很少的协议相关信息, 从而输出行都比较简短;

  • -r  file

从文件file 中读取包数据. 如果file 字段为 '-' 符号, 则tcpdump 会从标准输入中读取包数据;

  • -S 

打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号.(nt: 相对顺序号可理解为, 相对第一个TCP 包顺序号的差距,比如, 接受方收到第一个数据包的绝对顺序号为232323, 对于后来接收到的第2个,第3个数据包, tcpdump会打印其序列号为1, 2分别表示与第一个数据包的差距为1 和 2. 而如果此时-S 选项被设置, 对于后来接收到的第2个, 第3个数据包会打印出其绝对顺序号:232324, 232325).

  • -s  snaplen

设置tcpdump的数据包抓取长度为snaplen, 如果不设置默认将会是68字节(而支持网络接口分接头(nt: NIT, 上文已有描述,可搜索'网络接口分接头'关键字找到那里)的SunOS系列操作系统中默认的也是最小值是96).68字节对于IP, ICMP(nt: Internet Control Message Protocol,因特网控制报文协议), TCP 以及 UDP 协议的报文已足够, 但对于名称服务(nt: 可理解为dns, nis等服务), NFS服务相关的数据包会产生包截短. 如果产生包截短这种情况, tcpdump的相应打印输出行中会出现''[|proto]''的标志(proto 实际会显示为被截短的数据包的相关协议层次). 需要注意的是, 采用长的抓取长度(nt: snaplen比较大), 会增加包的处理时间, 并且会减少tcpdump 可缓存的数据包的数量, 从而会导致数据包的丢失. 所以, 在能抓取我们想要的包的前提下, 抓取长度越小越好.把snaplen 设置为0 意味着让tcpdump自动选择合适的长度来抓取数据包;

  • -t

每行输出中不打印时间戳;

  • -v

当分析和打印的时候, 产生详细的输出. 比如, 包的生存时间, 标识, 总长度以及IP包的一些选项. 这也会打开一些附加的包完整性检测, 比如对IP或ICMP包头部的校验和.

  • -vv

  产生比-v更详细的输出;

  • -vvv  

产生比-vv更详细的输出;

  • -w    

把包数据直接写入文件而不进行分析和打印输出. 这些包数据可在随后通过-r 选项来重新读入并进行分析和打印;

  • -x    

当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据(但不包括链路层的头部).总共打印的数据大小不会超过整个数据包的大小与snaplen 中的最小值. 必须要注意的是, 如果高层协议数据没有snaplen 这么长,并且数据链路层(比如, Ethernet层)有填充数据, 则这些填充数据也会被打印.

  • -xx  

tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据, 其中包括数据链路层的头部;

  • -X    

当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据(但不包括链路层的头部).这对于分析一些新协议的数据包很方便;

  • -XX  

当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据, 其中包括数据链路层的头部.这对于分析一些新协议的数据包很方便.

3. 其他命令

学会使用and、or、not、dst、src、host、

捕获指定主机收到的或者发出的数据包

tcpdump host 主机名(也可以为主机的IP地址)

捕获指定两个主机之间的数据包

tcpdump host 主机名 and \ 另一个主机名

捕获某一主机与其他多个主机之间的数据包

tcpdump host 主机名 and \ (主机名1 or 主机名2 or ...)

捕获某一主机与除了某一主机之外的其他主机之间的数据包

tcpdump host 主机名 and not 主机名

捕获主机hostname发送的所有数据

tcpdump src host hostname

捕获所有送到主机hostname的数据包

tcpdump -i eth0 dst host hostname

监视指定端口的数据包

tcpdump tcp port 23 
  

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCPdump是一种用于网络数据包的抓包工具,可以在Linux和UNIX系统上使用。通过捕获网络传输中的数据包并分析它们的内容,我们可以获得有关网络流量、协议和网络问题的有用信息。 使用TCPdump分析数据包可以帮助我们进行多种操作。首先,我们可以使用过滤器来选择感兴趣的数据包,例如指定源或目的IP地址、端口号、协议等条件。这样可以减少捕获的数据包量,提高分析效率。 其次,我们可以通过查看分析结果来了解网络流量的特征。TCPdump可以显示数据包的源IP地址、目的IP地址、协议类型、源端口号、目的端口号、时间戳等信息。我们可以根据这些信息来分析网络行为,比如判断是否有异常的通信活动、是否有异常的数据流量等。 此外,通过查看数据包的内容,我们还可以进行更详细的分析。TCPdump可以捕获到传输的原始数据,我们可以使用其他工具来解析和分析这些数据。例如,我们可以使用Wireshark来查看数据包的各层协议、负载内容、响应时间、错误码等信息,从而诊断和排查网络问题。 综上所述,TCPdump是一个强大的网络数据包分析工具,可以帮助我们监控和分析网络流量、诊断网络问题以及进行安全审计等任务。通过对数据包的捕获和分析,我们可以获取有关网络流量和通信行为的宝贵信息,进而提高网络性能和安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值