• tcpdump


    tcpdump 常用命令解释

    img

    tcpdump -ieth1 -tttt -s0 -X -vvvv -c2 '((tcp) and ((port 8080) and ((src 10.64.108.37) or (dst 10.64.108.37))))'

    -i: 指定网卡抓包
    -X: 以 16 进制格式输出数据包的内容, 不加该参数, 会只输出 iptcp/udp 头部信息. 加上该选项会将整个数据包输出
    -S: 将tcp的序列号以绝对值形式输出, 默认相对值
    -v: 会输出稍微详细一点的信息包括校验和 ttl 之类的;
    -vvv: 会尝试解析应用层协议,输出详细信息。二者组合就能完整的详细信息
    -vvvv: 该参数其实是 - v 与 - vvv 的组合

    -tttt: 每一行都打印带有日期的时间戳
    -s: 抓取数据包时默认抓取长度为 68 字节, 加上 - s 0 后可以抓到完整的数据包
    -c: 抓取数据包数量
    -n: 禁用域名解析, 让 tcpdump 直接输出 IP 地址
    -nn:: 禁止转换协议和端口号
    -A: 以 ASCII 值显示抓到的包, 比如和 MySQL 的交互时, 可以通过此命令查看包的文本内容
    -w: 输出信息保存到指定文件

    tcpdump 命令演示

    • 列出可以抓包的网络接口

      tcpdump -D
      
    • 从所有网卡中捕获数据包

      tcpdump -i any
      
    • 将捕获的包写入文件, 这里是以二进制的形式写入的

      tcpdump -i eth1 -w packets_file
      
    • 读取之前产生的 tcpdump 二进制文件, 这里也可以使用各种规则来做过滤

      tcpdump -r packets_file
      
    • 获取更多的包信息, 并且以可读的形式显示时间戳

      tcpdump -ttttnnvvS
      
    • 查看整个网络的数据包

      tcpdump net 192.168.1.0/24
      
    • 根据 IP 地址查看报文, 不管是作为源地址还是目的地址

      tcpdump host 192.168.1.100
      
    • 要指定 IP 地址是源地址或是目的地址

      tcpdump src 192.168.1.100
      tcpdump dst 192.168.1.100
      
    • 查看某个协议或端口号的数据包

      tcpdump ssh
      
    • 捕获某个端口或一个范围的数据包

      tcpdump port 22
      tcpdump portrange 22-125
      

    tcpdump 抓包实践

    打开三个窗口, 按顺序执行:

    1. tcpdump -iany -tttt -s0 '((tcp) and (port 8080))'
    2. nc -l 8080
    3. nc 127.0.0.1 8080

    得到抓包结果(tcp 三次握手):

    2021-07-31 11:10:07.734092 IP VM_232_2_centos.46904 > VM_232_2_centos.webcache: Flags [S], seq 1675810149, win 43690, options [mss 65495,sackOK,TS val 3218517881 ecr 0,nop,wscale 7], length 0
    2021-07-31 11:10:07.734102 IP VM_232_2_centos.webcache > VM_232_2_centos.46904: Flags [S.], seq 2585831719, ack 1675810150, win 43690, options [mss 65495,sackOK,TS val 3218517881 ecr 3218517881,nop,wscale 7], length 0
    2021-07-31 11:10:07.734108 IP VM_232_2_centos.46904 > VM_232_2_centos.webcache: Flags [.], ack 1, win 342, options [nop,nop,TS val 3218517881 ecr 3218517881], length 0
    

    在源 IP 和目的 IP 之后,可以看到是 TCP 报文标记段 Flags [P.]。该字段通常取值如下:

    标志类型 描述
    S SYN Connection Start 发起连接标志
    F FIN Connection Finish 关闭连接标志
    P PUSH Data push 传送数据标志
    R RST Connection reset 异常关闭连接
    . ACK Acknowledgment 表示确认包

    上述值可以组合表示

    [S.]: SYN同步标识,以及确认S的ACK
    [P.]: 推送数据, 和 ACK
    [R.]: RST, 连接重置
    [F.]: FIN 结束连接
    [DF]: Don't Fragment(不要碎裂),当DF=0时,表示允许分片,一般-v时才有这个标识
    [FP.]: 标记FIN、PUSH、ACK组合,这样做是为了提升网络效率,减少数据来回确认等

    然后是该数据包的 tcp 序列号. 对于抓取的第一个数据包, 该字段值是一个绝对数字, 后续包使用相对数值, 以便更容易查询跟踪

    2021-07-31 11:29:03.891028 IP VM_232_2_centos.46918 > VM_232_2_centos.webcache: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 3218801921 ecr 3218799216], length 5: HTTP
    2021-07-31 11:29:03.891065 IP VM_232_2_centos.webcache > VM_232_2_centos.46918: Flags [.], ack 6, win 342, options [nop,nop,TS val 3218801921 ecr 3218801921], length 0
    

    使用 -S 则使用将 tcp 的序列号以绝对值形式输出(默认相对值)

    2021-07-31 11:29:03.891028 IP VM_232_2_centos.46918 > VM_232_2_centos.webcache: Flags [P.], seq 3962824894:3962824899, ack 2154234308, win 342, options [nop,nop,TS val 3218801921 ecr 3218799216], length 5: HTTP
    2021-07-31 11:29:03.891065 IP VM_232_2_centos.webcache > VM_232_2_centos.46918: Flags [.], ack 3962824899, win 342, options [nop,nop,TS val 3218801921 ecr 3218801921], length 0
    

    接下来是 ack 值. 在数据接收方, 该字段代表数据流上的下一个预期字节数据.

    接下来字段是接收窗口大小 win 309,它表示接收缓冲区中可用的字节数,后跟 TCP 选项如 MSS(最大段大小)或者窗口比例值。更详尽的 TCP 协议内容请参考 Transmission Control Protocol(TCP) Parameters。

    最后, length 代表数据包有效载荷字节长度. 这个长度和 seq 序列号中字节数值长度是不一样的

    四次挥手:

    2021-07-31 12:03:38.792861 IP 127.0.0.1.46957 > 127.0.0.1.8080: Flags [F.], seq 13, ack 1, win 342, options [nop,nop,TS val 3219320646 ecr 3219314581], length 0
    2021-07-31 12:03:38.792900 IP 127.0.0.1.8080 > 127.0.0.1.46957: Flags [F.], seq 1, ack 14, win 342, options [nop,nop,TS val 3219320646 ecr 3219320646], length 0
    2021-07-31 12:03:38.792912 IP 127.0.0.1.46957 > 127.0.0.1.8080: Flags [.], ack 2, win 342, options [nop,nop,TS val 3219320646 ecr 3219320646], length 0
    

    参考:
    tcpdump 抓包使用小结
    [tcp] 快速掌握tcpdump抓包
    Tcpdump Examples

  • 相关阅读:
    JDBC的初步了解及使用
    HTML+CSS的小实例
    java接口与抽象类
    java类的继承(基础)
    java中求质数(素数)的问题
    对HTML5标签的认识(四)
    对HTML5标签的认识(三)
    对HTML5标签的认识(三)
    SublimeText2 快捷键一览表
    Node开发项目管理工具 Grunt 对比 Gulp
  • 原文地址:https://www.cnblogs.com/hesper/p/15084186.html
Copyright © 2020-2023  润新知