Linux tcpdump 命令详解

tcpdump [-aAdDefhIJKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ] [ -y datalinktype ] [ -z command ]
[ -Z user ] [ expression ]

参数详解:

-a:    尝试将网络和广播地址转换成名称
-d:    把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出
-dd:   把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出
-ddd:  把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出
-e:    在每列倾倒资料上显示连接层级的文件头
-f:    用数字显示网际网络地址
-F<表达文件> 指定内含表达方式的文件
-n:    不把主机的网络地址转换成名字
-N:    不列出域名
-O:    不将数据包编码最佳化
-p:    不让网络界面进入混杂模式
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型
-i:    网卡设备
-w:    写入管道,将抓包数据输出到文件中而不是标准输出,
- dst: 抓取
port:  端口号
-l:    将标准输出转换为缓冲行形式
-s:    snaplen表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话 tcpdump 只显示部分数据包,默认68字节
-x:    把协议头和包内容都原原本本的显示出来,会以16进制和ASCII两种方式同时输出
-nn:   指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
-r:   从给定的数据包文件中读取数据。使用"-"表示从标准输入中读取
-t:    在每行输出中不打印时间戳
-tt:   不对每行输出的时间进行格式处理(nt: 这种格式一眼可能看不出其含义, 如时间戳打印成1261798315)
-ttt:  tcpdump 输出时, 每两行打印之间会延迟一个段时间(以毫秒为单位)
-tttt: 在每行打印的时间戳之前添加日期的打印,使时间戳格式更加可读
-c:    在收到指定的包的数目后,tcpdump就会停止
-q:   快速打印输出
-Z:    user
-v:    打印详细的输出
-vv:   比-v更详细的输出
-vvv:  比-vv更详细的输出

抓取MySQL:

tcpdump -i bond0 -s 0 -l -w - dst port 3306 | strings

tcpdump -s 65535 -x -nn -q -tttt -i any -c 5000 port 3306 >  mysql.tcp.txt

pt-query-digest --type tcpdump mysql.tcp.txt

抓取redis:

nohup tcpdump -i bond0 port 6381 and host not 10.0.10.125 and host not 10.0.10.126 -Z root -s0 -G 900 -w %Y_%m%d_%H%M_%S.pcap

nohup tcpdump -i bond0 port 6382  -Z root -s0 -G 900 -w %Y_%m%d_%H%M_%S.pcap &

0 */6 * * * /bin/find  /u02/redis_tcpdump/ -name "*.pcap" -mtime +0 -print | xargs rm -rf

 

posted @ 2020-01-03 17:04  __Yoon  阅读(418)  评论(0编辑  收藏  举报