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为例来安装。
# 执行下边的命令安装tcpdump
yum 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抓包实战的主要内容,如果未能解决你的问题,请参考以下文章