tcpdump常用抓包命令
发布时间:2022-03-29 22:17:02

tcpdump常用抓包命令

NAME
       tcpdump - dump traffic on a network

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

常用的参数:

-D:列出可用于抓包的接口;

-l :使标准输出变为缓冲行形式;

-n:不把网络地址转换成名字;

-c:在收到指定的包的数目后,tcpdump就会停止;

-i:指定监听的网络接口;(如果没有指定可能在默认网卡上监听,需要指定绑定了特定IP的网卡);

-s:指定记录package的大小,常见 -s 0 ,代表最大值65535,一般linux传输最小单元MTU为1500;

-w:直接将包写入文件中,配合 -G time 选项可以按照固定的时间间隔切割输出的文件;

-X:直接输出package data数据,默认不设置,只能通过-w指定文件进行输出;

Unix、Mac下tcpdump命令的参数有所不同,在具体使用过程中要查阅文档进行相应的调整。如Mac下的命令格式:NAME tcpdump - dump traffic on a networkSYNOPSIS tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -G rotate_seconds ] [ -F file ] [ -i interface ] [ -j tstamp_type ] [ -k (metadata_arg) ] [ -m module ] [ -M secret ] [ --number ] [ -Q in|out|inout ] [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -E spi@ipaddr algo:secret,... ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ -Q packet-metadata-filter ] [ -Q in|out|inout ] [ --time-stamp-precision=tstamp_precision ] [ --immediate-mode ] [ --version ] [ expression ]

过滤端口:

# tcpdump -i eth0  port 80
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:32:25.014599 IP iZ2zeb7o9hu1q8bvuj8olgZ.41196 > 100.100.30.26.http: Flags [.], seq 2657951256:2657954104, ack 2775895637, win 675, length 2848: HTTP
11:32:25.014644 IP iZ2zeb7o9hu1q8bvuj8olgZ.41196 > 100.100.30.26.http: Flags [P.], seq 2848:3086, ack 1, win 675, length 238: HTTP
11:32:25.047036 IP 100.100.30.26.http > iZ2zeb7o9hu1q8bvuj8olgZ.41196: Flags [.], ack 1424, win 1424, length 0
11:32:25.047074 IP 100.100.30.26.http > iZ2zeb7o9hu1q8bvuj8olgZ.41196: Flags [.], ack 2848, win 1413, length 0
11:32:25.047080 IP 100.100.30.26.http > iZ2zeb7o9hu1q8bvuj8olgZ.41196: Flags [.], ack 3086, win 1412, length 0

过滤主机/IP:

tcpdump -i eth1 host 172.16.7.206
抓取所有经过网卡1,目的IP为172.16.7.206的网络数据

过滤特定协议:

tcpdump -i eth1 udp
抓取所有经过网卡1,协议类型为UDP的网络数据

抓取本地环路数据包:

tcpdump -i lo udp 			// 抓取UDP数据
tcpdump -i lo udp port 1234 // 抓取端口1234的UDP数据
tcpdump -i lo port 1234 	

特定协议特定端口:

tcpdump udp port 1234
抓取所有经过1234端口的UDP网络数据

抓取特定类型的数据包:

#tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'
抓取所有经过网卡1的SYN类型数据包
#tcpdump -i eth1 udp dst port 53
抓取经过网卡1的所有DNS数据包(默认端口)

逻辑语句过滤:

#tcpdump -i eth1 '((tcp) and ((dst net 172.16) and (not dst host 192.168.1.200)))'
抓取所有经过网卡1,目的网络是172.16,但目的主机不是192.168.1.200的TCP数据

抓包存储:

tcpdump -i eth1 host 172.16.7.206 and port 80 **-w** /tmp/xxx.cap
抓取所有经过网卡1,目的主机为172.16.7.206的端口80的网络数据并存储

可以用Wireshark来分析收集到的文件


tcpdump -vnn port 80 -w tcp80.cap