TCPDUMP中文手册最详细的手册
Tcpdump抓包培训-20160901
GET代表去服务器请求一个网页 -X用于分析数据包的内容时使用,但是对加密的数据包是不能看到里面的 内容的。
2.2、tcpdump常用参数(续)
-s 截取指定大小的数据包
截取数据包缺省大小为96bytes,有时为了分析数据包内容,比如关键字 段或者URL地址等,默认大小显示不出来关键字段,这个时候可以通过s参数改变截取数据包大小,s0为完整数据包。
如上图所示,在wan1口截取5个数据包
2.2、tcpdump常用参数(续)
-n 不把网络地址转换成电脑名称
2.2、tcpdump常用参数(续)
-nn 不进行端口和网络名称转换
2.2、tcpdump常用参数(续)
-x 将截取的数据包内容以十六进制打印出来
以十六进制显示数据包内容
2.2、tcpdump常用参数(续)
Tcp连接终止
终止一个tcp连接需要四次握手,因tcp连接是全双 工的,需要在每个方向单独关闭。
3.2、tcpdump分析ftp工作模式(port & pasv)
3.2.1、主动 ftp 3.2.2、被动 ftp
3.2.1、主动 ftp
客户端首先和FTP Server的TCP 21端口建立 命令连接,通过这个通道发送交互命令(PORT命 令)。 随后ftp server会以自己的tcp 20端口主动 和客户端建立连接,传送数据。整个过程,有两 次建立tcp连接的过程。
3.2.1、主动 ftp(续)
第二次tcp连接建立时,使用的端口是在建立命令通 道的时候协商出来的。
主动ftp的标志是建立两次tcp的连接,并且有标志: Command.su志:PASV
3.2.2、被动 ftp
tcpdump-man 手册页的详细中文翻译
原文地址=========以下是本文档完整版本地址:/posts/14645.html(nt: 出现这一提示是为了避免一些网络蜘蛛把文章分成几个页面给查看带来不悦)中文版本=========TCPDUMP(8)TCPDUMP(8)名字tcpdump - 显示网络负载用法概览tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ][ -C file_size ] [ -F file ][ -i interface ] [ -m module ] [ -M secret ][ -r file ] [ -s snaplen ] [ -T type ] [ -w file ][ -W filecount ][ -E spi@ipaddr algo:secret,... ][ -y datalinktype ] [ -Z user ][ expression ]描述Tcpdump 将显示相应网络接口上,满足特定条件数据包的相关信息, 特定条件可通过布尔条件表达式来表达. 可以在启动tcpdump 时加入-w 选项, 这会使她把收到的包数据存入文件中, 以备后续分析(nt: 文件名字由此选项中的file 参数指定). 而-r 选项将会使tcpdump 直接从之前保存的包数据文件(nt: 通过-w 选项产生的文件)中读入数据包, 而不是从相应网络接口上获取数据包. 不管通过哪种方式读入数据包, tcpdump只会处理那些布尔条件表达式得到满足的数据包.如果启动时不带-c 选项, tcpdump会不停抓取数据包, 不过此过程中可被以下两个信号打断: SIGINT信号(例如, 当我们敲入中断控制符(nt: 按下ctrl键, 同时按下c键可产生此字符)), SIGTERM信号(一般可通过kill 命令产生(nt: kill(1) 表示可通过在终端中敲入man 1 kill 命令来查询到kill 的用法));如果启动时带上-c选项, tcpdump只会抓取指定数目的数据包, 并且此过程也可被以上两个信号中断.当tcpdump 完成了数据包的抓取, 她会报告如下几种数据包的数目:''captured''类型的数据包("被抓取的数据包", 其数目表示tcpdump已经收到并进行了处理的数据包个数);''received by filter''类型数据包("匹配过滤条件的数据包", 其数目的含义随操作系统不同, 以及操作系统配置方式的不同而不同:比如, 如果在tcpdump启动命令行中指定一个过滤条件, 我们将会得到''received by filter''类型的包数目(nt | rt: 如果不指定过滤条件, 其含义未知, 需补充).在一些操作系统中, 此数目既包括与过滤条件匹配的数据包,也包括不匹配的, 并且与tcpdump是否对此包进行过读取和处理无关;在另一些操作系统中, 此数目仍然与是否对此包进行过读取和处理无关, 但只包含与过滤条件匹配的数据包;除此以外, 在其他一些操作系统中, 此数目却只包含匹配过滤条件并且被tcpdump处理过的数据包).''dropped by kernel''类型数据包("被内核丢弃的数据包", 其数目含义如下: 如果操作系统不反馈此信息, 此数目将是0;如果操作系统反馈此信息, 此数目表示tcpdump 所在的操作系统对包的丢弃的数目, 而这些包或许是因为无缓冲空间, 或许是因为包的抓取机制而被丢弃了).对于支持SIGINFO 信号的系统, 比如BSD系列的操作系统(包括Mac OS X 和Digital/Tru64 UNIX(nt: 一个64位,采用改进型卡内基-梅龙大学的Mach V2.5内核, 并装配了BSD 4.3,4.4的常用应用程序的操作系统),tcpdump 会在收到SIGINFO 信号时候, 显示出此'capture'类数据包的数目,并继续抓取数据包(通常, 可以通过键盘输入ctrl键盘加大写T键产生一个终端的'status'的字符, 从而发送此信号. 不过, 在一些系统上, 如Mac OS X, 此字符默认不能被ctrl加T来触发, 不过可通过stty命令来打开此功能).从网络接口上读取数据包也许需要特定的权限:在支持NIT 或者BPF 的SunOS 3.x 或者4.x操作系统中:(nt: NIT, Network Interface Tap, 网络接口分接头. BPF, BSD Packet Filter, BSD 分组过滤器.可理解为, 此二者分别提供了一种给应用输送指定数据包的机制, 不过BPF 可过滤网络接口上进入和发出的数据包,而NIT只能过滤进入的数据包)tcpdump需要对/dev/nit 和/dev/bpf* 文件有读的权限在支持DLPI 的Solaris 操作系统上: (nt: DLPI, Data Link Provider Interface, 可理解为, 对数据链路层向上层所提供功能的一个统一的描述. Solaris 为Sun Microsystems公司组装的一种UNIX 操作系统) 此时, tcpdump 必须具有虚拟网络接口(nt: pseudo device, 虚拟网络接口, 可以理解成linux 系统下的any 网络接口, 即通过此接口可抓到系统中所有接口上的数据包), 比如, /dev/le. 不过在有的Solaris 版本中, 拥有读写这个虚拟接口的权限还不足以使tcpdump 工作在混杂模式(nt: promiscuous mode),从而也就不能真正使用上这个虚拟网络接口(nt: 可理解为, tcpdump能工作在混杂模式是能从虚拟网络接口接收数据包的另一个必要条件,而单拥有对此接口的读写权限还不够).在支持DLPI 的HP-UX 操作系统上: (nt: HP-UX, Hewlett Packard UniX, 惠普公司开发的一种UNIX 操作系统, 源于UNIX System V 操作系统, 而后者又源自于BSD UNIX 系统. DLPI, 上文已有其说明)tcpdump 必须以root 身份来运行, 或者tcpdump 可执行程序文件被设置了setuid标志.(nt: 一个程序文件如果被设置了setuid标志, 运行时该程序会拥有root权限)在支持网络侦听的IRIX 操作系统上: (nt: IRIX, Silicon Graphics公司(美国硅图公司)开发的一种UNIX 操作系统, 源于UNIX System V 操作系统.) tcpdump 必须以root 身份来运行, 或者tcpdump 可执行程序文件被设置了setuid标志.在LINUX 操作系统上: tcpdump 必须以root 身份来运行, 或者tcpdump 可执行程序文件被设置了setuid标志(不过, 在以下情况下可不要求root 权限:所使用的发布版本中的内核支持CAP_NET_RAW(nt: 网络包直接抓取) 功能,并且执行该功能的权限已被赋予当前的用户, 此外, 在用户登录时, 必须在其初始化进程中(initial process,中打开此功能(nt: 具体初始化进程, 需补充). 在这种情况下, 用户所拥有的CAP_NET_RAW 权限可用于网络抓包, 而如果想要列举出系统中的网络接口则需要拥有CAP_NET_ADMIN 权限, 比如此时使用tcpdump 的-D选项就需要此权限)在ULTRIX 和Digital UNIX/Tru64 UNIX系统上:(nt: ULTRIX, Digital Equipment Corporation's (DEC)公司开发的UNIX操作系统. UNIX/Tru64, 上文已描述) 任何用户都可以使用tcpdump进行网络抓包. 不过, 如果没有通过pfconfig 命令打开网络接口的混杂接收模式, 任何用户(包括超级用户)都不能在接口上进行混杂模式抓包. 同样如果没有通过pfconfig 命令打开网络接口的全复制模式(nt: copy-all-mode, 可理解为, 此模式下可接收广播和单播数据包), 任何用户(包括超级用户)都不能在接口上接收或发送单播数据包. 从而, 要在系统上对关键数据包的抓取必须把网络接口的混杂模式和全复制模式打开.在BSD(包括Mac OS X) 操作系统上:如果系统中没有备份BPF 设备(nt: cloning, 再生, 可理解为备份), 则tcpdump 需要有对/dev/bpf* 的读取权限,如果系统中有这样一个备份BPF 设备, 则需要对/dev/bpf 有读取权限.在带devfs 文件系统的BSD 系列操作系统中(包括Mac OS X), 则拥有对BPF 设备的读取权限只是进行网络抓包的一个前提, 还有其他条件必须被满足, 即在系统启动时配置devfs 中相应文件或文件夹的所有者和权限. 系统可能不会提供直接的配置方法, 这时我们必须另找方法来完成此配置.不过, 从数据包文件(nt:通过选项-w 产生的文件)中读取数据包不需要这些特殊权限.选项-A 以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据(nt: 即Handy for capturing web pages).-c counttcpdump将在接受到count个数据包后退出.-C file-size (nt: 此选项用于配合-w file 选项使用)该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 *1024 =1,048,576)-d 以容易阅读的形式,在标准输出上打印出编排过的包匹配码, 随后tcpdump停止.(nt | rt: human readable, 容易阅读的,通常是指以ascii码来打印一些信息. compiled, 编排过的. packet-matching code, 包匹配码,含义未知, 需补充)-dd 以C语言的形式打印出包匹配码.-ddd 以十进制数的形式打印出包匹配码(会在包匹配码之前有一个附加的'count'前缀).-D 打印系统中所有tcpdump可以在其上进行抓包的网络接口. 每一个接口会打印出数字编号, 相应的接口名字, 以及可能的一个网络接口描述. 其中网络接口名字和数字编号可以用在tcpdump 的-i flag 选项(nt: 把名字或数字代替flag), 来指定要在其上抓包的网络接口.此选项在不支持接口列表命令的系统上很有用(nt: 比如, Windows 系统, 或缺乏ifconfig -a 的UNIX系统); 接口的数字编号在windows 2000 或其后的系统中很有用, 因为这些系统上的接口名字比较复杂, 而不易使用.如果tcpdump编译时所依赖的libpcap库太老,-D 选项不会被支持, 因为其中缺乏pcap_findalldevs()函数.-e 每行的打印输出中将包括数据包的数据链路层头部信息-E spi@ipaddr algo:secret,...可通过spi@ipaddr algo:secret 来解密IPsec ESP包(nt | rt:IPsec Encapsulating Security Payload, IPsec 封装安全负载, IPsec可理解为, 一整套对ip数据包的加密协议, ESP 为整个IP 数据包或其中上层协议部分被加密后的数据,前者的工作模式称为隧道模式; 后者的工作模式称为传输模式. 工作原理, 另需补充).需要注意的是, 在终端启动tcpdump 时, 可以为IPv4 ESP packets 设置密钥(secret). 可用于加密的算法包括des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, 或者没有(none).默认的是des-cbc(nt: des, Data Encryption Standard, 数据加密标准, 加密算法未知, 另需补充). secret 为用于ESP 的密钥, 使用ASCII 字符串方式表达. 如果以0x 开头, 该密钥将以16进制方式读入.该选项中ESP 的定义遵循RFC2406, 而不是RFC1827. 并且, 此选项只是用来调试的, 不推荐以真实密钥(secret)来使用该选项, 因为这样不安全: 在命令行中输入的secret 可以被其他人通过ps 等命令查看到. 除了以上的语法格式(nt: 指spi@ipaddr algo:secret), 还可以在后面添加一个语法输入文件名字供tcpdump 使用(nt:即把spi@ipaddr algo:secret,... 中...换成一个语法文件名). 此文件在接受到第一个ESP包时会打开此文件, 所以最好此时把赋予tcpdump 的一些特权取消(nt: 可理解为, 这样防范之后, 当该文件为恶意编写时,不至于造成过大损害).-f 显示外部的IPv4 地址时(nt: foreign IPv4 addresses, 可理解为, 非本机ip地址), 采用数字方式而不是名字. (此选项是用来对付Sun公司的NIS服务器的缺陷(nt: NIS, 网络信息服务, tcpdump 显示外部地址的名字时会用到她提供的名称服务): 此NIS服务器在查询非本地地址名字时,常常会陷入无尽的查询循环).由于对外部(foreign)IPv4地址的测试需要用到本地网络接口(nt: tcpdump 抓包时用到的接口)及其IPv4 地址和网络掩码. 如果此地址或网络掩码不可用, 或者此接口根本就没有设置相应网络地址和网络掩码(nt: linux 下的'any' 网络接口就不需要设置地址和掩码, 不过此'any'接口可以收到系统中所有接口的数据包), 该选项不能正常工作.-F file使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略.-i interface指定tcpdump 需要监听的接口. 如果没有指定, tcpdump 会从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback 接口).一但找到第一个符合条件的接口, 搜寻马上结束.在采用2.2版本或之后版本内核的Linux 操作系统上, 'any' 这个虚拟网络接口可被用来接收所有网络接口上的数据包(nt: 这会包括目的是该网络接口的, 也包括目的不是该网络接口的). 需要注意的是如果真实网络接口不能工作在'混杂'模式(promiscuous)下, 则无法在'any'这个虚拟的网络接口上抓取其数据包.如果-D 标志被指定, tcpdump会打印系统中的接口编号,而该编号就可用于此处的interface 参数.-l 对标准输出进行行缓冲(nt: 使标准输出设备遇到一个换行符就马上把这行的内容打印出来).在需要同时观察抓包打印以及保存抓包记录的时候很有用. 比如, 可通过以下命令组合来达到此目的: ``tcpdump -l | tee dat'' 或者``tcpdump -l > dat & tail -f dat''. (nt: 前者使用tee来把tcpdump 的输出同时放到文件dat和标准输出中, 而后者通过重定向操作'>', 把tcpdump的输出放到dat 文件中, 同时通过tail把dat文件中的内容放到标准输出中)-L 列出指定网络接口所支持的数据链路层的类型后退出.(nt: 指定接口通过-i 来指定)-m module通过module 指定的file 装载SMI MIB 模块(nt: SMI,Structure of Management Information, 管理信息结构MIB, Management Information Base, 管理信息库. 可理解为, 这两者用于SNMP(Simple Network Management Protoco) 协议数据包的抓取. 具体SNMP 的工作原理未知, 另需补充).此选项可多次使用, 从而为tcpdump 装载不同的MIB 模块.-M secret如果TCP 数据包(TCP segments)有TCP-MD5选项(在RFC 2385有相关描述), 则为其摘要的验证指定一个公共的密钥secret.-n 不对地址(比如, 主机地址, 端口号)进行数字表示到名字表示的转换.-N 不打印出host 的域名部分. 比如, 如果设置了此选现, tcpdump 将会打印'nic' 而不是''.-O 不启用进行包匹配时所用的优化代码. 当怀疑某些bug是由优化代码引起的, 此选项将很有用.-p 一般情况下, 把网络接口设置为非'混杂'模式. 但必须注意, 在特殊情况下此网络接口还是会以'混杂'模式来工作;从而, '-p' 的设与不设,不能当做以下选现的代名词: 'ether host {local-hw-add}' 或'ether broadcast'(nt: 前者表示只匹配以太网地址为host 的包, 后者表示匹配以太网地址为广播地址的数据包).-q 快速(也许用'安静'更好?)打印输出. 即打印很少的协议相关信息, 从而输出行都比较简短.-R 设定tcpdump 对ESP/AH 数据包的解析按照RFC1825而不是RFC1829(nt: AH, 认证头, ESP,安全负载封装,这两者会用在IP包的安全传输机制中). 如果此选项被设置, tcpdump 将不会打印出'禁止中继'域(nt: relay prevention field). 另外,由于ESP/AH规范中没有规定ESP/AH数据包必须拥有协议版本号域, 所以tcpdump不能从收到的ESP/AH数据包中推导出协议版本号.-r file从文件file 中读取包数据. 如果file 字段为'-' 符号, 则tcpdump 会从标准输入中读取包数据.-S 打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号.(nt: 相对顺序号可理解为, 相对第一个TCP 包顺序号的差距,比如, 接受方收到第一个数据包的绝对顺序号为232323, 对于后来接收到的第2个,第3个数据包, tcpdump会打印其序列号为1, 2分别表示与第一个数据包的差距为1 和2. 而如果此时-S 选项被设置, 对于后来接收到的第2个, 第3个数据包会打印出其绝对顺序号: 232324, 232325).-s snaplen设置tcpdump的数据包抓取长度为snaplen, 如果不设置默认将会是68字节(而支持网络接口分接头(nt: NIT, 上文已有描述,可搜索'网络接口分接头'关键字找到那里)的SunOS系列操作系统中默认的也是最小值是96). 68字节对于IP, ICMP(nt: Internet Control Message Protocol,因特网控制报文协议), TCP 以及UDP 协议的报文已足够, 但对于名称服务(nt: 可理解为dns, nis等服务), NFS服务相关的数据包会产生包截短. 如果产生包截短这种情况, tcpdump的相应打印输出行中会出现''[|proto]''的标志(proto 实际会显示为被截短的数据包的相关协议层次). 需要注意的是, 采用长的抓取长度(nt: snaplen比较大), 会增加包的处理时间, 并且会减少tcpdump 可缓存的数据包的数量,从而会导致数据包的丢失. 所以, 在能抓取我们想要的包的前提下, 抓取长度越小越好. 把snaplen 设置为0 意味着让tcpdump自动选择合适的长度来抓取数据包.-T type强制tcpdump按type指定的协议所描述的包结构来分析收到的数据包. 目前已知的type 可取的协议为:aodv (Ad-hoc On-demand Distance Vector protocol, 按需距离向量路由协议, 在Ad hoc(点对点模式)网络中使用),cnfp (Cisco NetFlow protocol), rpc(Remote Procedure Call), rtp (Real-Time Applications protocol),rtcp (Real-Time Applications con-trol protocol), snmp (Simple Network Management Protocol),tftp (Trivial File Transfer Protocol, 碎文件协议), vat (Visual Audio Tool, 可用于在internet 上进行电视电话会议的应用层协议), 以及wb (distributed White Board, 可用于网络会议的应用层协议).-t 在每行输出中不打印时间戳-tt 不对每行输出的时间进行格式处理(nt: 这种格式一眼可能看不出其含义, 如时间戳打印成1261798315)-ttt tcpdump 输出时, 每两行打印之间会延迟一个段时间(以毫秒为单位)-tttt 在每行打印的时间戳之前添加日期的打印-u 打印出未加密的NFS 句柄(nt: handle可理解为NFS 中使用的文件句柄, 这将包括文件夹和文件夹中的文件)-U 使得当tcpdump在使用-w 选项时, 其文件写入与包的保存同步.(nt: 即, 当每个数据包被保存时, 它将及时被写入文件中,而不是等文件的输出缓冲已满时才真正写入此文件)-U 标志在老版本的libcap库(nt: tcpdump 所依赖的报文捕获库)上不起作用, 因为其中缺乏pcap_cump_flush()函数.-v 当分析和打印的时候, 产生详细的输出. 比如, 包的生存时间, 标识, 总长度以及IP包的一些选项. 这也会打开一些附加的包完整性检测, 比如对IP或ICMP包头部的校验和.-vv 产生比-v更详细的输出. 比如, NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码.-vvv 产生比-vv更详细的输出. 比如, telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面, 其相应的图形选项将会以16进制的方式打印出来(nt: telnet 的SB,SE选项含义未知, 另需补充).-w 把包数据直接写入文件而不进行分析和打印输出. 这些包数据可在随后通过-r 选项来重新读入并进行分析和打印.-W filecount此选项与-C 选项配合使用, 这将限制可打开的文件数目, 并且当文件数据超过这里设置的限制时, 依次循环替代之前的文件, 这相当于一个拥有filecount 个文件的文件缓冲池. 同时, 该选项会使得每个文件名的开头会出现足够多并用来占位的0, 这可以方便这些文件被正确的排序.-x 当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据(但不包括连接层的头部).总共打印的数据大小不会超过整个数据包的大小与snaplen 中的最小值. 必须要注意的是, 如果高层协议数据没有snaplen 这么长,并且数据链路层(比如, Ethernet层)有填充数据, 则这些填充数据也会被打印.(nt: so for link layers that pad, 未能衔接理解和翻译, 需补充)-xx tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据, 其中包括数据链路层的头部.-X 当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据(但不包括连接层的头部).这对于分析一些新协议的数据包很方便.-XX 当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据, 其中包括数据链路层的头部.这对于分析一些新协议的数据包很方便.-y datalinktype设置tcpdump 只捕获数据链路层协议类型是datalinktype的数据包-Z user使tcpdump 放弃自己的超级权限(如果以root用户启动tcpdump, tcpdump将会有超级用户权限), 并把当前tcpdump的用户ID设置为user, 组ID设置为user首要所属组的ID(nt: tcpdump 此处可理解为tcpdump 运行之后对应的进程) 此选项也可在编译的时候被设置为默认打开.(nt: 此时user 的取值未知, 需补充)条件表达式该表达式用于决定哪些数据包将被打印. 如果不给定条件表达式, 网络上所有被捕获的包都会被打印,否则, 只有满足条件表达式的数据包被打印.(nt: all packets, 可理解为, 所有被指定接口捕获的数据包).表达式由一个或多个'表达元'组成(nt: primitive, 表达元, 可理解为组成表达式的基本元素). 一个表达元通常由一个或多个修饰符(qualifiers)后跟一个名字或数字表示的id组成(nt: 即, 'qualifiers id').有三种不同类型的修饰符:type, dir以及proto.type 修饰符指定id 所代表的对象类型, id可以是名字也可以是数字. 可选的对象类型有: host, net, port 以及portrange(nt: host 表明id表示主机, net 表明id是网络, port 表明id是端口, 而portrange 表明id 是一个端口范围). 如, 'host foo', 'net 128.3', 'port 20', 'portrange 6000-6008'(nt: 分别表示主机foo, 网络128.3, 端口20, 端口范围6000-6008). 如果不指定type 修饰符, id默认的修饰符为host.dir 修饰符描述id 所对应的传输方向, 即发往id 还是从id 接收(nt: 而id 到底指什么需要看其前面的type 修饰符).可取的方向为: src, dst, src 或dst, src并且dst.(nt:分别表示, id是传输源, id是传输目的, id是传输源或者传输目的, id是传输源并且是传输目的). 例如, 'src foo', 'dst net 128.3', 'src or dst port ftp-data'.(nt: 分别表示符合条件的数据包中, 源主机是foo, 目的网络是128.3, 源或目的端口为ftp-data).如果不指定dir修饰符, id 默认的修饰符为src 或dst.对于链路层的协议,比如SLIP(nt: Serial Line InternetProtocol, 串联线路网际网络协议), 以及linux下指定'any' 设备, 并指定'cooked'(nt | rt: cooked 含义未知, 需补充) 抓取类型, 或其他设备类型,可以用'inbound' 和'outbount' 修饰符来指定想要的传输方向.proto 修饰符描述id 所属的协议. 可选的协议有: ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp以及upd. (nt | rt: ether, fddi, tr, 具体含义未知, 需补充. 可理解为物理以太网传输协议, 光纤分布数据网传输协议, 以及用于路由跟踪的协议. wlan, 无线局域网协议; ip,ip6 即通常的TCP/IP协议栈中所使用的ipv4以及ipv6网络层协议; arp, rarp 即地址解析协议, 反向地址解析协议; decnet, Digital Equipment Corporation开发的, 最早用于PDP-11 机器互联的网络协议; tcp and udp, 即通常TCP/IP协议栈中的两个传输层协议).例如, `ether src foo', `arp net 128.3', `tcp port 21', `udp portrange 7000-7009'分别表示'从以太网地址foo 来的数据包','发往或来自128.3网络的arp协议数据包', '发送或接收端口为21的tcp协议数据包', '发送或接收端口范围为7000-7009的udp协议数据包'.如果不指定proto 修饰符, 则默认为与相应type匹配的修饰符. 例如, 'src foo' 含义是'(ip or arp orrarp) src foo' (nt: 即, 来自主机foo的ip/arp/rarp协议数据包, 默认type为host),`net bar' 含义是`(ip or arp or rarp) net bar'(nt: 即, 来自或发往bar网络的ip/arp/rarp协议数据包), `port 53' 含义是`(tcp or udp) port 53'(nt: 即, 发送或接收端口为53的tcp/udp协议数据包). (nt: 由于tcpdump 直接通过数据链路层的BSD 数据包过滤器或DLPI(datalink provider interface, 数据链层提供者接口) 来直接获得网络数据包,其可抓取的数据包可涵盖上层的各种协议, 包括arp, rarp, icmp(因特网控制报文协议),p, ip6, tcp, udp, sctp(流控制传输协议).对于修饰符后跟id 的格式,可理解为, type id 是对包最基本的过滤条件: 即对包相关的主机, 网络, 端口的限制;dir 表示对包的传送方向的限制; proto表示对包相关的协议限制)'fddi'(nt: Fiber Distributed Data Interface) 实际上与'ether' 含义一样: tcpdump 会把他们当作一种''指定网络接口上的数据链路层协议''. 如同ehter网(以太网), FDDI 的头部通常也会有源, 目的, 以及包类型,从而可以像ether网数据包一样对这些域进行过滤. 此外, FDDI 头部还有其他的域, 但不能被放到表达式中用来过滤同样, 'tr' 和'wlan' 也和'ether' 含义一致, 上一段对fddi 的描述同样适用于tr(Token Ring) 和wlan(802.11 wireless LAN)的头部. 对于802.11 协议数据包的头部, 目的域称为DA, 源域称为SA;而其中的BSSID, RA, TA 域(nt | rt: 具体含义需补充)不会被检测(nt: 不能被用于包过虑表达式中).除以上所描述的表达元('primitive'),还有其他形式的表达元, 并且与上述表达元格式不同. 比如: gateway, broadcast, less, greater 以及算术表达式(nt: 其中每一个都算一种新的表达元). 下面将会对这些表达元进行说明.表达元之间还可以通过关键字and, or 以及not 进行连接, 从而可组成比较复杂的条件表达式. 比如,`host foo and not port ftp and not port ftp-data'(nt: 其过滤条件可理解为, 数据包的主机为foo,并且端口不是ftp(端口21) 和ftp-data(端口20, 常用端口和名字的对应可在linux 系统中的/etc/service 文件中找到)).为了表示方便, 同样的修饰符可以被省略, 如'tcp dst port ftp or ftp-data or domain' 与以下的表达式含义相同'tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'.(nt: 其过滤条件可理解为,包的协议为tcp, 目的端口为ftp 或ftp-data 或domain(端口53) ).可用的表达元有: (nt: True 在以下的描述中含义为: 相应条件表达式中只含有以下所列的一个特定表达元, 此时表达式为真, 即条件得到满足)dst host host如果IPv4/v6 数据包的目的域是host, 则与此对应的条件表达式为真. host 可以是一个ip地址, 也可以是一个主机名.src host host如果IPv4/v6 数据包的源域是host, 则与此对应的条件表达式为真. host 可以是一个ip地址, 也可以是一个主机名.host host如果IPv4/v6数据包的源或目的地址是host, 则与此对应的条件表达式为真.以上的几个host 表达式之前可以添加以下关键字:ip, arp, rarp, 以及ip6.比如:ip host host也可以表达为: ether proto \ip and host host(nt: 这种表达方式在下面有说明, 其中ip之前需要有\来转义, 因为ip 对tcpdump 来说已经是一个关键字了.)如果host 是一个拥有多个IP 的主机, 那么任何一个地址都会用于包的匹配(nt: 即发向host 的数据包的目的地址可以是这几个IP中的任何一个, 从host 接收的数据包的源地址也可以是这几个IP中的任何一个).ether dst ehost如果数据包(nt: 指tcpdump 可抓取的数据包, 包括ip 数据包, tcp数据包)的以太网目标地址是ehost,则与此对应的条件表达式为真. Ehost 可以是/etc/ethers 文件中的名字或一个数字地址(nt: 可通过man ethers 看到对/etc/ethers 文件的描述, 样例中用的是数字地址)ether src ehost果数据包的以太网源地址是ehost, 则与此对应的条件表达式为真.ether host ehost如果数据包的以太网源地址或目标地址是ehost, 则与此对应的条件表达式为真.gateway host如果数据包的网关地址是host, 则与此对应的条件表达式为真. 需要注意的是, 这里的网关地址是指以太网地址, 而不是IP 地址(nt | rt: I.e., 例如, 可理解为'注意'. the Ethernet source or destination address, 以太网源和目标地址, 可理解为, 指代上句中的'网关地址' ). host 必须是名字而不是数字, 并且必须在机器的'主机名-ip地址'以及'主机名-以太地址'两大映射关系中有其条目(前一映射关系可通过/etc/hosts文件, DNS 或NIS得到, 而后一映射关系可通过/etc/ethers 文件得到. nt: /etc/ethers并不一定存在, 可通过man ethers 看到其数据格式, 如何创建该文件, 未知,需补充).也就是说host 的含义是ether host ehost 而不是host host, 并且ehost必须是名字而不是数字.目前, 该选项在支持IPv6地址格式的配置环境中不起作用(nt:。
tcpdump命令详解
tcpdump命令详解⼀、tcpdump简介tcpdump命令是基于unix系统的命令⾏的数据报嗅探⼯具,可以抓取流动在⽹卡上的数据包。
它的原理⼤概如下:linux抓包是通过注册⼀种虚拟的底层⽹络协议来完成对⽹络报⽂(准确的是⽹络设备)消息的处理权。
当⽹卡接收到⼀个⽹络报⽂之后,它会遍历系统中所有已经注册的⽹络协议,如以太⽹协议、x25协议处理模块来尝试进⾏报⽂的解析处理。
当抓包模块把⾃⼰伪装成⼀个⽹络协议的时候,系统在收到报⽂的时候就会给这个伪协议⼀次机会,让它对⽹卡收到的保温进⾏⼀次处理,此时该模块就会趁机对报⽂进⾏窥探,也就是啊这个报⽂完完整整的复制⼀份,假装是⾃⼰接收的报⽂,汇报给抓包模块。
⼆、语法1、查看本地⽹卡状态[root@cnetos daocoder]# netstat -iKernel Interface tableIface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flgdocker0 1500 40409 0 0 0 20376 0 0 0 BMUens5f0 1500 22999894941 0 0 0 25581016784 0 0 0 BMRUlo 65536 850291094 0 0 0 850291094 0 0 0 LRUIface:存在的⽹卡。
MTU:最⼤传输单元。
RX-OK RX-ERR RX-DRP RX-OVR:正确接收数据报的数量以及发⽣错误、流式、碰撞的总数。
TX-OK TX-ERR TX-DRP TX-OVR:正确发送数据报的数量以及发⽣错误、流式、碰撞的总数。
2、tcpdump帮助命令[root@centos daocoder]# tcpdump --helptcpdump version 4.9.0libpcap version 1.5.3OpenSSL 1.0.1e-fips 11 Feb 2013Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ][ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ][ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ][ -Q|-P in|out|inout ][ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ][ --immediate-mode ] [ -T type ] [ --version ] [ -V file ][ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ][ -Z user ] [ expression ](1)、类型的关键字host:指明⼀台主机。
tcpdump常用命令用法
tcpdump常用命令用法tcpdump是一个常用的网络抓包工具,可以用来分析网络流量,下面是一些常见的tcpdump命令用法:1. 抓取指定网卡的所有流量:```tcpdump -i eth0```这里的eth0是网卡的名称,可以根据实际情况替换。
2. 抓取指定源IP和目标IP的流量:```tcpdump src <source_ip> and dst <destination_ip>```source_ip和destination_ip分别是源IP和目标IP地址。
3. 抓取指定端口的流量:```tcpdump port <port_number>```port_number是要抓取的端口号。
4. 抓取指定协议的流量:```tcpdump -v icmp```这里的icmp是要抓取的协议,可以是icmp、tcp、udp等。
5. 抓取指定主机的流量:```tcpdump host <hostname>```hostname是要抓取的主机名。
6. 抓取指定长度的流量:```tcpdump less <length>```length是要抓取的数据包长度。
7. 将抓包结果保存到文件中:```tcpdump -w <output_file>```output_file是保存抓包结果的文件名。
8. 从文件中读取抓包结果进行分析:```tcpdump -r <input_file>```input_file是要读取的抓包结果文件名。
这些命令用法只是tcpdump的一部分功能,更详细的使用方法可以参考tcpdump的帮助文档。
网络抓包工具tcpdump使用指南
■ 北京 赵琳t c p d的常用参$ tcpdump - ieth0 -nn -s0-v p o r t80-i:选要捕获的接口,网卡或无线网卡,VLAN或其他特殊接口。
如果只有一个网络接口,指定。
-nn:单个域名,直接显示个n表示不解析域名和端口。
这样不仅方便查看和端口号,数据时非常高效,解析会降低抓取速度。
-s0:tcpdump截取前96截取所有的报文内容,使用-s要截取的报文字节数)是0的话,部内容。
过滤器个协议的proto,可省后面可以跟上协议号或协议名称,支持ICMP、PIM、AH、ESP、TCP。
协议名称所以在与proto 指令一起使用时,必须根据类型使用一个或两个义。
Linux需要使用两个反MacOS只需要一tcpdump -n或者$ tcpdump -n icmpICMP协议用来过滤通过某个端口关键字为port。
$ tcpdump port 38389端口的过滤的真正强大之处在于你可以随意组合它们,而连接它们的逻辑就是常用的/OR/||和非or or ||not or !理解 tcpdump 的输出截取数据只是第一步,二步就是理解这些数据。
下面就解释一下输出各部分的意义。
实例21:27:06.995846 IP (tos 0x0, ttloffset 0, flags [DF], proto TCP (6), length 64)192.168.1.106.56166 >124.1Flags [S],(correct),w i n65[m s s144,nop,nop,TSecr 0,sackOK,eol], length 021:27:07.030487 IP (tos 0x0, ttl0, flags(6), length 44)124.192.132.54.80 > 192.168.1.106.56166: Flags [S.],(correct),ack 992042667,capture-{1-24}.pcap,24小之前的文件就会被流量可以通过过滤器 ip6 来同时可以指-nn ip6从之前保存的文件中读数据报文:$ tcpdump -nr ipv6-test.pcap ip6 proto 17检测端口扫描子中,你会发现抓取到的报文的源和目且带有标志位它们与一系列看口进行匹之后,如果目标主机的端口没有打开,RESET。
tcpdump抓包指导
Step0:打开tftp工具,如图1,配置Current Directory目录为tftp工具的工作目录,Server interface为tftp工具所在电脑IP,注意电脑多网卡情况,请事先确保此IP与设备是连通的(通过互ping)图1Step1: 将tcpdump工具放入tftp工作目录( Current Directory),如图2图2Step2: 利用SecureCRT或其它telnet工具, 登录设备,用户名与密码分别为root 、focus,如图3图3Step3: 输入”cd /tmp”进入/tmp目录图4Step4输入”tftp –gr tcpdump IP” (IP为tftp工具打开电脑的IP) 将tcpdump工具导入设备/tmp目录下,如图5图5Step5: 输入”chmod +x tcpdump”,将tcpdump工具变为可执行属性,如图6图6Step6: 输入”./tcpdump –i eth0 host IP –w IP.cap -v”, 其中IP为摄像机的IP地址,启动抓包过程,抓包过程持续时间不要太久,设备内存有限,否则易导致设备重启,建议在1min内,具体视抓包过程数据量大小来控制时间。
结束抓包,按键盘CTRL+C图7Step7:启动抓包后,即可对设备进行操作,以便tcpdump记录此过程收发包的情况,完后按键盘CTRL+C结束。
图8Step8: 输入”tftp –pr CameraIP.cap ServerIP”, 将抓取到的包导出摄像机,其中CameraIP填写摄像机的IP,ServerIP填写tftp工具所在电脑的IP。
图9Step9:导出的数据包会在tftp工具的工作目录,如图10.82.16.39.cap为数据包。
附:tcpdump工具过滤方法,供参考,详细过滤方法,可上网查阅相关资料(1)过滤端口./tcpdump -i eth0 host 10.82.16.39 and port 23 -w 10.82.16.39.cap –v./tcpdump -i eth0 host 10.82.16.39 and src port 23 -w 10.82.16.39.cap –v./tcpdump -i eth0 host 10.82.16.39 and dst port 23 -w 10.82.16.39.cap –v(2)过滤IP./tcpdump -i eth0 host 10.82.16.39 and src 10.82.16.30 -w 10.82.16.39.cap –v./tcpdump -i eth0 host 10.82.16.39 and dst 10.82.16.30 -w 10.82.16.39.cap -v (3)过滤协议./tcpdump -i eth0 host 10.82.16.39 and udp -w 10.82.16.39.cap –v./tcpdump -i eth0 host 10.82.16.39 and tcp -w 10.82.16.39.cap -v./tcpdump -i eth0 host 10.82.16.39 and icmp -w 10.82.16.39.cap -v。
TCPDUMP中文手册最详细的手册
tcpdump的使用tcpdump采用命令行方式,它的命令格式为:tcpdump [ -a d e f l n N O p q S t v x][ -c 数量 ][ -F 文件名 ][ -i 网络接口 ][ -r 文件名][ -s snaplen ][ -T 类型 ][ -w 文件名 ][表达式 ]描述(DESCRIPTION)Tcpdump打印出在某个网络界面上,匹配布尔表达式expression的报头.对于SunOS的nit或bpf界面:要运行tcpdump,你必须有/dev/nit或/dev/bpf*的读访问权限.对于Solaris的dlpi:你必须有网络仿真设备(networkpseudodevice),如/dev/le的读访问权限.对于HP-UX的dlpi:你必须是root,或者把它安装成root的设置uid程序.对于IRIX的snoop:你必须是root,或者把它安装成root的设置uid程序.对于Linux:你必须是root,或者把它安装成root的设置uid程序.对于Ultrix和DigitalUNIX:一旦超级用户使用pfconfig(8)开放了promiscuous操作模式(promiscuous-mode),任何用户都可以运行tcpdump.对于BSD:你必须有/dev/bpf*的读访问权限.1. tcpdump的选项介绍2. tcpdump的表达式介绍表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。
如果没有给出任何条件,则网络上所有的信息包将会被截获。
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明202.0.0.0是一个网络地址,port 23 指明端口号是23。
tcpdump命令详解
名称(NAME)tcpdump-转储网络上的数据流总览(SYNOPSIS)tcpdump[-adeflnNOpqStvx][-ccount][-Ffile][-iinterface][-rfile][-ssnaplen][-Ttype][-wfile][expression]描述(DESCRIPTION)Tcpdump打印出在某个网络界面上,匹配布尔表达式expression的报头.对于SunOS的nit或bpf界面:要运行tcpdump,你必须有/dev/nit或/dev/bpf*的读访问权限.对于Solaris的dlpi:你必须有网络仿真设备(networkpseudodevice),如/dev/le的读访问权限.对于HP-UX的dlpi:你必须是root,或者把它安装成root的设置uid程序.对于IRIX的snoop:你必须是root,或者把它安装成root的设置uid程序.对于Linux:你必须是root,或者把它安装成root的设置uid程序.对于Ultrix和DigitalUNIX:一旦超级用户使用pfconfig(8)开放了promiscuous操作模式(promiscuous-mode),任何用户都可以运行tcpdump.对于BSD:你必须有/dev/bpf*的读访问权限.选项(OPTIONS)-a试着把网络和广播地址转换成名称.-c当收到count报文后退出.-d把编译好的报文匹配模板(packet-matchingcode)翻译成可读形式,传往标准输出,然后退出.-dd把报文匹配模板(packet-matchingcode)以C程序片断的形式输出.-ddd把报文匹配模板(packet-matchingcode)以十进制数形式输出(前面加上总数).-e每行都显示链路层报头.-f用数字形式显示'外部的'互联网地址,而不是字符形式(这个选项用来绕开脑壳坏光的SUN黄页服务器的问题---一般说来它翻译外部网络数字地址的时候会长期挂起).-F把file的内容用作过滤表达式.忽略命令行上的表达式.监听interface.如果不指定接口,tcpdump在系统的接口清单中,寻找号码最小,已经配置好的接口(loopback除外).选中的时候会中断连接.-l行缓冲标准输出.可用于捕捉数据的同时查看数据.例如,``tcpdump-l|teedat''or``tcpdump-l>dat&tail-fdat''.-n别把地址转换成名字(就是说,主机地址,端口号等)-N不显示主机名字中的域名部分.例如,如果使用这个选项,tcpdump只显示``nic'',而不是``''. -O禁止运行报文匹配模板的优化器.只有当你怀疑优化器有bug时才有用.-p禁止把接口置成promiscuous模式.注意,接口有可能因其他原因而处于promiscuous模式;因此,'-p'不能作为`etherhost{local-hw-addr}或etherbroadcast'的简写.-q快速输出.显示较少的协议信息,输出行会短一点点.-r从file中读入数据报(文件是用-w选项创建的).如果file是``-'',就读标准输入.-s从每个报文中截取snaplen字节的数据,而不是缺省的68(如果是SunOS的NIT,最小值是96).68个字节适用于IP,ICMP,TCP和UDP,但是有可能截掉名字服务器和NFS报文的协议信息(见下面).输出时如果指定``[|proto]'',tcpdump可以指出那些捕捉量过小的数据报,这里的proto是截断发生处的协议层名称.注意,采用更大的捕捉范围既增加了处理报文的时间,又相应的减少了报文的缓冲数量,可能导致报文的丢失.你应该把snaplen设的尽量小,只要能够容纳你需要的协议信息就可以了.-T把通过"expression"挑选出来的报文解释成指定的type.目前已知的类型有:rpc(远程过程调用RemoteProcedureCall),rtp(实时应用协议Real-TimeApplicationsprotocol),rtcp(实时应用控制协议Real-TimeApplicationscontrolprotocol),vat(可视音频工具VisualAudioTool),和wb(分布式白板distributedWhiteBoard).-S显示绝对的,而不是相对的TCP序列号.-t禁止显示时戳标志.-tt显示未格式化的时戳标志.-v(稍微多一点)繁琐的输出.例如,显示IP数据报中的生存周期和服务类型.-vv更繁琐的输出.例如,显示NFS应答报文的附加域.-w把原始报文存进file,而不是分析和显示.它们可以以后用-r选项显示.如果file是``-'',就写往标准输出.以16进制数形式显示每一个报文(去掉链路层报头后).可以显示较小的完整报文,否则只显示snaplen个字节.expression用来选择要转储的数据报.如果没有指定expression,就转储网络的全部报文.否则,只转储相对expression为`true'的数据报.expression一个或多个原语(primitive)组成.原语通常由一个标识(id,名称或数字),和标识前面的一个或多个修饰子(qualifier)组成.修饰子有三种不同的类型:type类型修饰子指出标识名称或标识数字代表什么类型的东西.可以使用的类型有host,net和port.例如,`hostfoo',`net128.3',`port20'.如果不指定类型修饰子,就使用缺省的host.dir方向修饰子指出相对于标识的传输方向(数据是传入还是传出标识).可以使用的方向有src,dst,srcordst和srcanddst.例如,`srcfoo',`dstnet128.3',`srcordstportftp-data'.如果不指定方向修饰子,就使用缺省的srcordst.对于`null'链路层(就是说象slip之类的点到点协议),用inbound和outbound 修饰子指定所需的传输方向.proto协议修饰子要求匹配指定的协议.可以使用的协议有:ether,fddi,ip,arp,rarp,decnet,lat,sca,moprc,mopdl,tcp和udp.例如,`ethersrcfoo',`arpnet128.3',`tcpport21'.如果不指定协议修饰子,就使用所有符合类型的协议.例如,`srcfoo'指`(ip或arp或rarp)srcfoo'(注意后者不符合语法),`netbar'指`(ip或arp或rarp)netbar',`port53'指`(tcp或udp)port53'.[`fddi'实际上是`ether'的别名;分析器把它们视为``用在指定网络接口上的数据链路层.''FDDI报头包含类似于以太协议的源目地址,而且通常包含类似于以太协议的报文类型,因此你可以过滤FDDI域,就象分析以太协议一样.FDDI报头也包含其他域,但是你不能在过滤器表达式里显式描述.]作为上述的补充,有一些特殊的`原语'关键字,它们不同于上面的模式:gateway,broadcast,less,greater 和数学表达式.这些在后面有叙述.更复杂的过滤器表达式可以通过and,or和not连接原语来组建.例如,`hostfooandnotportftpandnotportftp-data'.为了少敲点键,可以忽略相同的修饰子.例如,`tcpdstportftporftp-dataordomain'实际上就是`tcpdstportftportcpdstportftp-dataortcpdstportdomain'.允许的原语有:dsthosthost如果报文中IP的目的地址域是host,则逻辑为真.host既可以是地址,也可以是主机名. srchosthost如果报文中IP的源地址域是host,则逻辑为真.hosthost如果报文中IP的源地址域或者目的地址域是host,则逻辑为真.上面所有的host表达式都可以加上ip,arp,或rarp关键字做前缀,就象:iphosthost它等价于:etherproto\ipandhosthost如果host是拥有多个IP地址的主机名,它的每个地址都会被查验.etherdstehost如果报文的以太目的地址是ehost,则逻辑为真.Ehost既可以是名字(/etc/ethers里有),也可以是数字(有关数字格式另见ethers(3N)).ethersrcehost如果报文的以太源地址是ehost,则逻辑为真.etherhostehost如果报文的以太源地址或以太目的地址是ehost,则逻辑为真.gatewayhost如果报文把host当做网关,则逻辑为真.也就是说,报文的以太源或目的地址是host,但是IP的源目地址都不是host.host必须是个主机名,而且必须存在/etc/hosts和/etc/ethers中.(一个等价的表达式是etherhostehostandnothosthost对于host/ehost,它既可以是名字,也可以是数字.)dstnetnet如果报文的IP目的地址属于网络号net,则逻辑为真.net既可以是名字(存在/etc/networks中),也可以是网络号.(详见networks(4)).srcnetnet如果报文的IP源地址属于网络号net,则逻辑为真.netnet如果报文的IP源地址或目的地址属于网络号net,则逻辑为真.netnetmaskmask如果IP地址匹配指定网络掩码(netmask)的net,则逻辑为真.本原语可以用src或dst修饰.netnet/len如果IP地址匹配指定网络掩码的net,则逻辑为真,掩码的有效位宽为len.本原语可以用src或dst 修饰.dstportport如果报文是ip/tcp或ip/udp,并且目的端口是port,则逻辑为真.port是一个数字,也可以是/etc/services中说明过的名字(参看tcp(4P)和udp(4P)).如果使用名字,则检查端口号和协议.如果使用数字,或者有二义的名字,则只检查端口号(例如,dstport513将显示tcp/login的数据和udp/who的数据,而portdomain将显示tcp/domain和udp/domain的数据).srcportport如果报文的源端口号是port,则逻辑为真.portport如果报文的源端口或目的端口是port,则逻辑为真.上述的任意一个端口表达式都可以用关键字tcp或udp做前缀,就象:tcpsrcportport它只匹配源端口是port的TCP报文.lesslength如果报文的长度小于等于length,则逻辑为真.它等同于:len<=length.greaterlength如果报文的长度大于等于length,则逻辑为真.它等同于:len>=length.ipprotoprotocol如果报文是IP数据报(参见ip(4P)),其内容的协议类型是protocol,则逻辑为真.Protocol可以是数字,也可以是下列名称中的一个:icmp,igrp,udp,nd,或tcp.注意这些标识符tcp,udp,和icmp也同样是关键字,所以必须用反斜杠(\)转义,在C-shell中应该是\\.etherbroadcast如果报文是以太广播报文,则逻辑为真.关键字ether是可选的.ipbroadcast如果报文是IP广播报文,则逻辑为真.Tcpdump检查全0和全1广播约定,并且检查本地的子网掩码.ethermulticast如果报文是以太多目传送报文(multicast),则逻辑为真.关键字ether是可选的.这实际上是`ether[0]&1!=0'的简写.ipmulticast如果报文是IP多目传送报文,则逻辑为真.etherprotoprotocol如果报文协议属于以太类型的protocol,则逻辑为真.Protocol可以是数字,也可以是名字,如ip,arp,或rarp.注意这些标识符也是关键字,所以必须用反斜杠(\)转义.[如果是FDDI(例如,`fddiprotocolarp'),协议标识来自802.2逻辑链路控制(LLC)报头,它通常位于FDDI报头的顶层.当根据协议标识过滤报文时,Tcpdump假设所有的FDDI报文含有LLC报头,而且LLC报头用的是SNAP格式.]decnetsrchost如果DECNET的源地址是host,则逻辑为真,该主机地址的形式可能是``10.123'',或者是DECNET 主机名.[只有配置成运行DECNET的Ultrix系统支持DECNET主机名.]decnetdsthost如果DECNET的目的地址是host,则逻辑为真.decnethosthost如果DECNET的源地址或目的地址是host,则逻辑为真.ip,arp,rarp,decnet是:etherprotop的简写形式,其中p为上述协议的一种.lat,moprc,mopdl是:etherprotop的简写形式,其中p为上述协议的一种.注意tcpdump目前不知道如何分析这些协议.tcp,udp,icmp是:ipprotop的简写形式,其中p为上述协议的一种.exprrelopexpr如果这个关系成立,则逻辑为真,其中relop是>,<,>=,<=,=,!=之一,expr是数学表达式,由常整数(标准C语法形式),普通的二进制运算符[+,-,*,/,&,|],一个长度运算符,和指定的报文数据访问算符组成.要访问报文内的数据,使用下面的语法:proto[expr:size]Proto是ether,fddi,ip,arp,rarp,tcp,udp,oricmp之一,同时也指出了下标操作的协议层.expr给出字节单位的偏移量,该偏移量相对于指定的协议层.Size是可选项,指出感兴趣的字节数;它可以是1,2,4,缺省为1字节.由关键字len给出的长度运算符指明报文的长度.例如,`ether[0]&1!=0'捕捉所有的多目传送报文.表达式`ip[0]&0xf!=5'捕捉所有带可选域的IP报文.表达式`ip[6:2]&0x1fff=0'只捕捉未分片和片偏移为0的数据报.这种检查隐含在tcp和udp下标操作中.例如,tcp[0]一定是TCP报头的第一个字节,而不是其中某个IP片的第一个字节.原语可以用下述方法结合使用:园括弧括起来的原语和操作符(园括弧在Shell中有专用,所以必须转义).取反操作(`!'or`not').连结操作(`&&'or`and').或操作(`||'or`or').取反操作有最高优先级.或操作和连结操作有相同的优先级,运算时从左到右结合.注意连结操作需要显式的and算符,而不是并列放置.如果给出标识符,但没给关键字,那么暗指最近使用的关键字.例如,nothostvsandace作为nothostvsandhostace的简写形式,不应该和not(hostvsorace)混淆.表达式参数可以作为单个参数传给tcpdump,也可以作为复合参数,后者更方便一些.一般说来,如果表达式包含Shell元字符(metacharacter),传递单个括起来的参数要容易一些.复合参数在被解析前用空格联接一起.示例(EXAMPLES)显示所有进出sundown的报文:tcpdumphostsundown显示helios和主机hot,ace之间的报文传送:tcpdumphostheliosand\(hotorace\)显示ace和除了helios以外的所有主机的IP报文:tcpdumpiphostaceandnothelios显示本地的主机和Berkeley的主机之间的网络数据:tcpdumpnetucb-ether显示所有通过网关snup的ftp报文(注意这个表达式被单引号括起,防止shell解释园括弧): tcpdump'gatewaysnupand(portftporftp-data)'显示既不是来自本地主机,也不是传往本地主机的网络数据(如果你把网关通往某个其他网络,这个做法将不会把数据发往你的本地网络).tcpdumpipandnotnetlocalnet显示每个TCP会话的起始和结束报文(SYN和FIN报文),而且会话方中有一个远程主机. tcpdump'tcp[13]&3!=0andnotsrcanddstnetlocalnet'显示经过网关snup中大于576字节的IP数据报:tcpdump'gatewaysnupandip[2:2]>576'显示IP广播或多目传送的数据报,这些报文不是通过以太网的广播或多目传送形式传送的: tcpdump'ether[0]&1=0andip[16]>=224'显示所有不是回响请求/应答的ICMP报文(也就是说,不是ping报文):tcpdump'icmp[0]!=8andicmp[0]!=0"输出格式(OUTPUTFORMAT)tcpdump的输出格式取决于协议.下面的描述给出大多数格式的简要说明和范例.链路层报头(LinkLevelHeaders)如果给出'-e'选项就显示链路层报头.在以太网上,显示报文的源目地址,协议和报文长度.在FDDI网络上,'-e'选项导致tcpdump显示出`帧控制(framecontrol)'域,源目地址和报文长度.(`帧控制'域负责解释其余的报文.普通报文(比如说载有IP数据报)是`异步'报文,优先级介于0到7;例如,`async4'.这些被认为载有802.2逻辑链路控制(LLC)报文;如果它们不是ISO数据报或者所谓的SNAP报文,就显示出LLC报头.(注意:以下描述中假设你熟悉RFC-1144中说明的SLIP压缩算法.)在SLIP链路上,tcpdump显示出方向指示(``I''指inbound,``O''指outbound),报文类型和压缩信息.首先显示的是报文类型.有三种类型ip,utcp和ctcp.对于ip报文不再显示更多的链路信息.对于TCP 报文,在类型后面显示连接标识.如果报文是压缩过的,就显示出编码的报头.特殊情形以*S+n和*SA+n的形式显示,这里的n是顺序号(或顺序号及其确认)发生的改变总和.如果不是特殊情形,就显示0或多少个改变.改变由U(urgentpointer),W(window),A(ack),S(sequencenumber)和I(packetID)指明,后跟一个变化量(+nor-n),或另一个值(=n).最后显示报文中的数据总和,以及压缩报头的长度.例如,下面一行显示了一个传出的压缩的TCP报文,有一个隐含的连接标识;确认(ack)的变化量是6,顺序号是49,报文ID是6;有三个字节的数据和六个字节的压缩报头:Octcp*A+6S+49I+63(6)ARP/RARP报文Arp/rarp报文的输出显示请求类型及其参数.输出格式倾向于能够自我解释.这里是一个简单的例子,来自主机rtsg到主机csam的'rlogin'开始部分:arpwho-hascsamtellrtsgarpreplycsamis-atCSAM第一行说明rtsg发出一个arp报文询问internet主机csam的以太网地址.Csam用它的以太地址作应答(这个例子中,以太地址是大写的,internet地址为小写).如果用tcpdump-n看上去要清楚一些:arpwho-has128.3.254.6tell128.3.254.68arpreply128.3.254.6is-at02:07:01:00:01:c4如果用tcpdump-e,可以看到实际上第一个报文是广播,第二个报文是点到点的:R TSGBroadcast080664:arpwho-hascsamtellrtsgCSAMR TSG080664:arpreplycsamis-atCSAM这里第一个报文指出以太网源地址是R TSG,目的地址是以太网广播地址,类型域为16进制数0806(类型ETHER_ARP),报文全长64字节.TCP报文(注意:以下的描述中假设你熟悉RFC-793中说明的TCP协议,如果你不了解这个协议,无论是本文还是tcpdump都对你用处不大)一般说来tcp协议的输出格式是:src>dst:flagsdata-seqnoackwindowurgentoptionsSrc和dst是源目IP地址和端口.Flags是S(SYN),F(FIN),P(PUSH)或R(RST)或单独的`.'(无标志),或者是它们的组合.Data-seqno说明了本报文中的数据在流序号中的位置(见下例).Ack是在这条连接上信源机希望下一个接收的字节的流序号(sequencenumber).Window是在这条连接上信源机接收缓冲区的字节大小.Urg表明报文内是`紧急(urgent)'数据.Options是tcp可选报头,用尖括号括起(例如,).Src,dst和flags肯定存在.其他域依据报文的tcp报头内容,只输出有必要的部分.下面是从主机rtsgrlogin到主机csam的开始部分.rtsg.1023>csam.login:S768512:768512(0)win4096csam.login>rtsg.1023:S947648:947648(0)ack768513win4096rtsg.1023>csam.login:.ack1win4096rtsg.1023>csam.login:P1:2(1)ack1win4096csam.login>rtsg.1023:.ack2win4096rtsg.1023>csam.login:P2:21(19)ack1win4096csam.login>rtsg.1023:P1:2(1)ack21win4077csam.login>rtsg.1023:P2:3(1)ack21win4077urg1csam.login>rtsg.1023:P3:4(1)ack21win4077urg1第一行是说从rtsg的tcp端口1023向csam的login端口发送报文.S标志表明设置了SYN标志.报文的流序号是768512,没有数据.(这个写成`first:last(nbytes)',意思是`从流序号first到last,不包括last,有nbytes字节的用户数据'.)此时没有捎带确认(piggy-backedack),有效的接收窗口是4096字节,有一个最大段大小(max-segment-size)的选项,请求设置mss为1024字节.Csam用类似的形式应答,只是增加了一个对rtsgSYN的捎带确认.然后Rtsg确认csam的SYN.`.'意味着没有设置标志.这个报文不包含数据,因此也就没有数据的流序号.注意这个确认流序号是一个小整数(1).当tcpdump第一次发现一个tcp会话时,它显示报文携带的流序号.在随后收到的报文里,它显示当前报文和最初那个报文的流序号之差.这意味着从第一个报文开始,以后的流序号可以理解成数据流中的相对位移asrelativebytepositionsintheconversation'sdatastream(withthefirstdatabyteeachdirectionbeing`1').`-S'选项能够改变这个特性,直接显示原始的流序号.在第六行,rtsg传给csam19个字节的数据(字节2到20).报文中设置了PUSH标志.第七行csam表明它收到了rtsg的数据,字节序号是21,但不包括第21个字节.显然大多数数据在socket的缓冲区内,因为csam的接收窗口收到的数据小于19个字节.同时csam向rtsg发送了一个字节的数据.第八和第九行显示csam发送了两个字节的紧急数据到rtsg.如果捕捉区设置的过小,以至于tcpdump不能捕捉到完整的TCP报头,tcpdump会尽可能的翻译已捕获的部分,然后显示``[|tcp]'',表明无法翻译其余部分.如果报头包含一个伪造的选项(onewithalengththat's eithertoosmallorbeyondtheendoftheheader),tcpdump显示``[badopt]''并且不再翻译其他选项部分(因为它不可能判断出从哪儿开始).如果报头长度表明存在选项,但是IP数据报长度不够,不可能真的保存选项,tcpdump就显示``[badhdrlength]''.UDP报文UDP格式就象这个rwho报文显示的:actinide.who>broadcast.who:udp84就是说把一个udp数据报从主机actinide的who端口发送到broadcast,Internet广播地址的who端口.报文包含84字节的用户数据.某些UDP服务能够识别出来(从源目端口号上),因而显示出更高层的协议信息.特别是域名服务请求(RFC-1034/1035)和NFS的RPC调用(RFC-1050).UDP域名服务请求(NameServerRequests)(注意:以下的描述中假设你熟悉RFC-1035说明的域名服务协议.如果你不熟悉这个协议,下面的内容就象是天书.)域名服务请求的格式是src>dst:idop?flagsqtypeqclassname(len)h2opolo.1538>helios.domain:3+A?.(37)主机h2opolo访问helios上的域名服务,询问和.关联的地址记录(qtype=A).查询号是`3'.`+'表明设置了递归请求标志.查询长度是37字节,不包括UDP和IP头.查询操作是普通的Query操作,因此op域可以忽略.如果op设置成其他什么东西,它应该显示在`3'和`+'之间.类似的,qclass是普通的C_IN类型,也被忽略了.其他类型的qclass应该在`A'后面显示.Tcpdump会检查一些不规则情况,相应的结果作为补充域放在方括号内:如果某个查询包含回答,名字服务或管理机构部分,就把ancount,nscount,或arcount显示成`[na]',`[nn]'或`[nau]',这里的n代表相应的数量.如果在第二和第三字节中,任何一个回答位(AA,RA或rcode)或任何一个`必须为零'的位被置位,就显示`[b2&3=x]',这里的x是报头第二和第三字节的16进制数.UDP名字服务回答名字服务回答的格式是src>dst:idoprcodeflagsa/n/autypeclassdata(len)helios.domain>h2opolo.1538:33/3/7A128.32.137.3(273)helios.domain>h2opolo.1537:2NXDomain*0/1/0(97)第一个例子里,helios回答了h2opolo发出的标识为3的询问,一共是3个回答记录,3个名字服务记录和7个管理结构记录.第一个回答纪录的类型是A(地址),数据是internet地址128.32.137.3.回答的全长为273字节,不包括UDP和IP报头.作为A记录的class(C_IN)可以忽略op(询问)和rcode(NoError).在第二个例子里,helios对标识为2的询问作出域名不存在(NXDomain)的回答,没有回答记录,一个名字服务记录,而且没有管理结构.`*'表明设置了权威回答(authoritativeanswer).由于没有回答记录,这里就不显示type,class和data.其他标志字符可以显示为`-'(没有设置递归有效(RA))和`|'(设置消息截短(TC)).如果`问题'部分没有有效的内容,就显示`[nq]'.注意名字服务的询问和回答一般说来比较大,68字节的snaplen可能无法捕捉到足够的报文内容.如果你的确在研究名字服务的情况,可以使用-s选项增大捕捉缓冲区.`-s128'应该效果不错了.NFS请求和响应SunNFS(网络文件系统)的请求和响应显示格式是:src.xid>dst.nfs:lenopargssrc.nfs>dst.xid:replystatlenopresultssushi.6709>wrl.nfs:112readlinkfh21,24/10.73165wrl.nfs>sushi.6709:replyok40readlink"../var"sushi.201b>wrl.nfs:144lookupfh9,74/4096.6878"xcolors"wrl.nfs>sushi.201b:replyok128lookupfh9,74/4134.3150在第一行,主机sushi向wrl发送号码为6709的交易会话(注意源主机后面的数字是交易号,不是端口).这项请求长112字节,不包括UDP和IP报头.在文件句柄(fh)21,24/10.731657119上执行readlink(读取符号连接)操作.(如果运气不错,就象这种情况,文件句柄可以依次翻译成主次设备号,i节点号,和事件号(generationnumber).)Wrl回答`ok'和连接的内容.在第三行,sushi请求wrl在目录文件9,74/4096.6878中查找`xcolors'.注意数据的打印格式取决于操作类型.格式应该是可以自我说明的.给出-v(verbose)选项可以显示附加信息.例如:sushi.1372a>wrl.nfs:148readfh21,11/12.1958192bytes@24576wrl.nfs>sushi.1372a:replyok1472readREG100664ids417/0sz29388(-v同时使它显示IP报头的TTL,ID,和分片域,在这个例子里把它们省略了.)在第一行,sushi请求wrl从文件21,11/12.195的偏移位置24576开始,读取8192字节.Wrl回答`ok';第二行显示的报文是应答的第一个分片,因此只有1472字节(其余数据在后续的分片中传过来,但由于这些分片里没有NFS甚至UDP报头,因此根据所使用的过滤器表达式,有可能不显示).-v选项还会显示一些文件属性(它们作为文件数据的附带部分传回来):文件类型(普通文件``REG''),存取模式(八进制数),uid和gid,以及文件大小.如果再给一个-v选项(-vv),还能显示更多的细节.注意NFS请求的数据量非常大,除非增加snaplen,否则很多细节无法显示.试一试`-s192'选项.NFS应答报文没有明确标明RPC操作.因此tcpdump保留有``近来的''请求记录,根据交易号匹配应答报文.如果应答报文没有相应的请求报文,它就无法分析.KIPAppletalk(UDP上的DDP)AppletalkDDP报文封装在UDP数据报中,解包后按DDP报文转储(也就是说,忽略所有的UDP报头信息).文件/etc/s用来把appletalk网络和节点号翻译成名字.这个文件的行格式是numbername1.254ether16.1icsd-net1.254.110ace前两行给出了appletalk的网络名称.第三行给出某个主机的名字(主机和网络依据第三组数字区分-网络号一定是两组数字,主机号一定是三组数字.)号码和名字用空白符(空格或tab)隔开./etc/s文件可以包含空行或注释行(以`#'开始的行).Appletalk地址按这个格式显示net.host.port144.1.209.2>icsd-net.112.220office.2>icsd-net.112.220jssmag.149.235>icsd-net.2(如果不存在/etc/s,或者里面缺少有效项目,就以数字形式显示地址.)第一个例子里,网络144.1的209节点的NBP(DDP端口2)向网络icsd的112节点的220端口发送数据.第二行和上面一样,只是知道了源节点的全称(`office').第三行是从网络jssmag的149节点的235端口向icsd-net 的NBP端口广播(注意广播地址(255)隐含在无主机号的网络名字中-所以在/etc/s中区分节点名和网络名是个好主意).Tcpdump可以翻译NBP(名字联结协议)和ATP(Appletalk交互协议)的报文内容.其他协议只转储协议名称(或号码,如果还没给这个协议注册名称)和报文大小.NBP报文的输出格式就象下面的例子:icsd-net.112.220>jssmag.2:nbp-lkup190:"=:LaserWriter@*"jssmag.209.2>icsd-net.112.220:nbp-reply190:"RM1140:LaserWriter@*"250techpit.2>icsd-net.112.220:nbp-reply190:"techpit:LaserWriter@*"186第一行是网络icsd的112主机在网络jssmag上的广播,对名字laserwriter做名字查询请求.名字查询请求的nbp标识号是190.第二行显示的是对这个请求的回答(注意它们有同样的标识号),主机jssmag.209表示在它的250端口注册了一个laserwriter的资源,名字是"RM1140".第三行是这个请求的其他回答,主机techpit的186端口有laserwriter注册的"techpit".ATP报文格式如下例所示:jssmag.209.165>helios.132:atp-req12266<0-7>0xae030001helios.132>jssmag.209.165:atp-resp12266:0(512)0xae040000helios.132>jssmag.209.165:atp-resp12266:1(512)0xae040000helios.132>jssmag.209.165:atp-resp12266:2(512)0xae040000helios.132>jssmag.209.165:atp-resp12266:3(512)0xae040000helios.132>jssmag.209.165:atp-resp12266:4(512)0xae040000helios.132>jssmag.209.165:atp-resp12266:5(512)0xae040000helios.132>jssmag.209.165:atp-resp12266:6(512)0xae040000helios.132>jssmag.209.165:atp-resp*12266:7(512)0xae040000jssmag.209.165>helios.132:atp-req12266<3,5>0xae030001helios.132>jssmag.209.165:atp-resp12266:3(512)0xae040000helios.132>jssmag.209.165:atp-resp12266:5(512)0xae040000jssmag.209.165>helios.132:atp-rel12266<0-7>0xae030001jssmag.209.133>helios.132:atp-req*12267<0-7>0xae030002Jssmag.209向主机helios发起12266号交易,请求8个报文(`<0-7>').行尾的十六进制数是请求中`userdata'域的值Tcpdump命令的使用与示例——linux下的网络分析2005-04-08 阅读:网络数据采集分析工具TcpDump的简介顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。
tcpdump常用参数说明
tcpdump常⽤参数说明tcpdump常⽤参数说明(⼀)、学习tcpdump的5个参数初次使⽤tcpdump时,使⽤tcpdump -h命令可以看到它有数⼗个参数。
根据我们在运维⼯作中的经验,掌握tcpdump以下5个参数即可满⾜⼤部分的⼯作需要了。
❶-i参数。
使⽤-i参数指定需要抓包的⽹卡。
如果未指定的话,tcpdump会根据搜索到的系统中状态为UP的最⼩数字的⽹卡确定,⼀般情况下是eth0。
使⽤-i参数通过指定需要抓包的⽹卡,可以有效的减少抓取到的数据包的数量,增加抓包的针对性,便于后续的分析⼯作。
❷-nnn参数。
使⽤-nnn参数禁⽤tcpdump展⽰时把IP、端⼝等转换为域名、端⼝对应的知名服务名称。
这样看起来更加清晰。
❸-s参数。
使⽤-s参数,指定抓包的包⼤⼩。
使⽤-s 0指定数据包⼤⼩为262144字节,可以使得抓到的数据包不被截断,完整反映数据包的内容。
❹-c参数。
使⽤-c参数,指定抓包的数量。
❺-w参数。
使⽤-w参数指定抓包⽂件保存到⽂件,以便后续使⽤Wireshark等⼯具进⾏分析。
(⼆)、学习tcpdump的过滤器 tcpdump提供了丰富的过滤器,以⽀持抓包时的精细化控制,达到减少⽆效信息⼲扰的效果。
我们常⽤的过滤器规则有下⾯⼏个:❶host a.b.c.d:指定仅抓取本机和某主机a.b.c.d的数据通信。
❷tcp port x:指定仅抓取TCP协议⽬的端⼝或者源端⼝为x的数据通信。
❸icmp:指定仅抓取ICMP协议的数据通信。
❹!:反向匹配,例如port ! 22,抓取⾮22端⼝的数据通信。
以上⼏种过滤器规则,可以使⽤and或者or进⾏组合,例如: host a.b.c.d and tcp port x:则只抓取本机和某主机a.b.c.d之间基于TCP的⽬的端⼝或者源端⼝为x的数据通信。
tcp port x or icmp:则抓取TCP协议⽬的端⼝或者源端⼝为x的数据通信或者ICMP协议的数据通信。
最全的tcpdump使用详解
最全的tcpdump使⽤详解简介⽤简单的话来定义tcpdump,就是:dump the traffic on a network,根据使⽤者的定义对⽹络上的数据包进⾏截获的包分析⼯具。
tcpdump可以将⽹络中传送的数据包的“头”完全截获下来提供分析。
它⽀持针对⽹络层、协议、主机、⽹络或端⼝的过滤,并提供and、or、not等逻辑语句来帮助你去掉⽆⽤的信息。
实⽤命令实例默认启动tcpdump普通情况下,直接启动tcpdump将监视第⼀个⽹络接⼝上所有流过的数据包。
监视指定⽹络接⼝的数据包tcpdump -i eth1如果不指定⽹卡,默认tcpdump只会监视第⼀个⽹络接⼝,⼀般是eth0,下⾯的例⼦都没有指定⽹络接⼝。
监视指定主机的数据包打印所有进⼊或离开sundown的数据包.tcpdump host sundown也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包tcpdump host 210.27.48.1打印helios 与 hot 或者与 ace 之间通信的数据包tcpdump host helios and \( hot or ace \)截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.tcpdump ip host ace and not helios如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使⽤命令:tcpdump ip host 210.27.48.1 and ! 210.27.48.2截获主机hostname发送的所有数据tcpdump -i eth0 src host hostname监视所有送到主机hostname的数据包tcpdump -i eth0 dst host hostname监视指定主机和端⼝的数据包如果想要获取主机210.27.48.1接收或发出的telnet包,使⽤如下命令tcpdump tcp port 23 and host 210.27.48.1对本机的udp 123 端⼝进⾏监视 123 为ntp的服务端⼝tcpdump udp port 123监视指定⽹络的数据包打印本地主机与Berkeley⽹络上的主机之间的所有通信数据包(nt: ucb-ether, 此处可理解为'Berkeley⽹络'的⽹络地址,此表达式最原始的含义可表达为: 打印⽹络地址为ucb-ether的所有数据包)tcpdump net ucb-ether打印所有通过⽹关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防⽌shell对其中的括号进⾏错误解析)tcpdump 'gateway snup and (port ftp or ftp-data)'打印所有源地址或⽬标地址是本地主机的IP数据包(如果本地⽹络通过⽹关连到了另⼀⽹络, 则另⼀⽹络并不能算作本地⽹络.(nt: 此句翻译曲折,需补充).localnet 实际使⽤时要真正替换成本地⽹络的名字)tcpdump ip and not net localnet监视指定协议的数据包打印TCP会话中的的开始和结束数据包, 并且数据包的源或⽬的不是本地⽹络上的主机.(nt: localnet, 实际使⽤时要真正替换成本地⽹络的名字))tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'打印所有源或⽬的端⼝是80, ⽹络层协议为IPv4, 并且含有数据,⽽不是SYN,FIN以及ACK-only等不含数据的数据包.(ipv6的版本的表达式可做练习)tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'(nt: 可理解为, ip[2:2]表⽰整个ip数据包的长度, (ip[0]&0xf)<<2)表⽰ip数据包包头的长度(ip[0]&0xf代表包中的IHL域, ⽽此域的单位为32bit, 要换算成字节数需要乘以4, 即左移2. (tcp[12]&0xf0)>>4 表⽰tcp头的长度, 此域的单位也是32bit, 换算成⽐特数为 ((tcp[12]&0xf0) >> 4) << 2, 即 ((tcp[12]&0xf0)>>2). ((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0 表⽰: 整个ip数据包的长度减去ip头的长度,再减去tcp头的长度不为0, 这就意味着, ip数据包中确实是有数据.对于ipv6版本只需考虑ipv6头中的'Payload Length' 与 'tcp头的长度'的差值, 并且其中表达⽅式'ip[]'需换成'ip6[]'.)打印长度超过576字节, 并且⽹关地址是snup的IP数据包tcpdump 'gateway snup and ip[2:2] > 576'打印所有IP层⼴播或多播的数据包,但不是物理以太⽹层的⼴播或多播数据报tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'打印除'echo request'或者'echo reply'类型以外的ICMP数据包( ⽐如,需要打印所有⾮ping 程序产⽣的数据包时可⽤到此表达式 .(nt: 'echo reuqest' 与 'echo reply' 这两种类型的ICMP数据包通常由ping程序产⽣))tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'tcpdump 与wiresharkWireshark(以前是ethereal)是Windows下⾮常简单易⽤的抓包⼯具。
tcpdump命令使用
tcpdump 命令使⽤tcpdump 命令使⽤tcpdump命令参数解析1.option 可选参数:能够控制tcpdump 命令,⽐如是否解析域名,将结果输出到⽂件,或者从⽂件读包数据,以及打印格式等。
2.protocol 协议过滤:能够根据不同的协议进⾏过滤,常⽤的已经上⾯了。
3.direction ⽅向过滤:能够根据数据的流向来进⾏过滤,也就是src 和dst ,也可以是两者。
4. type 类型过滤:能够根据不同的类型进⾏过滤。
tcpdump 输出结构这是直接不使⽤参数得到的其中⼀条输出1. 第⼀列:代表时间,分别是时分秒毫秒 22:21:43.500014。
2. 第⼆列:代表⽹络协议 IP 。
3. 第三列:代表发送的⽅的地址(IP+port ),其中10.21.11.47是IP ,⽽http 是端⼝,在tcpdump 中http 就代表80端⼝,所以也就是10.21.11.47.80,后⾯可以使⽤-nn 参数来关闭转换。
4. 第四列:代表数据流向,可以看出是10.21.11.47.http 发送数据到11.0.85.18.51352。
5. 第五列:代表接收⽅的地址,格式同第三列,可以看出这次商品是51352。
6. 第六列:代表分隔,冒号。
7. 第七列:代表数据包的相关内容。
包括Flags 标识符,seq 号,ack 号,win 窗⼝⼤⼩,数据长度length ,通信协议HTTP 等。
Flag 标识符[S]:代表SYN ,同步标记,⼀般是在建⽴连接时使⽤,也就是TCP 三次握⼿时使⽤。
[.]:代表没有Flags ,但是除了SYN 包外所有的数据包都有ACK ,所以这个标记也可以代表ACK 。
[P]:代表PUSH ,推送数据,发送⽅通过使⽤PUSH 位来通知接收⽅将所有收到的数据⽴即提交给服务器进程,⽽不需要等待额外数据(将缓存填满)⽽让数据在缓存中停留!这⾥所说的数据包括与此PUSH 包⼀起传输的数据以及之前就为该进程传输过来的数据(滞留在缓存中的数据)。
tcpdump 使用方法
tcpdump 使用方法TCPDump是在Uni某和Linu某系统中用于抓取网络数据包的命令行工具。
它能够监听指定的网络接口,捕获网络流量并对数据包进行分析。
下面将详细介绍TCPDump的使用方法。
1.安装和权限:TCPDump是一款系统级工具,需要root权限才能运行。
因此,你需要以root用户身份安装和运行TCPDump。
在大多数Linu某发行版中,你可以使用以下命令安装:```sudo apt install tcpdump```如果你尚未获得root权限,可以使用sudo命令。
2.基本语法:TCPDump的基本语法如下:``````- options为可选参数,用于指定各种选项和过滤条件。
- e某pression为可选的过滤条件,用于指定捕获的数据包的特征。
3.监听网络接口:使用TCPDump抓取网络数据包前,你需要先选择要监听的网络接口。
通过以下命令可以列出所有可用的网络接口:``````然后,使用以下命令监听指定的网络接口:``````这里的<interface>为网络接口的名称,例如eth0或wlan0。
4.捕获网络流量:使用TCPDump抓取网络数据包非常简单。
只需运行以下命令即可将所有数据包输出到终端:``````这将捕获指定网络接口上的所有数据包,并以逐个数据包的形式输出到终端。
5.符合过滤条件的数据包:TCPDump支持多种过滤条件,以便只捕获符合特定条件的数据包。
例如,你可以使用以下命令仅捕获源或目标IP地址为192.168.1.100的数据包:```这将只输出符合过滤条件的数据包。
6.保存数据包到文件:TCPDump可以将捕获的数据包保存到文件中,以便以后分析。
使用以下命令可以将数据包保存到指定的文件中:``````这将将捕获的数据包写入指定文件中。
7.读取保存的数据包文件:可以使用TCPDump读取保存的数据包文件并分析其中的数据包。
使用以下命令从文件中读取数据包:``````这将逐个输出文件中的数据包。
tcpdump在windows系统上的使用方法
tcpdump在windows系统上的使用方法tcpdump是一个强大的网络数据包抓取工具,可以在各种操作系统上使用,包括Windows。
尽管Windows系统上没有直接的tcpdump可执行文件,但可以通过安装第三方工具或使用虚拟机的方式,使其在Windows上得以使用。
下面将详细介绍如何在Windows系统上使用tcpdump。
一、安装tcpdump的替代工具有一些第三方工具可以在Windows上提供类似tcpdump的功能,例如WinDump和TinyTcpDump等。
这些工具通常通过安装可执行文件的方式提供,并支持抓取网络数据包。
以下是使用WinDump在Windows上使用tcpdump的基本步骤:1. 下载WinDump并安装。
根据官方网站上的说明,下载并安装适合您的操作系统的版本。
2. 打开命令提示符或PowerShell。
输入"dump"命令,查看可用的dump命令选项。
3. 使用适当的dump命令选项,例如“-i”参数指定网络接口,开始抓取网络数据包。
例如,输入"dump -i Ethernet"开始抓取以太网接口上的数据包。
4. 可以使用tcpdump的一些常用选项,如“-s”参数设置抓取的数据包大小限制等。
5. 在抓取完成后,可以使用“quit”命令退出dump命令。
二、使用虚拟机在Windows上使用tcpdump另一种在Windows上使用tcpdump的方法是使用虚拟机。
您可以在虚拟机上安装Linux或其他支持tcpdump的操作系统,并在该系统上使用tcpdump。
以下是使用虚拟机在Windows上使用tcpdump的基本步骤:1. 下载并安装虚拟机软件,如VirtualBox或VMware。
2. 在虚拟机软件中创建一个新的虚拟机,并选择适合您的操作系统的镜像文件(如Ubuntu)。
3. 启动虚拟机并登录到操作系统。
在操作系统中安装tcpdump的依赖项和可执行文件。
tcpdump使用方法
第4部分附录目录目录附录A 常用维护信息..............................................................................................................A-1A.1 tcpdump命令消息跟踪方法...............................................................................................A-1A.2 Ethereal工具.....................................................................................................................A-5附录B 术语表........................................................................................................................B-1附录C 缩略语表.....................................................................................................................C-1附录A 常用维护信息本章主要介绍WISG系统维护操作过程中经常用到的一些信息。
A.1 tcpdump命令消息跟踪方法本节简单介绍在负载均衡器F5上用tcpdump命令进行消息跟踪的方法,希望能对调试F5负载均衡器有所帮助。
图A-1系统组网图Tcpdump命令是F5本身自带的命令,不需要额外安装其他软件包,通过Tcpdump命令可以对从client端到F5再到真实服务器的数据流进行跟踪。
tcpdump使用手册
tcpdump使用手册TCPDump是一款功能强大的网络抓包工具,它可以捕获网络数据包并展示其详细信息,帮助我们分析网络通信问题。
本篇文章将为您介绍TCPDump的基本使用方法和一些常用参数。
一、安装TCPDumpTCPDump在大多数操作系统中都有相应的安装包,您可以根据自己的操作系统选择相应的安装方法。
以下是一些常见操作系统的安装命令:- 在Debian/Ubuntu中,您可以使用apt-get命令进行安装:```sudo apt-get install tcpdump```- 在CentOS/RHEL中,您可以使用yum命令进行安装:```sudo yum install tcpdump```- 在MacOS中,您可以使用Homebrew进行安装:```brew install tcpdump```- 在Windows中,您可以从TCPDump的官方网站下载并安装相应的可执行文件。
二、语法格式TCPDump的基本语法如下:```tcpdump [options] [expression]```其中,options为可选参数,expression为过滤表达式,用于指定捕获的数据包类型或范围。
三、基本使用方法1. 捕获所有数据包要捕获网络接口上的所有数据包,只需在命令行输入```tcpdump```即可。
TCPDump将实时显示捕获到的数据包的详细信息,包括源IP地址、目标IP地址、传输协议、数据包大小等。
2. 指定网络接口如果您的系统有多个网络接口,可以使用```-i```选项来指定要捕获数据包的接口。
例如,要捕获eth0接口的数据包,可以使用```tcpdump -i eth0```命令。
3. 保存数据包到文件使用```-w```选项可以将捕获到的数据包保存到文件中,以便以后进行分析。
例如,要将捕获到的数据包保存到名为capture.pcap的文件中,可以使用```tcpdump -w capture.pcap```命令。
tcpdump手机抓包说明
文档维护人: 杨云邮箱:yangyun@版权所有 侵权必究 2013年12月上海网宿科技股份有限公司扎实稳健,和谐融洽 志存高远,厚积薄发tcpdump 使用说明---通过tcpdump 手机抓包说明版本修订记录(项目)目录1.背景 (4)2.抓包准备 (4)3.抓包步骤 (4)1.背景本文档介绍如何利用tcpdump工具在手机上抓包。
2.抓包准备(1)安卓手机root。
(2)platform-tools工具包。
将工具包解压到文件夹,本文档解压到F:\android。
(3)Tcpdump软件(获取地址/android/tcpdump)。
3.抓包步骤1. 将Android手机与电脑USB相连,打开USB调试。
打开windows命令提示符窗口,进入adb工具目录F:\android,在PC上把tcpdump软件也拷贝到F:\android目录下。
2. 将tcpdump程序copy至android手机(该命令前面那个目录文件为本地地址,后面那个目录为目的手机端地址)f:\android>adb push tcpdump /data/tcpdumpTips: 若此方法提示错误,可以先将tcpdump工具复制到SD卡上,再通过R.E文件管理工具,将tcpdump复制到/data目录下。
3. 进入root权限,修改tcpdump的权限进入/data目录,将tpcdump文件改成可执行权限才能抓包。
f:\android>adb shellshell@android:/ $ su在运行su指令后,手机终端桌面会出现相应提示信息以确认您对root操作的认可。
shell@android:/ # cd /datashell@android:/data # chmod 777 ./tcpdump4. 运行tcpdump,输入以下命令启动抓包。
shell@android:/data # ./tcpdump -nn -XX -vv -s 0 -w test.pcap5.执行完成后在命令提示符窗口执行Ctrl+C中断抓包进程6.将抓包结果复制至本地(前面那个目录为手机端地址,后面那个目录为本地地址)f:\android>adb pull /data/test.pcap f:/7. 使用Wireshark等工具查看抓包文件test.pcapC:\Windows\system32>d:D:\>cd d:/androidd:\android>adb shellshell@Coolpad8297-W01:/ $ susuroot@Coolpad8297-W01:/ # cd /datacd /dataroot@Coolpad8297-W01:/data # chmod 777 ./tcpdumpchmod 777 ./tcpdumproot@Coolpad8297-W01:/data # ./tcpdump -nn -XX -vv -s 0 -w test.pcap./tcpdump -nn -XX -vv -s 0 -w test.pcaptcpdump: WARNING: arptype 530 not supported by libpcap - falling back to cooked sockettcpdump: listening on rmnet0, link-type LINUX_SLL (Linux cooked), capture size 6 5535 bytes^Ct 2001d:\android>adb pull /data/test.pcap d:/error:d:\android>adb pull /data/test.pcap d:/failed to copy '/data/test.pcap' to 'd://test.pcap': Permission deniedd:\android>adb shellshell@Coolpad8297-W01:/ $ rootroot/system/bin/sh: root: not found127|shell@Coolpad8297-W01:/ $ susuroot@Coolpad8297-W01:/ # cd /datacd /dataroot@Coolpad8297-W01:/data # chmod 777 ./tcpdumpchmod 777 ./tcpdumproot@Coolpad8297-W01:/data # ./tcpdump -nn -XX -vv -s 0 -w test.pcap./tcpdump -nn -XX -vv -s 0 -w test.pcaptcpdump: WARNING: arptype 530 not supported by libpcap - falling back to cooked sockettcpdump: listening on rmnet0, link-type LINUX_SLL (Linux cooked), capture size 6 5535 bytes^Ct 562d:\android>adb pull /data/test.pcap d:/failed to copy '/data/test.pcap' to 'd://test.pcap': Permission deniedd:\android>adb pull /data/test.pcap d:/failed to copy '/data/test.pcap' to 'd://test.pcap': Permission deniedd:\android>adb shellshell@Coolpad8297-W01:/ $ susuroot@Coolpad8297-W01:/ # cd /datacd /dataroot@Coolpad8297-W01:/data # chmod 755 ./test.pcapchmod 755 ./test.pcaproot@Coolpad8297-W01:/data # ./tcpdump -nn -XX -vv -s 0 -w test.pcap./tcpdump -nn -XX -vv -s 0 -w test.pcaptcpdump: WARNING: arptype 530 not supported by libpcap - falling back to cooked sockettcpdump: listening on rmnet0, link-type LINUX_SLL (Linux cooked), capture size 6 5535 bytes^Ct 99d:\android>adb pull /data/test.pcap d:/1028 KB/s (36864 bytes in 0.035s) d:\android。
抓包详解释
Tcpdump常用命令及基础故障定位3板斧!(新工程师转正必需掌握)在老4k系统和TOS中的.1平台和.8平台(猎豹)支持TCPDUMP命令。
Tcpdump中and、not、or、host、port、grep、-e、-vv参数的使用:例1:在eth1口抓包,只显示地址为10.1.1.1和icmp协议的报文。
Tcpdump –i eth1 host 10.1.1.1 and icmp例2:在所有的接口抓包,不显示4000端口的管理报文,和23端口的telnet报文。
Tcpdump –i any not port 4000 and not port 23 (在同时管理的时候很实用)例3:在eth1口抓包,显示地址为211.1.1.1或10.1.1.1的报文。
Tcpdump –i eth1 host 211.1.1.1 or host 10.1.1.1 (针对MAP前后的地址同时抓包定位时非常实用)例4:在所有的接口抓包,显示地址为10.1.1.1报文。
Tcpdump |grep host 10.1.1.1 (在adls环境中非常实用,封装了PPPOE的报文也能抓到,但是TOS不支持grep的参数了)在tos系统中,X86的平台下才有抓包的工具,-n表示不需要域名解析,加快抓包的速度。
并且-evv比老的4k系统中,能抓到更多的信息,其中还包括校验和。
例5:System tcpdump –i any –evv -n (TOS系统中最后必须加-n的参数,才能保证抓包的速度)例6:System tcpdump –i ipsec0 -n (TOS支持在ipsec0中抓包,来判断数据流是否进入隧道)例7:System tcpdump –i ppp0 -n (TOS支持在ppp0中抓包,来判断数据流是否进入PPPoE 的封装)现场通过抓包来定位故障原因是最准确高效的方法:下面抓包中,客户端源地址为168.36.126.1 MAP地址为209.136.47.12 服务器真实地址为11.68.21.12对于目的地址转换,天融信也俗称为MAP转换。
tcpdump
以下将给出9个使用tcpdump的例子,以说明tcpdump的具体使用方法。
1.针对特定网口抓包(-i选项)当我们不加任何选项执行tcpdump时,tcpdump将抓取通过所有网口的包;使用-i选项,我们可以在某个指定的网口抓包:linux:/tmp/lx # tcpdump -i eth0tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 96bytes 10:50:28.607429 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: .ack 116 win 6495110:50:28.607436 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 116:232(116) ack 1 win 1286410:50:30.384195 arp who-has 128.128.128.35 tell 128.128.128.35以上例子中,tcpdump抓取所有通过eth0的包。
2.抓取指定数目的包(-c选项)默认情况下tcpdump将一直抓包,直到按下”ctrl+c”中止,使用-c选项我们可以指定抓包的数量:linux:/tmp/lx # tcpdump -c 2 -i eth0tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 96bytes 10:58:05.656104 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 1210443473:1210443589(116) ack 2583117929 win 1286410:58:05.657074 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: .ack 116 win 652112 packets captured6 packets received by filter0 packets dropped by kernel以上例子中,只针对eth0网口抓2个包。
tcpdump使用手册
tcpdump使用手册摘要:1.tcpdump 简介2.tcpdump 基本语法3.tcpdump 的高级特性4.tcpdump 的实际应用5.tcpdump 的未来发展正文:【1.tcpdump 简介】Tcpdump 是一种网络协议分析工具,它可以用来捕获、分析和解码网络数据包。
Tcpdump 最早由Eric Allman 开发,现在由OpenBSD 项目进行维护。
它可以运行在各种操作系统上,包括Linux、FreeBSD 和Windows。
【2.tcpdump 基本语法】Tcpdump 的基本语法非常简单,它主要包括以下几个选项:- -i:指定网络接口- -n:不解码主机名和服务名- -v:显示详细信息- -c:显示统计信息- -w:将数据包保存到文件中例如,如果你想在eth0 接口上捕获数据包,并保存到file.pcap 文件中,可以使用以下命令:```tcpdump -i eth0 -w file.pcap```【3.tcpdump 的高级特性】除了基本语法,Tcpdump 还提供了许多高级特性,包括:- 过滤:可以使用BPF 过滤器和正则表达式过滤数据包- 解码:可以解码多种协议,如TCP、UDP、ICMP 等- 实时分析:可以实时分析数据包,并显示分析结果- 导出:可以将数据包导出为多种格式,如pcap、pcapng、json 等【4.tcpdump 的实际应用】Tcpdump 广泛应用于网络故障排除、网络安全分析和网络协议研究等领域。
例如,可以用Tcpdump 捕获某个端口的所有数据包,然后分析数据包,以确定是否存在异常流量。
【5.tcpdump 的未来发展】随着网络技术的不断发展,Tcpdump 也在不断更新和完善。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
tcpdump的使用tcpdump采用命令行方式,它的命令格式为:tcpdump [ -a d e f l n N O p q S t v x][ -c 数量 ][ -F 文件名 ][ -i 网络接口 ][ -r 文件名][ -s snaplen ][ -T 类型 ][ -w 文件名 ][表达式 ]描述(DESCRIPTION)Tcpdump打印出在某个网络界面上,匹配布尔表达式expression的报头.对于SunOS的nit或bpf界面:要运行tcpdump,你必须有/dev/nit或/dev/bpf*的读访问权限.对于Solaris的dlpi:你必须有网络仿真设备(networkpseudodevice),如/dev/le的读访问权限.对于HP-UX的dlpi:你必须是root,或者把它安装成root的设置uid程序.对于IRIX的snoop:你必须是root,或者把它安装成root的设置uid程序.对于Linux:你必须是root,或者把它安装成root的设置uid程序.对于Ultrix和DigitalUNIX:一旦超级用户使用pfconfig(8)开放了promiscuous操作模式(promiscuous-mode),任何用户都可以运行tcpdump.对于BSD:你必须有/dev/bpf*的读访问权限.1. tcpdump的选项介绍2. tcpdump的表达式介绍表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。
如果没有给出任何条件,则网络上所有的信息包将会被截获。
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明202.0.0.0是一个网络地址,port 23 指明端口号是23。
如果没有指定类型,缺省的类型是host.第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。
举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。
如果没有指明方向关键字,则缺省是src or dst关键字。
第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。
Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。
其他的几个关键字就是指明了监听的包的协议内容。
如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast, less, greater ,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算是'or' ,'||';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
(1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:#tcpdump host 210.27.48.1(2)想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(。
在命令行中使用括号时,一定要#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)(3)如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:#tcpdump ip host 210.27.48.1 and ! 210.27.48.2(4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:#tcpdump tcp port 23 host 210.27.48.13. tcpdump 的输出结果介绍下面我们介绍几种典型的tcpdump命令的输出信息(1)数据链路层头信息#tcpdump -e host iceice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1AH219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:B:46;上一条命令的输出结果如下所示:21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 >ice.telnet 0:0(0) ack 22535 win 8760 (DF)分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 >ice.telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.(2)ARP包的TCPDUMP输出信息使用命令#tcpdump arp得到的输出结果是:22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP 请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。
0:90:27:58:af:1a是主机ICE的MAC地址。
(3)TCP包的输出信息用TCPDUMP捕获的TCP包的一般输出信息是:src > dst: flags data-seqno ack window urgent optionssrc > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针.Options是选项.(4)UDP包的输出信息用TCPDUMP捕获的UDP包的一般输出信息是:route.port1 > ice.port2: udp lenthUDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE 的port2端口,类型是UDP,包的长度是lenthTCPDUMP中文手册最详细的手册名称(NAME)tcpdump-转储网络上的数据流总览(SYNOPSIS)tcpdump[-adeflnNOpqStvx][-ccount][-Ffile][-iinterface][-rfile][-ssnaplen][-Ttype][-wfile][expression]描述(DESCRIPTION)Tcpdump打印出在某个网络界面上,匹配布尔表达式expression的报头.对于SunOS的nit或bpf界面:要运行tcpdump,你必须有/dev/nit或/dev/bpf*的读访问权限.对于Solaris的dlpi:你必须有网络仿真设备(networkpseudodevice),如/dev/le的读访问权限.对于HP-UX的dlpi:你必须是root,或者把它安装成root的设置uid程序.对于IRIX的snoop:你必须是root,或者把它安装成root的设置uid程序.对于Linux:你必须是root,或者把它安装成root的设置uid程序.对于Ultrix和DigitalUNIX:一旦超级用户使用pfconfig(8)开放了promiscuous操作模式(promiscuous-mode),任何用户都可以运行tcpdump.对于BSD:你必须有/dev/bpf*的读访问权限.选项(OPTIONS)-a试着把网络和广播地址转换成名称.-c当收到count报文后退出.-d把编译好的报文匹配模板(packet-matchingcode)翻译成可读形式,传往标准输出,然后退出.-dd把报文匹配模板(packet-matchingcode)以C程序片断的形式输出.-ddd把报文匹配模板(packet-matchingcode)以十进制数形式输出(前面加上总数).-e每行都显示链路层报头.-f用数字形式显示'外部的'互联网地址,而不是字符形式(这个选项用来绕开脑壳坏光的SUN黄页服务器的问题---一般说来它翻译外部网络数字地址的时候会长期挂起).-F把file的内容用作过滤表达式.忽略命令行上的表达式.-i监听interface.如果不指定接口,tcpdump在系统的接口清单中,寻找号码最小,已经配置好的接口(loopback除外).选中的时候会中断连接.-l行缓冲标准输出.可用于捕捉数据的同时查看数据.例如,``tcpdump-l|teedat''or``tcpdump-l>dat&tail-fdat''.-n别把地址转换成名字(就是说,主机地址,端口号等)-N不显示主机名字中的域名部分.例如,如果使用这个选项,tcpdump只显示``nic'',而不是``''.-O禁止运行报文匹配模板的优化器.只有当你怀疑优化器有bug时才有用.-p禁止把接口置成promiscuous模式.注意,接口有可能因其他原因而处于promiscuous模式;因此,'-p'不能作为`etherhost{local-hw-addr}或etherbroadcast'的简写.-q快速输出.显示较少的协议信息,输出行会短一点点.-r从file中读入数据报(文件是用-w选项创建的).如果file是``-'',就读标准输入.-s从每个报文中截取snaplen字节的数据,而不是缺省的68(如果是SunOS的NIT,最小值是96).68个字节适用于IP,ICMP,TCP和 UDP,但是有可能截掉名字服务器和NFS报文的协议信息(见下面).输出时如果指定``[|proto]'',tcpdump可以指出那些捕捉量过小的数据报,这里的proto是截断发生处的协议层名称.注意,采用更大的捕捉范围既增加了处理报文的时间,又相应的减少了报文的缓冲数量,可能导致报文的丢失.你应该把snaplen设的尽量小,只要能够容纳你需要的协议信息就可以了.-T把通过"expression"挑选出来的报文解释成指定的type.目前已知的类型有:rpc(远程过程调用RemoteProcedureCall),rtp(实时应用协议Real- TimeApplicationsprotocol),rtcp(实时应用控制协议Real- TimeApplicationscontrolprotocol),vat(可视音频工具VisualAudioTool),和wb(分布式白板distributedWhiteBoard).-S显示绝对的,而不是相对的TCP序列号.-t禁止显示时戳标志.-tt显示未格式化的时戳标志.-v(稍微多一点)繁琐的输出.例如,显示IP数据报中的生存周期和服务类型.-vv更繁琐的输出.例如,显示NFS应答报文的附加域.-w把原始报文存进file,而不是分析和显示.它们可以以后用-r选项显示.如果file是``-'',就写往标准输出. -x以16进制数形式显示每一个报文(去掉链路层报头后).可以显示较小的完整报文,否则只显示snaplen个字节. expression用来选择要转储的数据报.如果没有指定expression,就转储网络的全部报文.否则,只转储相对expression为`true'的数据报.expression一个或多个原语(primitive)组成.原语通常由一个标识(id,名称或数字),和标识前面的一个或多个修饰子(qualifier)组成.修饰子有三种不同的类型:type类型修饰子指出标识名称或标识数字代表什么类型的东西.可以使用的类型有host,net和port.例如,`hostfoo',`net128.3',`port20'.如果不指定类型修饰子,就使用缺省的host.dir方向修饰子指出相对于标识的传输方向(数据是传入还是传出标识).可以使用的方向有src,dst,srcordst和srcanddst.例如, `srcfoo',`dstnet128.3',`srcordstportftp-data'.如果不指定方向修饰子,就使用缺省的srcordst. 对于`null'链路层(就是说象slip之类的点到点协议),用inbound和outbound修饰子指定所需的传输方向.proto协议修饰子要求匹配指定的协议.可以使用的协议有:ether,fddi,ip,arp,rarp,decnet,lat,sca,moprc, mopdl,tcp和udp.例如,`ethersrcfoo',`arpnet128.3',`tcpport21'.如果不指定协议修饰子,就使用所有符合类型的协议.例如,`srcfoo'指`(ip或arp或rarp)srcfoo'(注意后者不符合语法),`netbar'指`(ip或arp或 rarp)netbar',`port53'指`(tcp或udp)port53'.[`fddi'实际上是`ether'的别名;分析器把它们视为``用在指定网络接口上的数据链路层.''FDDI报头包含类似于以太协议的源目地址,而且通常包含类似于以太协议的报文类型,因此你可以过滤 FDDI域,就象分析以太协议一样.FDDI报头也包含其他域,但是你不能在过滤器表达式里显式描述.]作为上述的补充,有一些特殊的`原语'关键字,它们不同于上面的模式:gateway,broadcast,less,greater和数学表达式.这些在后面有叙述.更复杂的过滤器表达式可以通过and,or和not连接原语来组建.例如,`hostfooandnotportftpandnotportftp-data'.为了少敲点键,可以忽略相同的修饰子.例如,`tcpdstportftporftp-dataordomain'实际上就是`tcpdstportftportcpdstportftp-dataortcpdstportdomain'.允许的原语有:dsthosthost如果报文中IP的目的地址域是host,则逻辑为真.host既可以是地址,也可以是主机名.srchosthost如果报文中IP的源地址域是host,则逻辑为真.hosthost如果报文中IP的源地址域或者目的地址域是host,则逻辑为真.上面所有的host表达式都可以加上ip,arp,或rarp关键字做前缀,就象:iphosthost它等价于:etherproto\ipandhosthost如果host是拥有多个IP地址的主机名,它的每个地址都会被查验.etherdstehost如果报文的以太目的地址是ehost,则逻辑为真.Ehost既可以是名字(/etc/ethers里有),也可以是数字(有关数字格式另见ethers(3N)).ethersrcehost如果报文的以太源地址是ehost,则逻辑为真.etherhostehost如果报文的以太源地址或以太目的地址是ehost,则逻辑为真.gatewayhost如果报文把host当做网关,则逻辑为真.也就是说,报文的以太源或目的地址是host,但是IP的源目地址都不是host.host必须是个主机名,而且必须存在/etc/hosts和/etc/ethers中.(一个等价的表达式是etherhostehostandnothosthost对于host/ehost,它既可以是名字,也可以是数字.)dstnetnet如果报文的IP目的地址属于网络号net,则逻辑为真.net既可以是名字(存在/etc/networks中),也可以是网络号.(详见networks(4)).srcnetnet如果报文的IP源地址属于网络号net,则逻辑为真.netnet如果报文的IP源地址或目的地址属于网络号net,则逻辑为真.netnetmaskmask如果IP地址匹配指定网络掩码(netmask)的net,则逻辑为真.本原语可以用src或dst修饰.netnet/len如果IP地址匹配指定网络掩码的net,则逻辑为真,掩码的有效位宽为len.本原语可以用src或dst修饰. dstportport如果报文是ip/tcp或ip/udp,并且目的端口是port,则逻辑为真.port是一个数字,也可以是/etc/services中说明过的名字 (参看tcp(4P)和udp(4P)).如果使用名字,则检查端口号和协议.如果使用数字,或者有二义的名字,则只检查端口号(例如,dstport513 将显示tcp/login的数据和udp/who的数据,而portdomain将显示tcp/domain和udp/domain的数据).srcportport如果报文的源端口号是port,则逻辑为真.portport如果报文的源端口或目的端口是port,则逻辑为真.上述的任意一个端口表达式都可以用关键字tcp或udp做前缀,就象:tcpsrcportport它只匹配源端口是port的TCP报文.lesslength如果报文的长度小于等于length,则逻辑为真.它等同于:len<=length.greaterlength如果报文的长度大于等于length,则逻辑为真.它等同于:len>=length.ipprotoprotocol如果报文是IP数据报(参见ip(4P)),其内容的协议类型是protocol,则逻辑为真.Protocol可以是数字,也可以是下列名称中的一个: icmp,igrp,udp,nd,或tcp.注意这些标识符tcp,udp,和icmp也同样是关键字,所以必须用反斜杠(\)转义,在C-shell 中应该是\\.etherbroadcast如果报文是以太广播报文,则逻辑为真.关键字ether是可选的.ipbroadcast如果报文是IP广播报文,则逻辑为真.Tcpdump检查全0和全1广播约定,并且检查本地的子网掩码. ethermulticast如果报文是以太多目传送报文(multicast),则逻辑为真.关键字ether是可选的.这实际上是`ether[0]&1!=0'的简写.ipmulticast如果报文是IP多目传送报文,则逻辑为真.etherprotoprotocol如果报文协议属于以太类型的protocol,则逻辑为真.Protocol可以是数字,也可以是名字,如ip,arp,或rarp.注意这些标识符也是关键字,所以必须用反斜杠(\)转义.[如果是FDDI(例如,`fddiprotocolarp'),协议标识来自802.2逻辑链路控制(LLC)报头,它通常位于FDDI报头的顶层.当根据协议标识过滤报文时,Tcpdump假设所有的FDDI报文含有LLC报头,而且LLC报头用的是SNAP格式.]decnetsrchost如果DECNET的源地址是host,则逻辑为真,该主机地址的形式可能是``10.123'',或者是DECNET主机名.[只有配置成运行DECNET的Ultrix系统支持DECNET主机名.]decnetdsthost如果DECNET的目的地址是host,则逻辑为真.decnethosthost如果DECNET的源地址或目的地址是host,则逻辑为真.ip,arp,rarp,decnet是:etherprotop的简写形式,其中p为上述协议的一种.lat,moprc,mopdl是:etherprotop的简写形式,其中p为上述协议的一种.注意tcpdump目前不知道如何分析这些协议.tcp,udp,icmp是:ipprotop的简写形式,其中p为上述协议的一种.exprrelopexpr如果这个关系成立,则逻辑为真,其中relop是>,<,>=,<=,=,!=之一,expr是数学表达式,由常整数(标准C语法形式),普通的二进制运算符[+,-,*,/,&,|],一个长度运算符,和指定的报文数据访问算符组成.要访问报文内的数据,使用下面的语法:proto[expr:size]Proto 是ether,fddi,ip,arp,rarp,tcp,udp,oricmp之一,同时也指出了下标操作的协议层.expr给出字节单位的偏移量,该偏移量相对于指定的协议层.Size是可选项,指出感兴趣的字节数;它可以是1,2,4,缺省为1字节.由关键字len给出的长度运算符指明报文的长度.例如,`ether[0]&1!=0'捕捉所有的多目传送报文.表达式`ip[0]&0xf!=5'捕捉所有带可选域的IP报文.表达式`ip[6:2]&0x1fff=0'只捕捉未分片和片偏移为0的数据报.这种检查隐含在tcp和udp下标操作中.例如,tcp[0]一定是 TCP报头的第一个字节,而不是其中某个IP片的第一个字节.原语可以用下述方法结合使用:园括弧括起来的原语和操作符(园括弧在Shell中有专用,所以必须转义).取反操作(`!'or`not').连结操作(`&&'or`and').或操作(`||'or`or').取反操作有最高优先级.或操作和连结操作有相同的优先级,运算时从左到右结合.注意连结操作需要显式的and算符,而不是并列放置.如果给出标识符,但没给关键字,那么暗指最近使用的关键字.例如,nothostvsandace作为nothostvsandhostace的简写形式,不应该和not(hostvsorace)混淆.表达式参数可以作为单个参数传给tcpdump,也可以作为复合参数,后者更方便一些.一般说来,如果表达式包含Shell元字符(metacharacter),传递单个括起来的参数要容易一些.复合参数在被解析前用空格联接一起.示例(EXAMPLES)显示所有进出sundown的报文:tcpdumphostsundown显示helios和主机hot,ace之间的报文传送:tcpdumphostheliosand\(hotorace\)显示ace和除了helios以外的所有主机的IP报文:tcpdumpiphostaceandnothelios显示本地的主机和Berkeley的主机之间的网络数据:tcpdumpnetucb-ether显示所有通过网关snup的ftp报文(注意这个表达式被单引号括起,防止shell解释园括弧):tcpdump'gatewaysnupand(portftporftp-data)'显示既不是来自本地主机,也不是传往本地主机的网络数据(如果你把网关通往某个其他网络,这个做法将不会把数据发往你的本地网络).tcpdumpipandnotnetlocalnet显示每个TCP会话的起始和结束报文(SYN和FIN报文),而且会话方中有一个远程主机.tcpdump'tcp[13]&3!=0andnotsrcanddstnetlocalnet'显示经过网关snup中大于576字节的IP数据报:tcpdump'gatewaysnupandip[2:2]>576'显示IP广播或多目传送的数据报,这些报文不是通过以太网的广播或多目传送形式传送的:tcpdump'ether[0]&1=0andip[16]>=224'显示所有不是回响请求/应答的ICMP报文(也就是说,不是ping报文):tcpdump'icmp[0]!=8andicmp[0]!=0"输出格式(OUTPUTFORMAT)tcpdump的输出格式取决于协议.下面的描述给出大多数格式的简要说明和范例.链路层报头(LinkLevelHeaders)如果给出'-e'选项就显示链路层报头.在以太网上,显示报文的源目地址,协议和报文长度.在FDDI 网络上,'-e'选项导致tcpdump显示出`帧控制(framecontrol)'域,源目地址和报文长度.(`帧控制'域负责解释其余的报文.普通报文(比如说载有IP数据报)是`异步'报文,优先级介于0到7;例如,`async4'.这些被认为载有802.2逻辑链路控制(LLC)报文;如果它们不是ISO数据报或者所谓的SNAP报文,就显示出LLC 报头.(注意:以下描述中假设你熟悉RFC-1144中说明的SLIP压缩算法.)在SLIP 链路上,tcpdump显示出方向指示(``I''指inbound,``O''指outbound),报文类型和压缩信息.首先显示的是报文类型.有三种类型ip,utcp和ctcp.对于ip报文不再显示更多的链路信息.对于TCP报文,在类型后面显示连接标识.如果报文是压缩过的,就显示出编码的报头.特殊情形以*S+n和*SA+n的形式显示,这里的n是顺序号(或顺序号及其确认)发生的改变总和.如果不是特殊情形,就显示0或多少个改变.改变由U(urgentpointer),W(window),A(ack),S(sequencenumber)和I(packetID)指明,后跟一个变化量(+nor-n),或另一个值(=n).最后显示报文中的数据总和,以及压缩报头的长度.例如,下面一行显示了一个传出的压缩的TCP报文,有一个隐含的连接标识;确认(ack)的变化量是6,顺序号是49,报文ID是6;有三个字节的数据和六个字节的压缩报头:Octcp*A+6S+49I+63(6)ARP/RARP报文Arp/rarp报文的输出显示请求类型及其参数.输出格式倾向于能够自我解释.这里是一个简单的例子,来自主机rtsg到主机csam的'rlogin'开始部分:arpwho-hascsamtellrtsgarpreplycsamis-atCSAM第一行说明rtsg发出一个arp报文询问internet主机csam的以太网地址.Csam用它的以太地址作应答(这个例子中,以太地址是大写的,internet地址为小写).如果用tcpdump-n看上去要清楚一些:arpwho-has128.3.254.6tell128.3.254.68arpreply128.3.254.6is-at02:07:01:00:01:c4如果用tcpdump-e,可以看到实际上第一个报文是广播,第二个报文是点到点的:RTSGBroadcast080664:arpwho-hascsamtellrtsgCSAMRTSG080664:arpreplycsamis-atCSAM这里第一个报文指出以太网源地址是RTSG,目的地址是以太网广播地址,类型域为16进制数0806(类型ETHER_ARP),报文全长64字节.TCP报文(注意:以下的描述中假设你熟悉RFC-793中说明的TCP协议,如果你不了解这个协议,无论是本文还是tcpdump 都对你用处不大)一般说来tcp协议的输出格式是:src>dst:flagsdata-seqnoackwindowurgentoptionsSrc 和dst是源目IP地址和端口.Flags是S(SYN),F(FIN),P(PUSH)或R(RST)或单独的`.'(无标志),或者是它们的组合. Data-seqno说明了本报文中的数据在流序号中的位置(见下例).Ack是在这条连接上信源机希望下一个接收的字节的流序号 (sequencenumber).Window是在这条连接上信源机接收缓冲区的字节大小.Urg表明报文内是`紧急(urgent)'数据. Options是tcp可选报头,用尖括号括起(例如,).Src,dst和flags肯定存在.其他域依据报文的tcp报头内容,只输出有必要的部分.下面是从主机rtsgrlogin到主机csam的开始部分.rtsg.1023>csam.login:S768512:768512(0)win4096csam.login>rtsg.1023:S947648:947648(0)ack768513win4096rtsg.1023>csam.login:.ack1win4096rtsg.1023>csam.login:P1:2(1)ack1win4096csam.login>rtsg.1023:.ack2win4096rtsg.1023>csam.login:P2:21(19)ack1win4096csam.login>rtsg.1023:P1:2(1)ack21win4077csam.login>rtsg.1023:P2:3(1)ack21win4077urg1csam.login>rtsg.1023:P3:4(1)ack21win4077urg1第一行是说从rtsg的tcp端口1023向csam的login端口发送报文.S标志表明设置了SYN标志.报文的流序号是768512,没有数据. (这个写成`first:last(nbytes)',意思是`从流序号first到last,不包括last,有nbytes字节的用户数据'.)此时没有捎带确认(piggy-backedack),有效的接收窗口是4096字节,有一个最大段大小(max-segment-size)的选项,请求设置 mss为1024字节.Csam用类似的形式应答,只是增加了一个对rtsgSYN的捎带确认.然后Rtsg确认csam的SYN.`.'意味着没有设置标志.这个报文不包含数据,因此也就没有数据的流序号.注意这个确认流序号是一个小整数(1).当tcpdump 第一次发现一个tcp会话时,它显示报文携带的流序号.在随后收到的报文里,它显示当前报文和最初那个报文的流序号之差.这意味着从第一个报文开始,以后的流序号可以理解成数据流中的相对位移asrelativebytepositionsintheconversation'sdatastream(withthefirstdatabyteeachdirectionbeing`1').`-S'选项能够改变这个特性,直接显示原始的流序号.在第六行,rtsg传给csam19个字节的数据(字节2到20).报文中设置了PUSH标志.第七行csam表明它收到了rtsg的数据,字节序号是 21,但不包括第21个字节.显然大多数数据在socket的缓冲区内,因为csam的接收窗口收到的数据小于19个字节.同时csam向rtsg发送了一个字节的数据.第八和第九行显示csam发送了两个字节的紧急数据到rtsg.如果捕捉区设置的过小,以至于tcpdump不能捕捉到完整的TCP报头,tcpdump会尽可能的翻译已捕获的部分,然后显示``[|tcp]'',表明无法翻译其余部分.如果报头包含一个伪造的选项(onewithalengththat'seithertoosmallorbeyondtheendoftheheader),tcpdump显示 ``[badopt]''并且不再翻译其他选项部分(因为它不可能判断出从哪儿开始).如果报头长度表明存在选项,但是IP数据报长度不够,不可能真的保存选项,tcpdump就显示``[badhdrlength]''.UDP报文UDP格式就象这个rwho报文显示的:actinide.who>broadcast.who:udp84就是说把一个udp数据报从主机actinide的who端口发送到broadcast,Internet广播地址的who端口.报文包含84字节的用户数据.某些UDP服务能够识别出来(从源目端口号上),因而显示出更高层的协议信息.特别是域名服务请求(RFC-1034/1035)和NFS的RPC调用(RFC-1050).UDP域名服务请求(NameServerRequests)(注意:以下的描述中假设你熟悉RFC-1035说明的域名服务协议.如果你不熟悉这个协议,下面的内容就象是天书.)域名服务请求的格式是src>dst:idop?flagsqtypeqclassname(len)h2opolo.1538>helios.domain:3+A?.(37)主机h2opolo访问helios上的域名服务,询问和.关联的地址记录(qtype=A).查询号是`3'.` +'表明设置了递归请求标志.查询长度是37字节,不包括UDP和IP头.查询操作是普通的Query操作,因此op域可以忽略.如果op设置成其他什么东西,它应该显示在`3'和`+'之间.类似的,qclass是普通的C_IN 类型,也被忽略了.其他类型的qclass应该在`A'后面显示.Tcpdump 会检查一些不规则情况,相应的结果作为补充域放在方括号内:如果某个查询包含回答,名字服务或管理机构部分,就把ancount,nscount,或 arcount显示成`[na]',`[nn]'或`[nau]',这里的n代表相应的数量.如果在第二和第三字节中,任何一个回答位(AA,RA或 rcode)或任何一个`必须为零'的位被置位,就显示`[b2&3=x]',这里的x是报头第二和第三字节的16进制数.UDP名字服务回答名字服务回答的格式是src>dst:idoprcodeflagsa/n/autypeclassdata(len)helios.domain>h2opolo.1538:33/3/7A128.32.137.3(273)helios.domain>h2opolo.1537:2NXDomain*0/1/0(97)第一个例子里,helios回答了h2opolo发出的标识为3的询问,一共是3个回答记录,3个名字服务记录和7个管理结构记录.第一个回答纪录的类型是 A(地址),数据是internet地址128.32.137.3.回答的全长为273字节,不包括UDP和IP报头.作为A记录的class (C_IN)可以忽略op(询问)和rcode(NoError).在第二个例子里,helios对标识为2的询问作出域名不存在(NXDomain)的回答,没有回答记录,一个名字服务记录,而且没有管理结构.`*'表明设置了权威回答(authoritativeanswer).由于没有回答记录,这里就不显示type,class和data.其他标志字符可以显示为`-'(没有设置递归有效(RA))和`|'(设置消息截短(TC)).如果`问题'部分没有有效的内容,就显示`[nq]'.注意名字服务的询问和回答一般说来比较大,68字节的snaplen可能无法捕捉到足够的报文内容.如果你的确在研究名字服务的情况,可以使用-s选项增大捕捉缓冲区.`-s128'应该效果不错了.NFS请求和响应SunNFS(网络文件系统)的请求和响应显示格式是:src.xid>dst.nfs:lenopargssrc.nfs>dst.xid:replystatlenopresultssushi.6709>wrl.nfs:112readlinkfh21,24/10.73165wrl.nfs>sushi.6709:replyok40readlink"../var"sushi.201b>wrl.nfs:144lookupfh9,74/4096.6878"xcolors"wrl.nfs>sushi.201b:replyok128lookupfh9,74/4134.3150在第一行,主机sushi向wrl发送号码为6709的交易会话(注意源主机后面的数字是交易号,不是端口).这项请求长112字节,不包括UDP和IP 报头.在文件句柄(fh)21,24/10.731657119上执行readlink(读取符号连接)操作.(如果运气不错,就象这种情况,文件句柄可以依次翻译成主次设备号,i节点号,和事件号(generationnumber).)Wrl回答`ok'和连接的内容.在第三行,sushi请求wrl在目录文件9,74/4096.6878中查找`xcolors'.注意数据的打印格式取决于操作类型.格式应该是可以自我说明的.给出-v(verbose)选项可以显示附加信息.例如:sushi.1372a>wrl.nfs:148readfh21,11/12.1958192bytes@24576wrl.nfs>sushi.1372a:replyok1472readREG100664ids417/0sz29388(- v同时使它显示IP报头的TTL,ID,和分片域,在这个例子里把它们省略了.)在第一行,sushi请求wrl从文件21,11/12.195的偏移位置24576开始,读取8192字节.Wrl回答`ok';第二行显示的报文是应答的第一个分片,因此只有1472字节(其余数据在后续的分片中传过来, 但由于这些分片里没有NFS甚至UDP报头,因此根据所使用的过滤器表达式,有可能不显示).-v选项还会显示一些文件属性(它们作为文件数据的附带部分传回来):文件类型(普通文件``REG''),存取模式(八进制数),uid和gid,以及文件大小.如果再给一个-v选项(-vv),还能显示更多的细节.注意NFS请求的数据量非常大,除非增加snaplen,否则很多细节无法显示.试一试`-s192'选项.NFS应答报文没有明确标明RPC操作.因此tcpdump保留有``近来的''请求记录,根据交易号匹配应答报文.如果应答报文没有相应的请求报文,它就无法分析.KIPAppletalk(UDP上的DDP)AppletalkDDP报文封装在UDP数据报中,解包后按DDP报文转储(也就是说,忽略所有的UDP报头信息).文件/etc/s用来把appletalk网络和节点号翻译成名字.这个文件的行格式是numbername1.254ether16.1icsd-net1.254.110ace前两行给出了appletalk的网络名称.第三行给出某个主机的名字(主机和网络依据第三组数字区分-网络号一定是两组数字,主机号一定是三组数字.) 号码和名字用空白符(空格或tab)隔开./etc/s文件可以包含空行或注释行(以`#'开始的行).Appletalk地址按这个格式显示。