zoukankan      html  css  js  c++  java
  • tcpdump抓包命令

    目录:

    • 命令格式
    • 选项
    • expression表达式
    • 示例

    【命令格式】

    man手册显示如下

     1 tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
     2                [ -c count ]
     3                [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
     4                [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
     5                [ --number ] [ -Q|-P in|out|inout ]
     6                [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
     7                [ -W filecount ]
     8                [ -E spi@ipaddr algo:secret,...  ]
     9                [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
    10                [ --time-stamp-precision=tstamp_precision ]
    11                [ --immediate-mode ] [ --version ]
    12                [ expression ]

    【选项】

    -A        以ASCII码打印报文(不包括链路层的头),方便分析网页
    -c        抓取多少数据包后退出
    -C        用于判断-w选项写入将报文写入的文件大小是否超过此值,如果超过就新建文件(文件名后缀1、2、3递增)
    -d        将匹配信息包的编译代码以人类易读的方式输出至stdout
    -dd       将匹配信息包的代码作为C语言程序段格式给出
    -ddd      将匹配信息包的代码以十进制格式给出
    -D        列出当前可用于抓包的网卡名称和对应编号。网卡名称和对应编号可用于-i选项
    -e        打印链路层的头部信息,如MAC地址
    -f        以数字形式打印外部ip地址
    -F        从文件中读取过滤表达式,忽略命令行上的其它表达式
    -G        每隔多少秒重新存储数据包至文件(-w选项指定的文件,需带时间),用法如tcpdump  -i ens35 -G 3 -w  packets_%H%M%S.pcap
    -i        抓取指定网卡的数据流。若不指定,则使用最小编号(-D)的网卡;any参数抓取所有网卡的数据流
    -K        不尝试计算IP、TCP、UDP校验和
    -l        使标准输出变为缓冲形式(小写L);tcpdump -l | tee dat或者tcpdump -l > dat & tail -f dat,实现边写入文件边标准输出
    -L        列出数据连接类型
    -n        显示ip而不是主机名
    -nn       显示端口号,而不是端口名
    -N        不列出全域名
    -#        打印数据包的行号
    -p        非混杂模式,不能与host或broadcast一起使用
    -q        快速输出,显示较少信息
    -Q|-P     选择抓取某个方向的数据包,参数可以是in、out、inout(默认)
    -r        从文件中读取数据包
    -S        使用绝对值,而非相对值,打印tcp序列号
    -s        抓到每一个数据包的截取字节数,默认68字节。参数0表示不截断,抓取完整数据包。
    -T        将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议)
    -t        不打印时间戳
    -tt       打印时间戳秒数,自1970/0/0 00:00:00开始
    -ttt      打印当前行和上一行的时间差
    -tttt     打印标准时间戳格式,如2019-06-21 14:10:49.314665
    -ttttt    打印当前行和第一行的时间差
    -v        打印比较详细的信息
    -vv       打印更加详细的信息
    -vvv      打印非常详细的信息
    -w        将数据包写入文件中,同时能使用-r选项恢复打印
    -X        输出包的头部信息,以16进制和ASCII两种方式同时输出
    -XX       详细输出包的头部信息,以16进制和ASCII两种方式同时输出
    expression    过滤表达式,筛选输出的数据包

    【expression表达式】

    tcpdump表达式由一个或多个"单元"组成,每个单元一般包含ID的修饰符和一个ID(数字或名称)
     
    基本格式为:proto    dir    type
     
    三种修饰符:
    proto:协议类型
    常用的协议有tcp/udp/arp/ip/ether/icmp等。
    若未给定协议类型,则匹配所有可能的类型。例如"tcp port 21","udp portrange 7000-7009";
     
    dir:指定ID的方向
    可以给定的值包括src/dst/src or dst/src and dst,默认为src or dst。
    例如,"src foo"表示源主机为foo的数据包,"dst net 128.3"表示目标网络为128.3的数据包,"src or dst port 22"表示源或目的端口为22的数据包;
     
    type:指定ID的类型
    可以给定的值有host/net/port/portrange。例如"host foo","net 128.3","port 20","portrange 6000-6008"。默认的type为host;
     
    除了修饰符和ID组成表达式单元,还有关键字表达式单元(gateway,broadcast,less,greater)和算术表达式
     
    表达式单元之间可以使用操作符" and / && / or / || / not / ! "进行连接,如"host foo and not port ftp and not port ftp-data"
     
    同样的修饰符可省略,"tcp dst port ftp or ftp-data or domain"与"tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain"意义相同
     
    使用括号"()"可以改变表达式的优先级,但需要注意的是括号会被shell解释,所以应该使用反斜线""转义为"()",在需要的时候,还需要包围在引号中。
     
    常用端口和名字的对应关系可在linux系统中的/etc/services文件中找到

    【示例】

    查询端口ens32的数据包

    # tcpdump -i ens32 -w ens32.pcap

    查询所有端口数据包,并写入文件

    # tcpdump -i any -w any.pcap

    边显示边写入文件

    # tcpdump -i ens32 -l |tee ens32.pcap

    抓取与132服务器交互的数据包

    # tcpdump -i ens35 -q -n -nn net 192.168.237.132

    抓取来自132的数据包(默认会抓取src or dst)

    # tcpdump -i ens35 -q -n -nn src host 192.168.237.132
    # tcpdump -i ens35 -q -n -nn src net 192.168.237.132

    抓取与132服务器交互的数据包,但排除22端口

    # tcpdump -i ens35 -q -n -nn net 192.168.237.132  and not port 22

    抓取端口80上与132服务器交互的数据包

    # tcpdump -i ens35 -q -n -nn -tttt net 192.168.237.132 and tcp port 80

    抓取端口范围10-80上来自132的数据包,同时排除22端口

    # tcpdump -i ens35 -q -n -nn src net 192.168.237.132 and tcp portrange 10-80 and not port 22

    Tips:proto协议不能修饰host和net,只能修饰port或portrange

  • 相关阅读:
    Annotation
    GIT的作用以及Versioncontrol为什么要用GIT
    Http协议
    人工智能的可怕与不可怕
    Makefile简易教程
    Node.js 学习笔记之一:学习规划 & 认知 Node.js
    《大教堂与集市》的启示 — 软件工程的另一种选择
    Git简易教程
    谈谈买书与读书
    clang编译器简介
  • 原文地址:https://www.cnblogs.com/MrReboot/p/11073075.html
Copyright © 2011-2022 走看看