LinuxLinux 下tcpdump抓包实战

Posted 必力网络科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinuxLinux 下tcpdump抓包实战相关的知识,希望对你有一定的参考价值。



















tcpdump是在命令行下运行的常用数据包分析器。它允许用户显示通过计算机所连接的网络传输或接收的TCP/IP和其他数据包。根据BSD许可分发,tcpdump是免费软件。

tcpdump适用于大多数类Unix 操作系统:Linux,Solaris,BSD,macOS,HP-UX,android和AIX等。在这些系统中,tcpdump使用libpcap库来捕获数据包。Windows的tcpdump 的端口称为WinDump; 它使用WinPcap,libpcap的Windows端口。

                                                                               —— 维基百科













  

tcpdump安装


这里在centos7上进行的操作,所以就以centos为例来安装。

# 执行下边的命令安装tcpdumpyum install tcpdump

下边看一下tcpdump的命令参数:

tcpdump -h
NAME tcpdump - dump traffic on a network
SYNOPSIS tcpdump [ -AdDefIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -G rotate_seconds ] [ -F file ] [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ] [ -Q|-P in|out|inout ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -E spi@ipaddr algo:secret,... ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ expression ]

具体的参数描述如下:


-A       以ASCII格式打印每个数据包(不包含其链接级别标题);方便捕捉网页;

-B       将操作系统捕获缓冲区大小设置为buffer_size。

-d    将匹配信息包的代码以人们能够理解的汇编格式给出;

-dd    将匹配信息包的代码以c语言程序段的格式给出;

-ddd   将匹配信息包的代码以十进制的形式给出;

-e    在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议;

-F       使用文件作为过滤器表达式的输入.在命令行上给出的附加表达式将被忽略;

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

-nn      指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示

-t    在输出的每一行不打印时间戳;

-tt      在每个转储线上打印未格式化的时间戳;

-ttt     在每个转储线上打印当前行和前一行之间的增量(微秒分辨率);

-tttt    在每个转储线上按日期打印默认格式的时间戳;

-ttttt   在每个转储线上打印当前和第一行之间的增量(微秒分辨率);

-v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;

-vv    输出详细的报文信息;

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

-F    从指定的文件中读取表达式,忽略其它的表达式;

-i    指定监听的网络接口;

-p       将网卡设置为非混杂模式,不能与host或broadcast一起使用;

-r    从指定的文件中读取包(这些包一般通过-w选项产生);

-w    直接将包写入文件中,并不分析和打印出来;

-s       snaplen    snaplen表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话tcpdump只显示部分数据包,默认68字节;

-T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc和snmp

-X      告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器;

-y      设置捕获数据链路类型时使用的数据链路类型;
































  

常用示例


  • 监听eth0网卡HTTP 80端口的request和response

tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'


  • 监听eth0网卡HTTP 80端口的request和response,指定来源域名”example.com”,也可以指定具体IP

tcpdump -i eth0 -A -s 0 'src example.com and tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
  • 监听本机发送至本机的HTTP 80端口的request和response

tcpdump -i lo -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'


  • HTTP GET request信息

tcpdump -A -s 0 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'


  • HTTP POST request信息

tcpdump -A -s 0 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'






















  ◆  

Fiddler图形化查看数据


将数据包保存为.cap文件,最后导入fiddler查看。

tcpdump -i eth0 -A -s 0 'tcp port 28080 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -vv -w /opt/pack.cap

下载到本地,导入fiddler,File->import sessions->Packet Capture 即可查看。









以上是关于LinuxLinux 下tcpdump抓包实战的主要内容,如果未能解决你的问题,请参考以下文章

linux12企业实战 -- 05Tcpdump 详解(抓包)

tcpdump抓包工具的基本使用

TCPDUMP 抓包 怎么查看 抓的包的内容

TCPdump抓包命令详解

应用抓包之tcpdump命令抓包

tcpdump抓包分析详解