tcpdump的中文man帮助
- 格式:doc
- 大小:108.50 KB
- 文档页数:16
tcpdump使用方法tcpdump是一种网络封包分析工具,使用命令行界面进行操作。
它可以监听网络接口传输的数据包,并将其显示在终端上。
tcpdump是一个功能强大的工具,可以用于网络排错、协议分析、安全审计等多种用途。
下面将详细介绍tcpdump的使用方法。
1. 安装tcpdump```sudo apt-get install tcpdump```2. 使用tcpdump命令```sudo tcpdump [options] [expression]```其中,options是一些可选项,expression是过滤器表达式。
3.监听所有网络接口使用tcpdump监听所有网络接口的数据包,可以使用以下命令:```sudo tcpdump```这将显示所有接口传输的数据包。
4.监听指定网络接口使用tcpdump监听指定网络接口的数据包,可以使用以下命令:```sudo tcpdump -i eth0```这将监听名为eth0的网络接口的数据包。
5.保存数据包到文件使用tcpdump将捕获到的数据包保存到文件,可以使用以下命令:```sudo tcpdump -w output.pcap```这将将数据包保存到名为output.pcap的文件中。
6.读取保存的数据包文件使用tcpdump读取保存的数据包文件,可以使用以下命令:```sudo tcpdump -r input.pcap```这将读取名为input.pcap的文件中的数据包。
7.过滤数据包使用tcpdump可以根据特定的条件对数据包进行过滤,只显示满足条件的数据包。
以下是一些常用的过滤器表达式示例:-过滤源IP地址:```sudo tcpdump src 192.168.1.1```-过滤目标IP地址:```sudo tcpdump dst 192.168.1.1```-过滤源和目标IP地址:```sudo tcpdump host 192.168.1.1```-过滤指定端口:```sudo tcpdump port 80```-过滤指定协议:```sudo tcpdump icmp```8.显示数据包详细信息使用tcpdump可以显示每个数据包的详细信息。
Linux命令高级技巧通过tcpdump命令进行网络抓包和分析Linux是一款广泛应用于服务器和嵌入式设备的操作系统,具有强大的功能和灵活性。
与其他操作系统相比,Linux提供了丰富的命令行工具,其中之一就是tcpdump命令。
tcpdump是一款用于抓取网络数据包并进行分析的强大工具,它可以帮助用户深入了解网络通信,解决网络故障和排查安全问题。
在本文中,我们将介绍如何使用tcpdump 命令进行网络抓包和分析。
一、什么是网络抓包?网络抓包是指在计算机网络中捕获和保存网络数据包的过程。
网络数据包是信息在网络中传输的基本单位,它包含了源IP地址、目标IP 地址、协议类型、端口号等重要信息。
通过抓包,我们可以观察和分析网络通信的行为,帮助我们了解网络设备之间的交互过程,诊断网络故障,以及排查安全问题。
二、tcpdump命令的基本用法tcpdump命令是一款基于命令行的工具,用于捕获和分析网络数据包。
下面是tcpdump命令的基本用法:```tcpdump [选项] [表达式]```其中,选项用于配置tcpdump的行为,表达式用于过滤需要捕获的数据包。
下面是一些常用的选项:- `-i`:指定要监听的网络接口。
- `-n`:禁用主机名解析,显示ip地址而非域名。
- `-X`:以16进制和ASCII码显示数据包内容。
- `-c`:指定捕获数据包的数量。
- `-s`:指定捕获数据包的最大长度。
例如,我们可以使用以下命令来捕获网络接口eth0上的前10个数据包,并以16进制和ASCII码显示数据包内容:```tcpdump -i eth0 -c 10 -X```三、tcpdump命令的高级用法除了基本用法外,tcpdump命令还提供了一些高级的用法,帮助用户更加灵活和精确地进行网络抓包和分析。
1. 根据协议过滤数据包tcpdump支持根据不同协议类型进行数据包的过滤。
常见的协议包括TCP、UDP、ICMP等。
Linuxtcpdump命令详解Linux 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是一款非常有用的网络工具,可以通过捕获网络流量来分析网络包。
它能够抓取进入或离开网络接口的数据包,并将其显示在控制台上。
该工具可以在多种操作系统上运行,例如Linux、Unix 和MacOS。
在使用这个工具时,需要掌握TCPDump命令参数,这样才能更好地理解工具的使用方法。
下面是TCPDump命令参数的详细介绍:1. -i这个参数用于指定使用的网络接口。
例如,如果要监听eth0接口上的流量,可以使用以下命令: tcpdump -i eth0。
如果不指定这个参数,TCPDump将默认使用系统上的第一个网络接口。
2. -n该参数会将DNS反解析关闭。
在数据包分析过程中,将会显示IP 地址而不是主机名。
3. -c使用该参数后,TCPDump将在抓取指定数目的包后停止。
例如,如果您想抓取前10个包,可以使用以下命令: tcpdump -c 10。
4. -q该参数将输出信息显示在一行中,而不是多行。
这将减少输出的数量和复杂度。
5. -A该参数可以让TCPDump以ASCII格式打印数据包的内容。
这对于跟踪邮件、HTTP请求和其他应用程序有用。
6. -X该参数可以让TCPDump以十六进制格式打印数据包的内容。
这对于跟踪二进制协议非常有用。
7. -s该参数用于指定要捕获的数据包的大小。
对于大量的网络流量,可以使用较小的捕获包大小,以减少输出的数量和复杂度。
例如,如果将捕获包限制为100字节,可以使用以下命令: tcpdump -s 100。
8. -w该参数将输出数据包到一个文件中,而不是输出到控制台。
这个文件可以在其他地方进行分析。
例如,如果您想在文件中保存捕获的流量,可以使用以下命令:tcpdump -w packets.pcap。
以上就是TCPDump命令参数的介绍,通过学习这些参数,我们可以更好地使用TCPDump这个工具,帮助我们分析网络流量,排查网络问题。
原文地址=========以下是本文档完整版本地址:/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命令是基于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:指明⼀台主机。
linux tcpdump 参数Linux tcpdump参数详解一、简介tcpdump是一个开源的网络抓包工具,可以用于捕获和分析网络数据包。
它可以帮助网络管理员监控和故障排除网络问题。
本文将介绍一些常用的tcpdump参数,帮助读者更好地使用这个工具。
二、常用参数1. -i 参数:指定抓包的网络接口使用-i参数可以指定抓包的网络接口,比如eth0、wlan0等。
例如,使用命令"tcpdump -i eth0"可以在eth0网络接口上抓取数据包。
2. -n 参数:不进行主机名解析使用-n参数可以禁止tcpdump进行主机名解析,从而避免输出http 地址。
这对于网络管理员来说非常有用,因为他们更关心的是IP地址而不是主机名。
3. -c 参数:指定抓包数量使用-c参数可以指定抓取的数据包数量。
例如,使用命令"tcpdump -c 100"可以抓取100个数据包后停止。
4. -s 参数:指定抓包长度使用-s参数可以指定抓包的最大长度。
默认情况下,tcpdump会捕获完整的数据包,但有时候只需要捕获部分数据包,可以使用-s参数来限制抓包的长度。
5. -w 参数:将数据包保存到文件使用-w参数可以将抓到的数据包保存到文件中,以便后续分析。
例如,使用命令"tcpdump -w capture.pcap"可以将数据包保存到capture.pcap文件中。
6. -r 参数:从文件中读取数据包使用-r参数可以从文件中读取数据包进行分析。
例如,使用命令"tcpdump -r capture.pcap"可以分析capture.pcap文件中的数据包。
7. -p 参数:禁止混杂模式使用-p参数可以禁止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常用抓包命令一、什么是tcpdumptcpdump是一款用于抓取网络数据包的功能强大的命令行工具。
它可以通过监听网络接口,捕获和分析传输过程中的数据包,对网络问题进行排查和故障分析。
二、安装tcpdump在大多数Linux发行版中,tcpdump已经默认安装。
如果您的系统没有预装tcpdump,可以通过以下命令进行安装:sudo apt-get install tcpdump # Debian/Ubuntusudo yum install tcpdump # CentOS/RHEL三、tcpdump的基本用法1. 抓取数据包使用tcpdump进行抓包非常简单,只需要在命令行中输入tcpdump命令即可开始捕获所有的数据包。
tcpdump2. 指定网络接口如果有多个网络接口可以选择,可以使用-i参数指定要监听的网络接口。
例如,要监听eth0接口的数据包,可以使用以下命令:tcpdump -i eth03. 保存捕获的数据包默认情况下,tcpdump会将捕获的数据包输出到标准输出。
如果需要将数据包保存到文件中,可以使用-w参数指定文件名。
例如,将数据包保存到capture.pcap文件中:tcpdump -w capture.pcap4. 显示捕获的数据包内容通过默认设置,tcpdump只会以十六进制格式显示捕获的数据包。
如果想要查看更多的信息,可以使用-A参数以ASCII格式显示数据包内容。
例如:tcpdump -A5. 显示源和目标IP地址如果只需要查看数据包的源和目标IP地址,而不关心其他详细内容,可以使用-n 参数。
例如:tcpdump -n四、高级用法1. 指定抓包数量默认情况下,tcpdump会一直抓包直到用户终止程序。
如果只需要抓取固定数量的数据包,可以使用-c参数指定要抓取的包数量。
例如,只抓取10个数据包:tcpdump -c 102. 使用过滤器tcpdump可以使用过滤器来指定要抓取的数据包的条件。
linux tcpdump参数Linux tcpdump 参数详解一、简介tcpdump 是一款用于网络抓包的命令行工具,它能够截获网络上的数据包,并将其显示或保存下来。
它可以分析网络通信的过程,帮助网络管理员进行网络故障排查、网络性能优化等工作。
本文将详细介绍 tcpdump 命令的各种参数及其使用方法。
二、常用参数1. -i 参数-i 参数用于指定网络接口,它可以用来监听特定的网络接口,如eth0、wlan0 等。
例如,使用命令tcpdump -i eth0 可以监听eth0 网卡上的网络通信。
2. -n 参数-n 参数用于禁止解析IP 地址和端口号,以数字形式显示。
这样可以提高性能,并且避免输出中出现大量的域名解析信息。
3. -s 参数-s 参数用于指定截获的数据包的最大长度。
默认情况下,tcpdump 会输出完整的数据包,但有时为了节省存储空间或提高性能,可以使用 -s 参数限制数据包的长度。
例如,使用命令 tcpdump -s 100可以截获最长为 100 字节的数据包。
4. -X 参数-X 参数用于以十六进制和 ASCII 码形式显示数据包的内容。
它可以帮助我们更直观地了解数据包的内容。
例如,使用命令tcpdump -X 可以显示数据包的十六进制和 ASCII 码形式。
5. -c 参数-c 参数用于指定截获的数据包数量。
它可以用来限制截获的数据包的数量,以便快速分析。
例如,使用命令 tcpdump -c 10 可以截获前 10 个数据包。
6. -w 参数-w 参数用于将截获的数据包保存到文件中,而不是直接输出到屏幕上。
它可以用来进行离线分析。
例如,使用命令tcpdump -w capture.pcap 可以将截获的数据包保存到名为capture.pcap 的文件中。
7. -r 参数-r 参数用于读取保存在文件中的数据包,并进行分析。
这个参数通常与-w 参数一起使用。
例如,使用命令tcpdump -r capture.pcap 可以读取capture.pcap 文件中的数据包,并进行分析。
名称 (NAME)tcpdump - 转储网络上的数据流总览 (SYNOPSIS)tcpdump [ -adeflnNOpqStvx ] [ -c count ] [ -F file ][ -i interface ] [ -r file ] [ -s snaplen ][ -T type ] [ -w file ] [ expression ]描述 (DESCRIPTION)Tcpdump打印出在某个网络界面上, 匹配布尔表达式expression的报头.对于 SunOS 的 nit 或 bpf 界面:要运行tcpdump ,你必须有/dev/nit或/dev/bpf*的读访问权限.对于 Solaris 的 dlpi:你必须有网络仿真设备 (network pseudo device), 如/dev/le 的读访问权限.对于 HP-UX 的 dlpi:你必须是 root, 或者把它安装成 root 的设置uid 程序. 对于 IRIX 的 snoop:你必须是 root, 或者把它安装成 root 的设置uid 程序. 对于Linux:你必须是 root, 或者把它安装成 root 的设置uid 程序.对于 Ultrix 和 Digital UNIX:一旦超级用户使用pfconfig(8) 开放了 promiscuous 操作模式 (promiscuous-mode), 任何用户都可以运行tcpdump.对于 BSD:你必须有/dev/bpf*的读访问权限.选项 (OPTIONS)-a试着把网络和广播地址转换成名称.-c当收到count报文后退出.-d把编译好的报文匹配模板 (packet-matching code) 翻译成可读形式, 传往标准输出, 然后退出.-dd把报文匹配模板 (packet-matching code) 以C程序片断的形式输出.-ddd把报文匹配模板 (packet-matching code) 以十进制数形式输出 (前面加上总数).-e每行都显示链路层报头.-f用数字形式显示 '外部的' 互联网地址, 而不是字符形式 (这个选项用来绕开脑壳坏光的 SUN 黄页服务器的问题 --- 一般说来它翻译外部网络数字地址的时候会长期挂起).-F把file的内容用作过滤表达式. 忽略命令行上的表达式.-i监听interface. 如果不指定接口, tcpdump在系统的接口清单中, 寻找号码最小, 已经配置好的接口 (loopback 除外). 选中的时候会中断连接.-l行缓冲标准输出. 可用于捕捉数据的同时查看数据. 例如,``tcpdump -l | tee dat'' or ``tcpdump -l > dat & tail -f dat''. -n别把地址转换成名字 (就是说, 主机地址, 端口号等)-N不显示主机名字中的域名部分. 例如, 如果使用这个选项, tcpdump只显示``nic'', 而不是 ``''.-O禁止运行报文匹配模板的优化器. 只有当你怀疑优化器有 bug 时才有用.-p禁止把接口置成 promiscuous 模式. 注意, 接口有可能因其他原因而处于promiscuous 模式; 因此, '-p' 不能作为 `ether host 或 ether broadcast' 的简写.-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 (远程过程调用 Remote Procedure Call), rtp (实时应用协议 Real-TimeApplications protocol), rtcp (实时应用控制协议 Real-Time Applicationscontrol protocol), vat (可视音频工具 Visual Audio Tool), 和wb (分布式白板distributed White Board).-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. 例如, `host foo', `net 128.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'.[`fddi' 实际上是 `ether' 的别名; 分析器把它们视为 ``用在指定网络接口上的数据链路层.'' FDDI 报头包含类似于以太协议的源目地址, 而且通常包含类似于以太协议的报文类型, 因此你可以过滤 FDDI 域, 就象分析以太协议一样. FDDI 报头也包含其他域, 但是你不能在过滤器表达式里显式描述.]作为上述的补充, 有一些特殊的 `原语' 关键字, 它们不同于上面的模式: gateway, broadcast, less, greater和数学表达式. 这些在后面有叙述.更复杂的过滤器表达式可以通过and, or和not连接原语来组建. 例如,`host foo and not port ftp and not port ftp-data'. 为了少敲点键, 可以忽略相同的修饰子. 例如, `tcp dst port ftp or ftp-data or domain' 实际上就是 `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'.允许的原语有: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 里有), 也可以是数字 (有关数字格式另见ethers(3N) ).ether src ehost如果报文的以太源地址是ehost, 则逻辑为真.ether host ehost如果报文的以太源地址或以太目的地址是ehost, 则逻辑为真.gateway host如果报文把host当做网关, 则逻辑为真. 也就是说, 报文的以太源或目的地址是host, 但是 IP 的源目地址都不是host. host必须是个主机名, 而且必须存在 /etc/hosts 和 /etc/ethers 中. (一个等价的表达式是ether host ehost and not host host对于host / ehost, 它既可以是名字, 也可以是数字.)dst net net如果报文的 IP 目的地址属于网络号net, 则逻辑为真. net既可以是名字(存在 /etc/networks 中), 也可以是网络号. (详见networks(4)).src net net如果报文的 IP 源地址属于网络号net, 则逻辑为真.net net如果报文的 IP 源地址或目的地址属于网络号net, 则逻辑为真.net net mask mask如果 IP 地址匹配指定网络掩码(netmask) 的net, 则逻辑为真. 本原语可以用src或dst修饰.net net/len如果 IP 地址匹配指定网络掩码的net, 则逻辑为真, 掩码的有效位宽为len. 本原语可以用src或dst修饰.dst port port如果报文是 ip/tcp 或 ip/udp, 并且目的端口是port, 则逻辑为真. port 是一个数字, 也可以是 /etc/services 中说明过的名字 (参看tcp(4P) 和udp(4P)). 如果使用名字, 则检查端口号和协议. 如果使用数字, 或者有二义的名字, 则只检查端口号 (例如, dst port 513将显示 tcp/login 的数据和udp/who 的数据, 而port domain将显示 tcp/domain 和 udp/domain 的数据). src port port如果报文的源端口号是port, 则逻辑为真.port port如果报文的源端口或目的端口是port, 则逻辑为真. 上述的任意一个端口表达式都可以用关键字tcp或udp做前缀, 就象:tcp src port port它只匹配源端口是port的 TCP 报文.less length如果报文的长度小于等于length, 则逻辑为真. 它等同于:len <= length.greater length如果报文的长度大于等于length, 则逻辑为真. 它等同于:len >= length.ip proto protocol如果报文是 IP 数据报(参见ip(4P)),其内容的协议类型是protocol, 则逻辑为真. Protocol可以是数字, 也可以是下列名称中的一个: icmp, igrp, udp, nd, 或tcp. 注意这些标识符tcp, udp, 和icmp也同样是关键字, 所以必须用反斜杠(\) 转义, 在 C-shell 中应该是 \ .ether broadcast如果报文是以太广播报文, 则逻辑为真. 关键字ether是可选的.ip broadcast如果报文是 IP广播报文, 则逻辑为真. Tcpdump 检查全0 和全1 广播约定, 并且检查本地的子网掩码.ether multicast如果报文是以太多目传送报文(multicast), 则逻辑为真. 关键字ether是可选的. 这实际上是 `ether[0] & 1 != 0' 的简写.ip multicast如果报文是 IP多目传送报文, 则逻辑为真.ether proto protocol如果报文协议属于以太类型的protocol, 则逻辑为真. Protocol可以是数字, 也可以是名字, 如ip, arp, 或rarp. 注意这些标识符也是关键字, 所以必须用反斜杠(\) 转义. [如果是 FDDI (例如, `fddi protocol arp'), 协议标识来自 802.2 逻辑链路控制(LLC)报头, 它通常位于 FDDI 报头的顶层. 当根据协议标识过滤报文时, Tcpdump假设所有的 FDDI 报文含有 LLC 报头, 而且LLC 报头用的是 SNAP 格式.]decnet src host如果 DECNET 的源地址是host, 则逻辑为真, 该主机地址的形式可能是``10.123'', 或者是 DECNET 主机名. [只有配置成运行 DECNET 的 Ultrix 系统支持 DECNET 主机名.]decnet dst host如果 DECNET 的目的地址是host, 则逻辑为真.decnet host host如果 DECNET 的源地址或目的地址是host, 则逻辑为真.ip, arp, rarp, decnet是:ether proto p的简写形式, 其中p为上述协议的一种.lat, moprc, mopdl是:ether proto p的简写形式, 其中p为上述协议的一种. 注意tcpdump目前不知道如何分析这些协议.tcp, udp, icmp是:ip proto p的简写形式, 其中p为上述协议的一种.expr relop expr如果这个关系成立, 则逻辑为真, 其中relop是 >, <, >=, <=, =, != 之一, expr是数学表达式, 由常整数(标准C语法形式), 普通的二进制运算符 [+, -, *, /, &, |], 一个长度运算符, 和指定的报文数据访问算符组成. 要访问报文内的数据, 使用下面的语法:proto [ expr : size ]Proto是ether, fddi, ip, arp, rarp, tcp, udp, or icmp之一, 同时也指出了下标操作的协议层. 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算符, 而不是并列放置.如果给出标识符, 但没给关键字, 那么暗指最近使用的关键字. 例如,not host vs and ace作为not host vs and host ace的简写形式, 不应该和not ( host vs or ace )混淆.表达式参数可以作为单个参数传给 tcpdump, 也可以作为复合参数, 后者更方便一些. 一般说来, 如果表达式包含 Shell 元字符(metacharacter), 传递单个括起来的参数要容易一些. 复合参数在被解析前用空格联接一起.示例 (EXAMPLES)显示所有进出sundown的报文:tcpdump host sundown显示helios和主机hot, ace之间的报文传送:tcpdump host helios and \( hot or ace \)显示ace和除了helios以外的所有主机的 IP报文:tcpdump ip host ace and not helios显示本地的主机和 Berkeley的主机之间的网络数据:tcpdump net ucb-ether显示所有通过网关snup的 ftp 报文 (注意这个表达式被单引号括起, 防止shell 解释园括弧):tcpdump 'gateway snup and (port ftp or ftp-data)'显示既不是来自本地主机, 也不是传往本地主机的网络数据 (如果你把网关通往某个其他网络, 这个做法将不会把数据发往你的本地网络).tcpdump ip and not net localnet显示每个 TCP会话的起始和结束报文 (SYN 和 FIN 报文), 而且会话方中有一个远程主机.tcpdump 'tcp[13] & 3 != 0 and not src and dst net localnet'显示经过网关snup中大于 576 字节的 IP 数据报:tcpdump 'gateway snup and ip[2:2] > 576'显示 IP 广播或多目传送的数据报, 这些报文不是通过以太网的广播或多目传送形式传送的:tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'显示所有不是回响请求/应答的 ICMP 报文 (也就是说, 不是 ping 报文):tcpdump 'icmp[0] != 8 and icmp[0] != 0"输出格式 (OUTPUT FORMAT)tcpdump的输出格式取决于协议. 下面的描述给出大多数格式的简要说明和范例.链路层报头 (Link Level Headers)如果给出 '-e' 选项就显示链路层报头. 在以太网上, 显示报文的源目地址, 协议和报文长度.在 FDDI 网络上, '-e' 选项导致tcpdump显示出 `帧控制(frame control)' 域, 源目地址和报文长度. (`帧控制' 域负责解释其余的报文. 普通报文 (比如说载有 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 (urgent pointer), W (window), A (ack), S (sequence number) 和 I (packet ID) 指明, 后跟一个变化量(+n or -n), 或另一个值(=n). 最后显示报文中的数据总和, 以及压缩报头的长度.例如, 下面一行显示了一个传出的压缩的 TCP 报文, 有一个隐含的连接标识; 确认(ack)的变化量是 6, 顺序号是 49, 报文ID 是 6; 有三个字节的数据和六个字节的压缩报头:O ctcp * A+6 S+49 I+6 3 (6)ARP/RARP 报文Arp/rarp 报文的输出显示请求类型及其参数. 输出格式倾向于能够自我解释.这里是一个简单的例子, 来自主机rtsg到主机csam的 'rlogin' 开始部分:arp who-has csam tell rtsgarp reply csam is-at CSAM第一行说明 rtsg 发出一个 arp 报文询问 internet 主机 csam 的以太网地址. Csam 用它的以太地址作应答 (这个例子中, 以太地址是大写的, internet 地址为小写).如果用 tcpdump -n 看上去要清楚一些:arp who-has 128.3.254.6 tell 128.3.254.68arp reply 128.3.254.6 is-at 02:07:01:00:01:c4如果用 tcpdump -e, 可以看到实际上第一个报文是广播, 第二个报文是点到点的:RTSG Broadcast 0806 64: arp who-has csam tell rtsgCSAM RTSG 0806 64: arp reply csam is-at CSAM这里第一个报文指出以太网源地址是 RTSG, 目的地址是以太网广播地址, 类型域为 16进制数 0806 (类型 ETHER_ARP), 报文全长 64 字节.TCP 报文(注意: 以下的描述中假设你熟悉 RFC-793 中说明的 TCP 协议, 如果你不了解这个协议, 无论是本文还是 tcpdump 都对你用处不大)一般说来 tcp 协议的输出格式是:src > dst: flags data-seqno ack window urgent optionsSrc和dst是源目IP地址和端口. Flags是 S (SYN), F (FIN), P (PUSH) 或 R (RST) 或单独的 `.'(无标志), 或者是它们的组合. Data-seqno说明了本报文中的数据在流序号中的位置 (见下例). Ack是在这条连接上信源机希望下一个接收的字节的流序号 (sequence number). Window是在这条连接上信源机接收缓冲区的字节大小. Urg 表明报文内是 `紧急(urgent)' 数据. Options是 tcp 可选报头, 用尖括号括起 (例如, <mss 1024>).Src, dst和flags肯定存在. 其他域依据报文的 tcp 报头内容, 只输出有必要的部分.下面是从主机rtsg rlogin 到主机csam的开始部分.rtsg.1023 > csam.login: S 768512:768512(0) win 4096 <mss 1024>csam.login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096 <mss 1024>rtsg.1023 > csam.login: . ack 1 win 4096rtsg.1023 > csam.login: P 1:2(1) ack 1 win 4096csam.login > rtsg.1023: . ack 2 win 4096rtsg.1023 > csam.login: P 2:21(19) ack 1 win 4096csam.login > rtsg.1023: P 1:2(1) ack 21 win 4077csam.login > rtsg.1023: P 2:3(1) ack 21 win 4077 urg 1csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1第一行是说从 rtsg 的 tcp 端口 1023 向 csam 的login端口发送报文. S 标志表明设置了SYN标志. 报文的流序号是 768512, 没有数据. (这个写成`first:last(nbytes)', 意思是 `从流序号first到last, 不包括last, 有nbytes字节的用户数据'.) 此时没有捎带确认(piggy-backed ack), 有效的接收窗口是 4096 字节, 有一个最大段大小(max-segment-size) 的选项, 请求设置 mss 为 1024 字节.Csam 用类似的形式应答, 只是增加了一个对 rtsg SYN 的捎带确认. 然后 Rtsg 确认 csam 的 SYN. `.' 意味着没有设置标志. 这个报文不包含数据, 因此也就没有数据的流序号. 注意这个确认流序号是一个小整数(1). 当 tcpdump 第一次发现一个tcp 会话时, 它显示报文携带的流序号. 在随后收到的报文里, 它显示当前报文和最初那个报文的流序号之差. 这意味着从第一个报文开始, 以后的流序号可以理解成数据流中的相对位移 as relative byte positions in the conversation's data stream (with the first data byte each direction being `1'). `-S' 选项能够改变这个特性, 直接显示原始的流序号.在第六行, rtsg 传给 csam 19 个字节的数据 (字节 2 到 20). 报文中设置了 PUSH 标志. 第七行 csam 表明它收到了 rtsg 的数据, 字节序号是 21, 但不包括第21个字节. 显然大多数数据在 socket 的缓冲区内, 因为 csam 的接收窗口收到的数据小于 19 个字节. 同时 csam 向 rtsg 发送了一个字节的数据. 第八和第九行显示csam 发送了两个字节的紧急数据到 rtsg.如果捕捉区设置的过小, 以至于 tcpdump 不能捕捉到完整的 TCP 报头, tcpdump 会尽可能的翻译已捕获的部分, 然后显示 ``[|tcp]'', 表明无法翻译其余部分. 如果报头包含一个伪造的选项 (one with a length that's either too small or beyond the end of the header), tcpdump 显示 ``[bad opt]'' 并且不再翻译其他选项部分(因为它不可能判断出从哪儿开始). 如果报头长度表明存在选项, 但是 IP 数据报长度不够, 不可能真的保存选项, tcpdump 就显示 ``[bad hdr length]''.UDP 报文UDP 格式就象这个 rwho 报文显示的:actinide.who > broadcast.who: udp 84就是说把一个 udp 数据报从主机actinide的who端口发送到broadcast, Internet 广播地址的who端口. 报文包含 84字节的用户数据.某些 UDP 服务能够识别出来(从源目端口号上), 因而显示出更高层的协议信息.特别是域名服务请求(RFC-1034/1035) 和 NFS 的 RPC 调用(RFC-1050).UDP 域名服务请求 (Name Server Requests)(注意: 以下的描述中假设你熟悉 RFC-1035 说明的域名服务协议. 如果你不熟悉这个协议, 下面的内容就象是天书.)域名服务请求的格式是src > dst: id op? flags qtype qclass name (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显示成 `[n a]', `[n n]' 或 `[n au]', 这里的n代表相应的数量. 如果在第二和第三字节中, 任何一个回答位(AA, RA 或 rcode) 或任何一个 `必须为零' 的位被置位,就显示 `[b2&3=x]', 这里的x是报头第二和第三字节的 16进制数.UDP 名字服务回答名字服务回答的格式是src > dst: id op rcode flags a/n/au type class data (len)helios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)helios.domain > h2opolo.1537: 2 NXDomain* 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) 的回答, 没有回答记录, 一个名字服务记录, 而且没有管理结构.`*' 表明设置了权威回答(authoritative answer). 由于没有回答记录, 这里就不显示 type, class 和 data.其他标志字符可以显示为 `-' (没有设置递归有效(RA)) 和 `|' (设置消息截短(TC)). 如果 `问题' 部分没有有效的内容, 就显示 `[n q]'.注意名字服务的询问和回答一般说来比较大, 68 字节的snaplen可能无法捕捉到足够的报文内容. 如果你的确在研究名字服务的情况, 可以使用 -s 选项增大捕捉缓冲区. `-s 128' 应该效果不错了.NFS 请求和响应Sun NFS (网络文件系统) 的请求和响应显示格式是:src.xid > dst.nfs: len op argssrc.nfs > dst.xid: reply stat len op resultssushi.6709 > wrl.nfs: 112 readlink fh 21,24/10.73165wrl.nfs > sushi.6709: reply ok 40 readlink "../var"sushi.201b > wrl.nfs:144 lookup fh 9,74/4096.6878 "xcolors"wrl.nfs > sushi.201b:reply ok 128 lookup fh 9,74/4134.3150在第一行, 主机sushi向wrl发送号码为6709的交易会话 (注意源主机后面的数字是交易号, 不是端口). 这项请求长 112 字节, 不包括 UDP 和 IP 报头. 在文件句柄 (fh) 21,24/10.731657119 上执行readlink (读取符号连接) 操作. (如果运气不错, 就象这种情况, 文件句柄可以依次翻译成主次设备号, i 节点号, 和事件号(generation number). ) Wrl回答 `ok' 和连接的内容.在第三行, sushi请求wrl在目录文件 9,74/4096.6878 中查找 `xcolors'. 注意数据的打印格式取决于操作类型. 格式应该是可以自我说明的.给出 -v (verbose) 选项可以显示附加信息. 例如:sushi.1372a > wrl.nfs:148 read fh 21,11/12.195 8192 bytes @ 24576wrl.nfs > sushi.1372a:reply ok 1472 read REG 100664 ids 417/0 sz 29388(-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, 否则很多细节无法显示. 试一试 `-s 192' 选项.NFS 应答报文没有明确标明 RPC 操作. 因此tcpdump保留有 ``近来的'' 请求记录, 根据交易号匹配应答报文. 如果应答报文没有相应的请求报文, 它就无法分析. KIP Appletalk (UDP 上的 DDP)Appletalk DDP 报文封装在 UDP 数据报中, 解包后按 DDP 报文转储 (也就是说, 忽略所有的 UDP 报头信息). 文件/etc/s用来把 appletalk 网络和节点号翻译成名字. 这个文件的行格式是number name1.254 ether16.1 icsd-net1.254.110 ace前两行给出了 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-lkup 190: "=:LaserWriter@*"jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250 techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186第一行是网络 icsd 的 112 主机在网络 jssmag 上的广播, 对名字 laserwriter做名字查询请求. 名字查询请求的 nbp 标识号是 190. 第二行显示的是对这个请求的回答 (注意它们有同样的标识号), 主机 jssmag.209 表示在它的 250 端口注册了一个 laserwriter 的资源, 名字是 "RM1140". 第三行是这个请求的其他回答,主机 techpit 的 186 端口有 laserwriter 注册的 "techpit".。