程序员肖邦的博客 享受编程和技术所带来的快乐

使用tcpdump抓包

2019-02-03
肖邦

学会分析数据包,是运维和开发必备的基本技能。tcpdump 和 wireshark 是最常用的两个抓包工具,tcpdump 是 Linux 系统下的抓包工具,本文总结 tcpdump 工具的最常见的使用方法, 但不会非常详细讲解每个参数和选项。

tcpdump 安装

  • 安装

    # CentOS 安装
    $ yum install tcpdump
      
    # Ubuntu 安装
    $ apt-get install tcpdump
      
    # 源码安装参考:https://www.tcpdump.org/#latest-releases
    

常用的抓包命令

  • 查看列举所有网卡设备

    $ tcpdump -D
    
  • 抓取指定网卡的数据包

    $ tcpdump -nni eth0 -c 1
      
    # 参数说明:
    # -nn:表示以数字形式显示 IP 地址和端口号
    # -i:指定网卡
    # -c:表示抓 N 个包就停止
    
  • 关于时间戳的显示

    $ tcpdump -nni eth0 -c 1 -tttt  # 以正常日期格式显示
      
    # 时间显示说明
    # 1. 默认显示:19:35:28.625250
    # 2. -t 不显示时间
    # 3. -tt 显示:1568374582.079446
    # 4. -ttt 显示:00:00:00.001674 显示邻近两行报文间经过的秒数
    # 5. -tttt 显示:2019-09-13 19:37:39.190301
    # 6. -ttttt 显示:自第一个抓取的报文起经历的秒数
    
  • 数据分析显示常用选项

    -e  显示数据链路层头部
    -q  不显示传输层信息
    -v  显示网络层头部更多的信息
    -n  显示 IP 地址、数字端口代替 hostname -S  TCP 信息以绝对序列号代替相对序列号
    -A  以 ASCII 方式显示报文内容,适用 HTTP 分析
    -x  以 16 进制方式显示报文内容,不显示数据链路层
    -xx 以 16 进制方式显示报文内容,显示数据链路层
    -X  同时以 16 进制及 ASCII 方式显示报文内容,不显示数据链路层
    -XX 同时以 16 进制及 ASCII 方式显示报文内容,显示数据链路层
    
  • 常用的抓包命令

    # 从 eth0 网卡抓取关于 172.16.234.208 相关的数据包
    $ tcpdump -nni eth0 host 172.16.234.208
    $ tcpdump -nni eth0 dst host 172.16.234.208    # 目的主机
    $ tcpdump -nni eth0 src host 172.16.234.208    # 源主机
      
    $ tcpdump -nni eth0 net 172.16.234.0/24    # 172.16.234.0/24 网段
      
    $ tcpdump -nni eth0 port 80    # 80 端口
    $ tcpdump -nni eth0 src port 80
    $ tcpdump -nni eth0 dst port 80
    $ tcpdump -nni eth0 src host 172.16.234.208 and dst port 22
    $ tcpdump -nni eth0 'src host 172.16.234.208 and dst port 22' or \
                                'src host 172.16.1.1 and dst port 80'
    $ tcpdump -nni eth0 udp    # 指定 udp 协议,如:tcp、icmp、ip、arp 等
      
    
  • 读写pcap文件

    $ tcpdump -nni eth0 src host 172.16.234.208 -c 100 -w test.pcap
    $ tcpdump -nnr test.pcap tcp    # 读取 test.pcap 文件中 tcp 协议的报文
    

Comments

Content