美文网首页
tcpdump 筛选抓包

tcpdump 筛选抓包

作者: hongdada | 来源:发表于2020-01-08 13:54 被阅读0次

    安装

    $ sudo yum install tcpdump
    

    常用参数

    • -i interface: 设置抓取的网卡名(可以使用 -i any 抓取所有网卡的数据包)
    tcpdump -i eth0
    
    • -D: 列出可用的网卡列表
    $ sudo tcpdump -D
    1.eth0
    2.nflog (Linux netfilter log (NFLOG) interface)
    3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
    4.usbmon1 (USB bus number 1)
    5.any (Pseudo-device that captures on all interfaces)
    6.lo
    
    • -w file: 把捕获的包数据写入到文件中(可以使用 -w - 输出到标准输出)
    tcpdump -i eth0 -w debug.cap
    
    • -C size: 使用 -w 写入文件时,限制文件的最大大小,超出时新开一个文件(单位是 1,000,000 bytes)
    $ sudo tcpdump -i eth0 -w debug.cap -C 1
    $ ls debug* -l
    -rw-r--r-- 1 tcpdump tcpdump 1000956 Jan 14 10:16 debug.cap
    -rw-r--r-- 1 tcpdump tcpdump 1000323 Jan 14 10:32 debug.cap1
    -rw-r--r-- 1 tcpdump tcpdump 1000017 Jan 14 10:51 debug.cap2
    -rw-r--r-- 1 tcpdump tcpdump  970705 Jan 14 11:08 debug.cap3
    
    • -r file: 从文件中读取包数据
    tcpdump -r debug.cap
    
    • -v: 启用 verbose output,抓包时输出包的附加信息(可以使用多个 -v: -v, -vv, -vvv 多个 v 会显示更多更详细的信息)
    tcpdump -v
    tcpdump -vv
    
    • -A: 以 ASCII 码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据
    • -x: 打印每个包的头部数据, 同时会以16进制打印出每个包的数据(但不包括连接层的头部)
    • -xx: 打印每个包的头部数据, 同时会以16进制打印出每个包的数据, 其中包括数据链路层的头部
    • -X: 打印每个包的头部数据, 同时会以16进制和 ASCII 码形式打印出每个包的数据(但不包括连接层的头部)
    • -XX: 打印每个包的头部数据, 同时会以16进制和 ASCII 码形式打印出每个包的数据, 其中包括数据链路层的头部
    • -c count: 设置抓取到多少个包后就退出
    tcpdump -i eth0 -c 100
    
    • -n: 不要把地址转换为主机名(直接显示 ip 不要解析为域名)
    tcpdump -n
    
    • -nn: 不要把转换协议和端口号(直接显示协议和端口号,不要转换为协议名称,比如 http)
    tcpdump -nn
    
    • -s snaplen: 设置 tcpdump 的数据包抓取长度为 snaplen , 为 0 时表示让 tcpdump 自动选择合适的长度来抓取数据包.
    tcpdump -s 0
    
    • -S: 打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号.
    tcpdump -S
    
    • -Z user: 使tcpdump 放弃自己的超级权限(如果以root用户启动tcpdump, tcpdump将会有超级用户权限), 并把当前tcpdump的用户ID设置为user, 组ID设置为user首要所属组的ID
    sudo tcpdump -Z user2
    

    常用的参数组合:

    sudo tcpdump -i eth0 -nnS -s 0 -c 100 -Avvv [<expression>]
    sudo tcpdump -i eth0 -nnS -s 1024 -c 100 -Avvv [<expression>]
    sudo tcpdump -i eth0 -nnS -s 1024 -C 10 -c 10000 -v -w debug.cap [<expression>]
    

    默认 tcpdump 会抓取所有的数据,可以通过指定过滤规则来过滤数据包。

    过滤筛选

    网卡过滤

    指定eth1网卡

    tcpdump -i eth1
    

    所有网卡

    tcpdump -i any
    

    主机过滤

    要获取指定 IP 的数据包,不管是作为源地址还是目的地址,使用下面命令:

    tcpdump host 192.168.3.7
    

    要指定 IP 地址是源地址或是目的地址则使用:

    tcpdump src 192.168.1.100
    tcpdump dst 192.168.1.100
    

    或者

    tcpdump src host 192.168.1.100
    tcpdump dst host 192.168.1.100
    

    网段过滤

    tcpdump -i eth1 net 192.168
    tcpdump -i eth1 src net 192.168
    tcpdump -i eth1 dst net 192.168
    

    端口过滤

    tcpdump port 22
    tcpdump src port 22
    tcpdump dst port 22
    

    端口范围过滤

    tcpdump portrange 22-125
    

    协议过滤

    tcpdump -i eth1 arp
    tcpdump -i eth1 ip
    tcpdump -i eth1 tcp
    tcpdump -i eth1 udp
    tcpdump -i eth1 icmp
    

    常用表达式

    非 : ! or "not" (去掉双引号)  
    且 : && or "and"  
    或 : || or "or"
    

    我们还可以使用“与” (and&&)、“或” (or|| ) 和“非”(not!) 来将两个条件组合起来。当我们需要基于某些条件来分析网络报文是非常有用。

    写入读取文件

    将捕获的包写入文件

    tcpdump -i eth1 -w file.cap
    

    读取tcpdump写入的文件

    tcpdump -r file.cap
    

    当然,一般都是下载下来使用Wireshark查看

    具体案例

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

    (1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
    (2)-i eth1 : 只抓经过接口eth1的包
    (3)-t : 不显示时间戳
    (4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
    (5)-c 100 : 只抓取100个数据包
    (6)dst port ! 22 : 不抓取目标端口是22的数据包
    (7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
    (8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

    参考:

    tcpdump使用技巧

    tcpdump 常用操作

    tcpdump命令详解

    抓包神器 tcpdump 使用介绍

    tcpdump参数解析及使用详解(转载)

    tcpdump命令

    网络基本功(十八):细说tcpdump的妙用(下)

    相关文章

      网友评论

          本文标题:tcpdump 筛选抓包

          本文链接:https://www.haomeiwen.com/subject/reqsactx.html