抓包分析工具—tcpdump

tcpdump(dump the traffic on a network)是一款在Unix下一款比较实用的一款用于分析数据包的工具,它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句、布尔表达式对报文的报头匹配,在linux系统下如果未安装可以通过yum来安装,不过要注意的是在使用需要相应的权限:

对于SunOS 的nit或bpf界面: 要运行tcpdump , 必须有/dev/nit或/dev/bpf* 的读访问权限;
对于Solaris的dlpi: 必须有网络仿真设备 (network pseudo device), 如 /dev/le的读访问权限;
对于HP-UX的dlpi、IRIX的snoop、Linux: 必须是root, 或者把它安装成 root 的设置uid 程序;
对于 Ultrix和Digital UNIX: 一旦超级用户使用promiscuous 操作模式 (promiscuous-mode), 任何用户 都可以 运行 tcpdump;
对于BSD: 必须有/dev/bpf*的读访问权限。

而tcpdump的常用选项参数如下:

       -A     数据包内容以ASCII显示,通常用来抓取网页的数据包数据.
       -a     试着 把 网络和广播地址转换成名称.
       -c     监听数据包数,如果没有带这个参数tcpdump会不断的监听,当收到count报文后退出.
       -d     把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出.
       -dd    把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出.
       -ddd   把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出.
       -e     显示数据链路层的数据包.
       -f     用数字显示网际网络地址.
       -F     指定内含表达方式的文件.
       -i     监听的网络接口.
       -l     使用标准输出列的缓冲区.
       -n     不把主机的网络地址转换成ip
       -N     不列出域名.
       -O     不将数据包编码最佳化,这个选项只有当你怀疑优化器有bug时才有用.
       -p     不让网络界面进入混杂模式.
       -q     快速输出,仅列出少数的传输协议信息.
       -r     从指定的文件读取数据包数据.
       -s     设置每个数据包的大小.
       -T     强制将表达方式所指定的数据包转译成设置的数据包类型.目前已知的类型有: rpc (远程过程调用 Remote Procedure Call), rtp
              (实时应用协议 Real-Time Applications protocol), rtcp (实时应用控制协议 Real-Time Applications control  protocol),  vat  (可视音频工具
              Visual Audio Tool), 和 wb (分布式白板 distributed White Board).
       -S     用绝对而非相对数值列出TCP关联数.
       -t     禁止显示时戳标志.
       -tt    显示未格式化的时戳标志.
       -v     详细显示指令执行过程. 例如, 显示IP数据报中的生存周期和服务类型.
       -vv    更详细显示指令执行过程. 例如,显示NFS应答报文的附加域.
       -w     把数据包数据写入指定的文件.
       -x     以 16进制数形式显示每一个报文(去掉链路层报头后).可以显示较小的完整报文,否则只显示snaplen个字节.
       expression表达式:
              用来选择要转储的数据报.如果没有指定expression , 就转储网络的全部报文.否则, 只转储相对expression为逻辑为真的数据包报文.
 
              expression 由一个或多个原语(primitive)组成.原语通常由一个标识(id,名称或数字),和标识前面的一个或多个修饰子(qualifier)组成.修饰子有三种不同的类型:
 
              type   类型修饰子指出标识名称或标识数字代表什么类型的东西.可以使用的类型有host,net和port.例如,`host foo', `net128.3', `port 20'.如果不指定类型修饰子, 就使用缺省的host . 
              dir    方向修饰子 指出 相对于 标识 的 传输方向 (数据是 传入还是传出 标识).  可以使用的 方向 有 src, dst, src or dst 和 src  and  dst.
                     例如, `src foo', `dst net 128.3', `src or dst port ftp-data'.  如果 不指定 方向修饰子, 就使用 缺省的 src or dst .  对于 `null'
                     链路层 (就是说 象 slip 之类的 点到点 协议), 用 inbound 和 outbound 修饰子 指定 所需的 传输方向. 
              proto  协议修饰子 要求 匹配 指定的协议. 可以使用的 协议 有: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp  和  udp.
                     例如, `ether src foo', `arp net 128.3', `tcp port 21'.  如果 不指定 协议修饰子, 就使用 所有 符合 类型 的 协议. 例如, `src foo'
                     指 `(ip 或 arp 或 rarp) src foo' (注意后者不符合语法), `net bar' 指 `(ip 或 arp 或 rarp) net bar',  `port 53' 指 `(tcp 或 udp)
                     port 53'. 
              更复杂的过滤器表达式可以通过 and, or 和 not 连接原语来组建. 例如, `host  foo  and  not  port  ftp  and  not  port  ftp-data'.
              允许的 原语 有:
              dst host host
                     如果报文中IP的目的地址域是host, 则逻辑为真.host既可以是地址,也可以是主机名.
 
              src host host
                     如果报文中IP的源地址域是host,则逻辑为真.
 
              host host
                     如果报文中IP的源地址域或者目的地址域是host,则逻辑为真.上面所有的host表达式都可以加上ip,arp,或rarp关键字做前缀,就象:ip host host
                     它等价于:
                          ether proto \ip and host host
                     如果host是拥有多个IP地址的主机名,它的每个地址都会被查验.
 
              ether dst ehost
                     如果报文的以太目的地址是ehost,则逻辑为真. Ehost既可以是名字 (/etc/ethers 里有), 也可以是数字
 
              ether src ehost
                     如果报文的以太源地址是ehost,则逻辑为真.
 
              ether host ehost
                     如果报文的以太源地址或以太目的地址是ehost,则逻辑为真.
 
              gateway host
                     如果报文把host当做网关, 则逻辑为真.
                     
              dst net net
                     如果报文的IP目的地址属于网络号net,则逻辑为真. 
 
              src net net
                     如果报文的IP源地址属于网络号net,则逻辑为真.
 
              net net
                     如果报文的IP源地址或目的地址属于网络号net, 则逻辑为真.
 
              net net mask mask
                     如果IP地址匹配指定网络掩码(netmask)的net,则逻辑为真.本原语可以用src或dst修饰.
 
              net net/len
                     如果IP地址匹配指定网络掩码的net, 则逻辑为真.
 
              dst port port
                     如果报文是ip/tcp或ip/udp, 并且目的端口是port, 则逻辑为真.
 
              src port port
                     如果报文的源端口号是port,则逻辑为真.
 
              port port
                     如果报文的源端口或目的端口是port,则逻辑为真.
 
              less length
                     如果报文的长度小于等于length,则逻辑为真. 它等同于:len <= length.
 
              greater length
                     如果报文的长度大于等于length,则逻辑为真. 它等同于:len >= length.
 
              ip proto protocol
                     如果报文是IP数据报, 其内容的协议类型是protocol,则逻辑为真.
 
              ether broadcast
                     如果报文是以太广播报文,则逻辑为真.关键字ether是可选的.
 
              ip broadcast
                     如果报文是IP广播报文,则逻辑为真.Tcpdump检查全0和全1广播约定,并且检查本地的子网掩码.
 
              ether multicast
                     如果报文是以太多目传送报文(multicast),则逻辑为真. 关键字ether是可选的.
 
              ip multicast
                     如果报文是IP多目传送报文,则逻辑为真.

总之tcpdump的使用还是可以满足日常的数据包分析使用的,如下以下一些例子:

监听来自eth0网卡且通信协议为ssh(缺省22端口)来源于192.168.2.100的数据包数据

[[email protected] ~]# tcpdump -i eth0 -nn 'port 22 and src host 192.168.2.100'

截获主机192.168.1.100和主机192.168.2.100或192.168.0.100的通信

[[email protected] ~]# tcpdump host 192.168.1.100 and \(192.168.1.100 or 192.168.0.100\)

截取本机的udp协议的ntp(缺省123端口)

[[email protected] ~]# tcpdump udp port 123

总之,在日常可以使用tcpdump来对各种数据包进行分析,在这里就不做过多的说明,需要更多tcpdump的使用可以看相关的man帮助手册,当然是用tcpdump对七层上数据没有做比较彻底的解码,所以平时也可把抓取的数据包写入文件后使用wireshark来进行进一步的分析

原文地址:http://blog.51cto.com/jim123/2056489

时间: 2024-08-26 05:54:34

抓包分析工具—tcpdump的相关文章

linux抓包分析(tcpdump)

默认启动 tcpdump 普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包. 监视指定网络接口的数据包 tcpdump -i eth1 如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口. 查看本机网络接口 ifconfig 找到自己ip的那个网络接口 监视指定网络接口和端口的数据包 tcpdump -i eth0 tcp port 8809 linux抓包分析(tcpdump)

用Web抓包分析工具Livepool 实现本地替换开发

这是官方的介绍: LivePool 是一个基于 NodeJS,类似 Fiddler 支持抓包和本地替换的 Web 开发调试工具,是 Tencent AlloyTeam 在开发实践过程总结出的一套的便捷的 WorkFlow 以及调试方案. 功能特性还挺多: 基于 NodeJS, 跨平台 支持 http 抓包和本地替换调试,Https/WebSockets 直接代理转发(暂不支持本地替换) 便捷的 UI 管理界面,跟 Fiddler 类似,降低学习成本 可以脱离 UI 后台运行,适应于某些不需要抓包

Charles - 接口抓包分析工具

Charles是一个HTTP代理服务器,反转代理服务器,HTTP监视器.它允许一个开发者查看所有连接互联网的HTTP通信,包括request. response现HTTP headers (包含cookies与caching信息). 下载:  http://www.charlesproxy.com/ 本教程适合,有局域网WIFI情况下,无需使用百度WIFI工具. 使用方法: 1.选择系统对应软件包,进行安装; 2.启动应用,进行代理ip绑定设置,Proxy ->  Proxy Settings

qxdm,qpst,qcat抓包分析VoLTE SIP协商包

QXDM,QPST和QCAT是Qualcomm高通公司针对高通芯片的抓包分析工具. QXDM抓包分析,QPST与手机com口连接,QCAT用来分析抓包产生的isf文件(log). 使用版本: QXDM-3.14.594 QPST-2.7.411 QCAT.06.30.30.00 首先,手机连接电脑usb以后,查看设备管理器,com口需要安装高通驱动. 打开QXDM,Options->communications,添加端口: 查看QPST,可以看到端口状态是enable,QXDM上显示端口连接.

Wireshark抓包分析TCP 3次握手、4次挥手过程

Wireshark简介 更多有关Wireshark的教程.软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍. 1Wireshark 是什么? Wireshark 是最著名的网络通讯抓包分析工具.功能十分强大,可以截取各种网络封包,显示网络封包的详细信息. 你可以把网络包分析工具当成是一种用来测量有什么东西从网线上进出的测量工具,就好像使电工用来测量进入电信的电量的电度表一样(当然比那个更高级).过去的此类工具要么是过于昂贵,要么是

[转]Linux操作系统tcpdump抓包分析详解

PS:tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具. tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具.tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息.因此系统中存在网络分析工具主要不是对本

安卓模拟器BlueStacks+TCPdump对APP抓包分析

最近要搞安卓APP抓包分析,在网上找了一些方法,综合一自身条件下还是安卓模拟器+tcpdump最方便. 需准备工具: 1.Microsoft .NET Framework 2.0 SP22.Bluestack 0.7.5.27003.Bluestack 0.7.5.2700 Root镜像4.调试用的adb程序5.Wireshark之类的分析工具6.待抓包的APP 首先模拟器选用了BlueStacks,要想使用tcpdump必须要Root,所以还要找一个BlueStacks Root镜像来覆盖掉原

Wireshark和TcpDump抓包分析对比

常见的抓包分析工具有:微软的Network Monitor和Message Analyzer.Sniff.WSExplorer.SpyNet.iptools.WinNetCap.WinSock Expert.Wireshark和linux的tcpdump等工具 今天,做了实验测试就对比分析其中的两款,其他的大家可以百度谷歌测试一哈^_^ 1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用

转:tcpdump抓包分析(强烈推荐)

评:示例详细,还有很不错的图解 转自:https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac718685382c0aa1cb5dbca45&scene=5&srcid=0527iHXDsFlkjBlkxHbM2S3E#rd 转自:http://www.jianshu.com/p/8d9accf1d2f1 1 起因 前段时间,一直在调线上的一个问题:线上应用