• 常用 tcpdump 抓包方式


    目录

    tcpdump 指令

    tcpdump(dump the traffic on a network)是 Linux 强大网络数据采集分析工具,可以将网络中传输的数据包(涵盖整个 TCP/IP 协议族的数据包)完全截获下来提供分析。它支持针对网络层、协议、主机、网络接口或端口的过滤,并提供 and、or、no t等逻辑原语来帮助你筛选出关注的信息。

    基本上 tcpdump 的输出格式为:

    系统时间 源主机.端口 > 目标主机.端口 数据包参数
    

    官方网站:tcpdump

    关键字

    关于类型

    • host - 主机:host 210.27.48.2 指明 210.27.48.2 是一台主机
    • net - 网络(网段):net 10.0 指明 10.0 是一个网络地址
    • port - 端口:port 23 指明端口号是 23

    NOTE:缺省类型是 host。

    关于传输方向

    • src - 源:src 210.27.48.2 指明 IP 数据包中的源 IP 地址是 210.27.48.2
    • dst - 目标:dst net 10.0 指明 IP 数据包中的目的网络地址是 10.0
    • dst or src
    • dst and src

    NOTE:缺省方向是 src or dst

    关于协议

    • ip
    • arp
    • rarp
    • tcp
    • udp
    • fddi

    NOTE: 缺省是所有协议的包

    关于逻辑条件

    • and
    • or
    • not

    NOT:不同的关键字之间结合使用需要逻辑运算符

    其他

    • gateway
    • broadcast
    • less
    • greater

    常用指令选项

    Help:

    [root@localhost ~]# tcpdump --help
    tcpdump version 4.9.2
    libpcap version 1.5.3
    OpenSSL 1.0.2k-fips  26 Jan 2017
    Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
    		[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
    		[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
    		[ -Q|-P in|out|inout ]
    		[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
    		[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
    		[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
    		[ -Z user ] [ expression ]
    
    • -i:指定监听的 interface
    • -n:不启用主机名解析,显示 IP 地址,默认显示为 hostname
    • -nn:不启用主机名解析与端口名称转换,显示端口号,默认显示端口号对应的服务名
    • -c:指定抓取数据宝的数量
    • -D:显示操作系统当前所有可以使用 tcpdump 抓包的 interface 设备名
    • -b:在数据链路层上选择协议,包括 ip、arp、rarp、ipx 等
    • -N:不显示主机名中的域名部分。e.g. hostname nic.ddn.mil 只输出nic
    • -t:不打印时间戳
    • -tttt:输出 date 默认格式的时间戳
    • -q:只输出少量的协议信息
    • -v:输出稍微详细的信息,例如输出 IP 数据包中的 ttl 和服务类型信息
    • -vv:输出详细的报文信息
    • -vvv:输出更加详细的报文信息
    • -w:直接将抓取的数据包信息写入文件
    • -P:指定要抓取的包是流入还是流出包,可以指定 in、out、inout 参数,默认为 inout
    • -s len:设置抓取的数据包长度为 len,默认为 65535Byte,如果要抓取的数据包长度大于 len,可能会发生包截断。
    • -S 将 TCP 的序列号以绝对值形式输出,而不是相对值

    常规操作示例

    在这里插入图片描述

    NOTE: 测试环境 IP 172.18.22.200,hostname localhost.localdomain.ssh

    过滤主机

    抓取经过指定 interface 的,并且 DST_IP 或 SRC_IP 是 172.18.22.200 的数据包。

    tcpdump -i ens160 host 172.18.22.200
    
    • 筛选 SRC_IP,抓取经过 interface 且从 172.18.22.200 发出数据包
    tcpdump -i ens160 src host 172.18.22.200
    
    • 筛选 DST_IP,抓取经过 interface 且发送到 172.18.22.200 的数据包
    tcpdump -i ens160 dst host 172.18.22.200
    

    应用场景:你希望查看发送到 host 172.18.22.208 的数据包有没有经过当前主机的 ens160 网卡

    [root@localhost ~]# tcpdump -i ens160 -nnt -c 1 dst host 172.18.22.208 and icmp
    ...
    IP 172.18.128.204 > 172.18.22.208: ICMP echo request, id 27729, seq 138, length 64
    

    过滤端口

    抓取经过指定 interface 的,并且 DST_PORT 或 SRC_PORT 是 22 的数据包。

    tcpdump -i ens160 port 22
    
    • 筛选 SRC_PORT
    tcpdump -i ens160 src port 22
    
    • 筛选 DST_PORT
    tcpdump -i ens160 dst port 22
    

    应用场景:你希望查看发送到 host 172.18.22.208 的 22 号端口的数据包有没有经过当前主机的 ens160 网卡

    [root@localhost ~]# tcpdump -i ens160 -nnt -c 1 dst host 172.18.22.208 and port 22
    ...
    IP 172.18.128.204.60812 > 172.18.22.208.22: Flags [S], seq 908466914, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 949822094 ecr 0,sackOK,eol], length 0
    

    过滤网络(网段)

    抓取经过指定 interface 的,并且 DST_NET 或 SRC_NET 是 172.18.22 的数据包。

    tcpdump -i ens160 net 172.18.22
    
    • 筛选 SRC_NET
    tcpdump -i ens160 src net 172.18.22
    
    • 筛选 DST_NET
    tcpdump -i ens160 dst net 172.18.22
    

    过滤协议

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

    复杂的逻辑表达式过滤条件

    抓取经过 interface ens160,发送到 host 172.18.22.208 或 172.18.22.200 的 TCP 协议 22 号端口的数据包。

    [root@localhost ~]# tcpdump -i ens160 -nntvv -c 10 '((tcp) and (port 22) and ((dst host 172.18.22.208) or (dst host 172.18.22.200)))'
    ...
    IP (tos 0x10, ttl 61, id 0, offset 0, flags [DF], proto TCP (6), length 52)
        172.18.128.204.59180 > 172.18.22.200.22: Flags [.], cksum 0x89d7 (correct), seq 3833060046, ack 3808611483, win 4092, options [nop,nop,TS val 950233961 ecr 87616963], length 0
    IP (tos 0x10, ttl 61, id 0, offset 0, flags [DF], proto TCP (6), length 52)
        172.18.128.204.59180 > 172.18.22.200.22: Flags [.], cksum 0x88b1 (correct), seq 0, ack 293, win 4086, options [nop,nop,TS val 950233965 ecr 87616967], length 0
    

    抓取经过 interface ens160,DST_MAC 或 SRC_MAC 地址是 00:50:56:bf:c2:c5 的 ICMP 数据包。

    [root@localhost ~]# tcpdump -i ens160 '((icmp) and ((ether host 00:50:56:bf:c2:c5)))'
    ...
    15:19:50.522900 IP localhost.localdomain > 172.18.22.41: ICMP redirect 172.18.41.24 to host localhost.localdomain, length 68
    

    抓取经过 interface ens160,目标网络是 172.18 但目标主机又不是 172.18.22.204 的 TCP 且非 22 号端口的数据包。

    [root@localhost ~]# tcpdump -i ens160 -c 10 -nnt '((tcp) and (not port 22) and ((dst net 172.18) and (not dst host 172.18.22.204)))'
    ...
    IP 172.18.22.74.47580 > 172.18.22.237.8080: Flags [S], seq 2124823039, win 29200, options [mss 1460,sackOK,TS val 274062379 ecr 0,nop,wscale 7], length 0
    IP 172.18.22.237.8080 > 172.18.22.74.47580: Flags [R.], seq 0, ack 2124823040, win 0, length 0
    

    抓取流入 interface ens160,host 为 172.18.22.208 且协议为 ICMP 的数据包。
    172.18.128.204 > 172.18.22.200(curr) > 172.18.22.208

    [root@localhost ~]# tcpdump -i ens160 -nnt -P in host 172.18.22.208 and icmp
    ...
    IP 172.18.128.204 > 172.18.22.208: ICMP echo request, id 42579, seq 2314, length 64
    

    抓取流出 interface ens160,host 为 172.18.22.208 且协议为 ICMP 的数据包。
    172.18.22.208 > 172.18.128.200(curr) > 172.18.128.204

    [root@localhost ~]# tcpdump -i ens160 -nnt -P out host 172.18.22.208 and icmp
    ...
    IP 172.18.22.208 > 172.18.128.204: ICMP echo reply, id 42579, seq 2436, length 64
    

    参考资料

    https://www.cnblogs.com/chenpingzhao/p/9108570.html
    https://www.cnblogs.com/f-ck-need-u/p/7064286.html
    https://blog.csdn.net/minxihou/article/details/80243484

  • 相关阅读:
    【Java高级工程师蜕变之路】008 Spring核心思想
    【Java高级工程师蜕变之路】003 MyBatis高级进阶
    【Java高级工程师蜕变之路】007 Spring基础回顾
    【Java高级工程师蜕变之路】006 ErrorContext的机制分析
    【Java高级工程师蜕变之路】002 自定义持久层框架
    【Java高级工程师蜕变之路】001 JDBC的问题分析
    如何配置mac环境下的JAVA_HOME
    【Java高级工程师蜕变之路】005 MyBatis插件及其应用
    【Java高级工程师蜕变之路】004 MyBatis源码剖析
    ConcurrentHashMap中的2的n次方幂上舍入方法
  • 原文地址:https://www.cnblogs.com/jmilkfan-fanguiju/p/10589731.html
Copyright © 2020-2023  润新知