tcpdump
- 格式:docx
- 大小:116.06 KB
- 文档页数:64
tcpdump用法tcpdump是一个功能强大的网络分析工具,能够捕获网络上的数据包,用于网络故障排除、网络性能监控以及网络安全审计等目的。
它支持多种网络协议,支持文本输出和二进制输出。
本文将介绍tcpdump的使用方法,以及它的参数详解。
#### 一、基本用法tcpdump的基本用法非常简单:```tcpdump [options]```它默认以单个模式运行,在一次持续抓包过程中,一直以标准输出格式显示网络数据包,每条信息显示一个数据包信息,直到用户中断或者网络停止发包为止。
#### 二、抓包参数tcpdump参数繁多,但常用参数主要有以下几类:**1.滤参数*** -net据子网抓包,支持IPv4和IPv6,比如`-net192.168.1.0/24`* -host据网络主机抓包,支持IPv4和IPv6,比如`-host 192.168.1.1`* -port据端口号抓包,比如`-port 80`**2.示参数*** -X示数据包的十六进制与ASCII文本,通常用于检测网络攻击和病毒* -v示更详细的抓取信息,比如IP地址、端口号等* -vv示更详细的抓取信息,同时把协议中的详细信息也显示出来**3.能参数*** -r 以二进制文件的方式读取已保存的抓包数据,一般用于进行离线分析* -w 以二进制文件的方式将抓取的数据保存下来,方便以后分析* -c定抓包的数量,比如`-c 1000`表示只抓前1000条数据包 #### 三、高级用法tcpdump还支持一些高级参数,用于更加精确的抓包,主要有:**1.络接口*** -i定抓包的网络接口,比如`-i eth0`表示从eth0接口抓包 * -B定抓包的带宽,比如`-B 500K`表示最高抓取500K的数据 **2.滤表达式*** -e取数据的过滤表达式,比如`-e tcp[14:2]==0x0514`表示过滤TCP标志和序号为0x0514的数据包* -d取数据的过滤表达式,等效于-e参数**3.符编码*** -n取数据时,不解析DNS和hostname* -t 不显示时间戳* -S示源地址和目的地址* -c定抓取数据包个数* -q 以简单的形式显示,不显示协议头信息####、实战以抓取IP地址为192.168.1.1的80端口的HTTP请求为例,使用tcpdump命令如下:```tcpdump -i eth0 -nn -s 0 -XS host 192.168.1.1 and port 80```以上命令的含义为,从网卡eth0接口上抓取长度为0的数据包,目标地址为192.168.1.1,且端口号为80的数据包,并以十六进制与ASCII格式显示出来。
TCPDump是一个流行的网络数据包分析工具,它用来捕获和解析网络数据包。
在TCPDump中,我们经常会看到length字段,它表示捕获的数据包的长度。
但是,很多人对length字段的单位存在一定的困惑。
本文将详细介绍TCPDump中length字段的单位问题,帮助读者更好地理解和使用TCPDump工具。
一、TCPDump工具简介TCPDump是一个常用的网络数据包分析工具,它可以在Linux、Unix和Windows评台上运行,并且支持各种各样的协议。
TCPDump可以捕获网络数据包并以文本形式打印出来,用户可以通过TCPDump来分析网络流量、排查网络问题等。
二、TCPDump中的length字段在TCPDump的输出中,每个数据包都会显示其长度信息,例如:```10:01:12.xxx IP 192.168.1.2.1234 > 192.168.1.3.5678: Flags [P.], length 100```在上述例子中,length字段显示了捕获的数据包的长度。
然而,很多用户对length字段的单位存在疑惑。
三、TCPDump中length字段的单位实际上,在TCPDump中,length字段的单位是字节。
也就是说,length字段显示的数值代表了捕获的数据包的字节数。
这意味着,用户可以根据length字段的数值来判断数据包的大小,进而分析网络流量、监控网络性能等。
四、TCPDump中length字段的作用length字段是TCPDump中非常重要的一个字段,它可以帮助用户了解捕获的数据包的大小情况。
通过分析length字段,用户可以判断网络流量的大小、传输的数据量等,从而更好地进行网络优化、性能调优等工作。
五、使用TCPDump进行网络分析的注意事项在使用TCPDump进行网络分析时,用户需要注意以下几点:1. 多关注length字段:length字段可以帮助用户了解捕获的数据包的大小情况,因此在进行网络分析时,用户需要多关注length字段,从而更好地了解网络流量的特征。
tcpdump 筛选语法`tcpdump` 是一个常用的网络抓包工具,用于捕获和查看网络上的数据包。
它的筛选语法允许用户根据各种条件来过滤数据包。
以下是一些常用的 `tcpdump` 筛选语法:1. 基本筛选:`host <IP地址>`: 捕获到指定IP地址的数据包。
`net <IP地址/子网掩码>`: 捕获指定网络范围内的数据包。
`port <端口号>`: 捕获到指定端口的数据包。
`protocol <协议类型>`: 捕获指定协议类型的数据包,如TCP、UDP等。
2. 更复杂的筛选:`src <源IP地址>`: 捕获源IP地址为指定IP的数据包。
`dst <目的IP地址>`: 捕获目的IP地址为指定IP的数据包。
`<协议类型> and <协议类型>`: 结合多个协议类型进行筛选。
`not <条件>`: 排除满足指定条件的数据包。
3. 其他:`icmp[icmptype] <ICMP类型>`: 捕获特定类型的ICMP数据包。
`tcp[tcpflags] <TCP标志位>`: 捕获具有特定TCP标志位的数据包。
`<时间范围>`: 使用时间范围进行筛选,如 `-tttt` 显示时间戳。
4. 表达式:可以使用逻辑运算符如`and`, `or`, 和 `not` 来组合多个条件。
5. 过滤特定协议:例如,要捕获所有HTTP请求和响应,你可以使用:```csstcpdump port 80 and tcp[tcpflags] & (tcp-syntcp-ack) != 0```6. 过滤特定MAC地址:使用`ether`关键字:```csstcpdump ether host <MAC地址>```7. 过滤特定IP地址或子网:使用`ip`关键字:```csstcpdump ip host <IP地址> or ip net <子网掩码>```8. 过滤特定端口:除了使用`port`关键字,还可以使用服务名称:```csstcpdump ftp or http or telnet or dns```9. 基于时间的筛选:使用`-tttt`选项可以显示时间戳,然后结合时间范围进行筛选:```csstcpdump -tttt "time > '开始时间' and time < '结束时间'"```10. 基于大小筛选:例如,要筛选大于100字节的数据包:```csstcpdump greater 100```11. 其他高级选项:查看`man tcpdump`以获取更多详细信息和高级功能。
TCPDump是一个开源的网络分析工具,可以用来捕获、分析和显示网络数据包。
它支持在命令行中使用不同的过滤器语法,以便用户可以根据特定的条件来捕获所需的数据包。
本文将针对TCPDump的filter语法进行详细介绍,包括语法规则、常用过滤条件和实际应用。
一、filter语法规则1. 过滤器的基本结构过滤器的基本结构为:tcpdump [expression]其中expression表示过滤条件,可以根据需要进行自定义设置。
2. 逻辑连接词过滤条件可以通过逻辑连接词进行组合,常见的逻辑连接词包括:- and:表示并且的关系- or:表示或者的关系- not:表示取反的关系通过逻辑连接词的组合,可以实现更加复杂的过滤条件。
3. 过滤条件的格式过滤条件的格式可以分为三种:- 主机:表示指定主机的数据包- 网络:表示指定网络的数据包- 端口:表示指定端口的数据包在实际使用中,可以根据需要进行灵活组合,以满足具体的网络分析需求。
二、常用过滤条件1. 根据主机进行过滤可以使用主机IP位置区域进行过滤,格式为:host [IP位置区域]要捕获IP位置区域为192.168.0.1的主机发送和接收的数据包,可以使用如下过滤条件:tcpdump host 192.168.0.12. 根据网络进行过滤可以使用网络位置区域进行过滤,格式为:net [网络位置区域]要捕获网络位置区域为192.168.0.0/24的网络发送和接收的数据包,可以使用如下过滤条件:tcpdump net 192.168.0.0/243. 根据端口进行过滤可以使用端口号进行过滤,格式为:port [端口号]要捕获目标端口为80的数据包,可以使用如下过滤条件:tcpdump port 804. 组合使用过滤条件可以组合使用主机、网络和端口的过滤条件,以满足更加复杂的网络分析需求。
要捕获主机IP为192.168.0.1,访问目标端口为80的数据包,可以使用如下过滤条件:tcpdump host 192.168.0.1 and port 80三、实际应用示例1. 捕获特定主机的数据包假设需要捕获IP位置区域为192.168.0.1的主机发送和接收的数据包,可以使用如下命令:tcpdump host 192.168.0.12. 捕获特定网络的数据包假设需要捕获网络位置区域为192.168.0.0/24的网络发送和接收的数据包,可以使用如下命令:tcpdump net 192.168.0.0/243. 捕获特定端口的数据包假设需要捕获目标端口为80的数据包,可以使用如下命令:tcpdump port 804. 组合使用过滤条件假设需要捕获主机IP为192.168.0.1,访问目标端口为80的数据包,可以使用如下命令:tcpdump host 192.168.0.1 and port 80通过以上实际应用示例,可以更加直观地理解TCPDump filter语法的具体使用方法。
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这个工具,帮助我们分析网络流量,排查网络问题。
tcpdump过滤规则Tcpdump是一个网络抓包工具,它能够监视和分析网络上的数据流量。
为了提高效率,Tcpdump提供了一种过滤规则,可以指定仅捕获用户感兴趣的数据包。
本文将详细介绍Tcpdump过滤规则的使用方法,并提供一些例子来帮助读者更好地理解。
第一步:了解基本过滤规则Tcpdump的过滤规则基于Berkley Packet Filter (BPF)语法,并支持多种条件和操作符。
要使用Tcpdump的过滤规则,我们首先需要了解一些基本的过滤规则语法:1. 主机过滤规则a. host <ip_address>: 指定IP地址作为源地址或目的地址来过滤数据包。
b. src <ip_address>: 指定IP地址作为源地址来过滤数据包。
c. dst <ip_address>: 指定IP地址作为目的地址来过滤数据包。
2. 端口过滤规则a. port <port_number>: 指定端口号来过滤数据包。
b. src port <port_number>: 指定源端口号来过滤数据包。
c. dst port <port_number>: 指定目的端口号来过滤数据包。
3. 协议过滤规则a. tcp: 只捕获TCP数据包。
b. udp: 只捕获UDP数据包。
c. icmp: 只捕获ICMP数据包。
第二步:应用过滤规则现在我们已经了解了Tcpdump的基本过滤规则,让我们深入了解如何应用这些规则来捕获特定的数据包。
1. 捕获某个主机的所有流量要捕获某个主机的所有流量,我们可以使用主机过滤规则。
例如,要捕获IP地址为192.168.0.1的主机的所有流量,我们可以使用以下命令:tcpdump host 192.168.0.12. 捕获特定端口的数据包要捕获特定端口的数据包,我们可以使用端口过滤规则。
例如,要捕获目的端口号为80的所有数据包,我们可以使用以下命令:tcpdump dst port 803. 捕获特定协议的数据包要捕获特定协议的数据包,我们可以使用协议过滤规则。
使用tcpdump命令捕获和分析网络数据包在网络中,数据包是网络通信的基本单位。
了解和分析网络数据包的内容和结构,对于网络管理员和安全专家来说是非常重要的。
tcpdump是一款功能强大的网络数据包分析工具,它能够捕获网络数据包并提供详细的分析信息。
本文将介绍如何使用tcpdump命令捕获和分析网络数据包。
一、安装tcpdump在开始使用tcpdump之前,首先需要在你的计算机上安装tcpdump。
tcpdump在大多数Linux和UNIX系统中都是默认安装的,可以使用以下命令来检查是否已经安装了tcpdump:```tcpdump -v```如果已经安装,则会显示tcpdump的版本信息;如果未安装,则需要使用以下命令来安装tcpdump:```sudo apt-get install tcpdump```二、捕获网络数据包使用tcpdump捕获网络数据包非常简单,只需在终端中输入以下命令:```sudo tcpdump```该命令将会开始捕获所有经过计算机网络接口的数据包。
然而,这样会产生大量的输出信息,不便于分析。
为了提高分析效率,可以使用一些选项来限制捕获的数据包范围。
1. 指定网络接口如果你有多个网络接口,可以使用-i选项指定要捕获的网络接口。
例如,要捕获eth0接口的数据包,可以使用以下命令:```sudo tcpdump -i eth0```2. 指定捕获数量使用-c选项可以指定要捕获的数据包数量。
例如,要只捕获10个数据包,可以使用以下命令:```sudo tcpdump -c 10```3. 指定捕获过滤器可以使用过滤器来指定要捕获的数据包类型。
例如,要只捕获HTTP协议的数据包,可以使用以下命令:```sudo tcpdump port 80```以上命令将只捕获目标端口为80的数据包。
三、分析网络数据包捕获到网络数据包后,可以使用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详解简介:tcpdump,就是:dump the traffic on a network,根据使⽤者的定义对⽹络上的数据包进⾏截获的包分析⼯具。
⼀个No-GUI的抓包分析⼯具。
tcpdump,可以将⽹络中传送的数据包的“头”完全截获下来提供分析。
它⽀持针对⽹络层、协议、主机、⽹络或端⼝的过滤,并提供and、or、not等逻辑语句来帮助你去掉⽆⽤的信息。
Linux已经⾃动安装,可直接使⽤。
概要:tcpdump采⽤命令⾏⽅式,它的命令格式为:tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ][ -c count ] [ -C file_size ][ -E spi@ipaddr algo:secret,... ][ -F file ] [ -G rotate_seconds ] [ -i interface ][ --immediate-mode ] [ -j tstamp_type ] [ -m module ][ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ][ -r file ] [ -s snaplen ] [ -T type ] [ --version ][ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ][ -z postrotate-command ] [ -Z user ][ --time-stamp-precision=tstamp_precision ][ expression ]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 ]-A 以ASCII码⽅式显⽰每⼀个数据包(不会显⽰数据包中链路层头部信息). 在抓取包含⽹页数据的数据包时, 可⽅便查看数据(nt: 即Handy for capturing web pages).-b 使⽤ASDOT表⽰法在BGP数据包中打印AS号,⽽不是ASPLAIN表⽰法-B buffer_size--buffer-size=buffer_size将操作系统捕获缓冲区⼤⼩设置为buffer_size,单位为KiB(1024字节)-c counttcpdump将在接受到count个数据包后退出.-C file-size (nt: 此选项⽤于配合-w file 选项使⽤)该选项使得tcpdump 在把原始数据包直接保存到⽂件中之前, 检查此⽂件⼤⼩是否超过file-size. 如果超过了, 将关闭此⽂件,另创⼀个⽂件继续⽤于原始数据包的记录. 新创建的⽂件名与-w 选项指定的⽂件名⼀致, 但⽂件名后多了⼀个数字.该数字会-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 字符串⽅式表达该选项中ESP 的定义遵循RFC2406, ⽽不是 RFC1827. 并且, 此选项只是⽤来调试的, 不推荐以真实密钥(secret)来使⽤该选项, 因为这样不安全: 在命令⾏中输⼊的secret 可以被其他⼈通过ps 等命令查看到.除了以上的语法格式(nt: 指spi@ipaddr algo:secret), 还可以在后⾯添加⼀个语法输⼊⽂件名字供tcpdump 使⽤(nt:即把spi@ipaddr algo:secret,... 中...换成⼀个语法⽂件名). 此⽂件在接受到第⼀个ESP 包时会打开此⽂件, 所以最好此时把赋予tcp -f 显⽰外部的IPv4 地址时(nt: foreign IPv4 addresses, 可理解为, ⾮本机ip地址), 采⽤数字⽅式⽽不是名字.(此选项是⽤来对付Sun公司的NIS服务器的缺陷(nt: NIS, ⽹络信息服务, tcpdump 显⽰外部地址的名字时会⽤到她提供的名称服务): 此NIS服务由于对外部(foreign)IPv4地址的测试需要⽤到本地⽹络接⼝(nt: tcpdump 抓包时⽤到的接⼝)及其IPv4 地址和⽹络掩码. 如果此地址或⽹络掩码不可⽤, 或者此接⼝根本就没有设置相应⽹络地址和⽹络掩码(nt: linux 下的 'any' ⽹络接⼝就不需要设置地-F file使⽤file ⽂件作为过滤条件表达式的输⼊, 此时命令⾏上的输⼊将被忽略.-i interface指定tcpdump 需要监听的接⼝. 如果没有指定, tcpdump 会从系统接⼝列表中搜寻编号最⼩的已配置好的接⼝(不包括 loopback 接⼝).⼀但找到第⼀个符合条件的接⼝, 搜寻马上结束.在采⽤2.2版本或之后版本内核的Linux 操作系统上, 'any' 这个虚拟⽹络接⼝可被⽤来接收所有⽹络接⼝上的数据包(nt: 这会包括⽬的是该⽹络接⼝的, 也包括⽬的不是该⽹络接⼝的). 需要注意的是如果真实⽹络接⼝不能⼯作在'混杂'模式(promiscuou 如果 -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)协议数据包的抓取. 具此选项可多次使⽤, 从⽽为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: 前者表⽰只匹配以太⽹地址为ho -q 快速(也许⽤'安静'更好?)打印输出. 即打印很少的协议相关信息, 从⽽输出⾏都⽐较简短.-R 设定tcpdump 对 ESP/AH 数据包的解析按照 RFC1825⽽不是RFC1829(nt: AH, 认证头, ESP,安全负载封装, 这两者会⽤在IP包的安全传输机制中). 如果此选项被设置, tcpdump 将不会打印出'禁⽌中继'域(nt: relay prevention field). 另外,由于ES-r file从⽂件file 中读取包数据. 如果file 字段为 '-' 符号, 则tcpdump 会从标准输⼊中读取包数据.-S 打印TCP 数据包的顺序号时, 使⽤绝对的顺序号, ⽽不是相对的顺序号.(nt: 相对顺序号可理解为, 相对第⼀个TCP 包顺序号的差距,⽐如, 接受⽅收到第⼀个数据包的绝对顺序号为232323, 对于后来接收到的第2个,第3个数据包, tcpdump会打印其序-s snaplen设置tcpdump的数据包抓取长度为snaplen, 如果不设置默认将会是68字节(⽽⽀持⽹络接⼝分接头(nt: NIT, 上⽂已有描述,可搜索'⽹络接⼝分接头'关键字找到那⾥)的SunOS系列操作系统中默认的也是最⼩值是96).68字节对于IP, ICMP(nt: Internet C -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 这么长,并-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 的取值未知, 需补充)命令实例:⼀、默认启动tcpdump:直接启动tcpdump将监视第⼀个⽹络接⼝上所有流过的数据包。
tcpdump连续抓包脚本(可以⾃动将dump分开存储)tcpdump是Linux下最常⽤的抓包⼯具了。
不过往往抓着抓着就忘了时间,导致整个dump⽂件有⼏GB⼤,根本⽆法⽤软件分析。
当然可以⽤⼯具分割dump⽂件,不过那⼜要耗⼀番功付。
tcpdump⾃带的-C参数是可以抓到⼀定数据包后停⽌抓包,不过怎么⽤怎么不顺⼿,于是⾃⼰写了个抓包脚本。
Shell⽤的不熟,只能写个最简单的。
原理是外⾯套⼀个循环,利⽤⾃带的-C参数,将⼀定数量数据包存成⼀个⽂件,然后给加个后缀_0 _1 ...看代码:#!/bin/bashexport TcpDump=tcpdumpexport SliPackeLen=68export SliptCapPacket=500000if [ $# -ne 2 ] && [ $# -ne 3 ]thenecho "Usage: $0 <file> <CapCount> <expression>"elsefor ((iLoop=0; iLoop<$2; iLoop++))doecho ""echo "> Capture $1_$iLoop.dmp($SliptCapFile) in $(($iLoop+1))/$2 files"echo "$TcpDump -i eth1 -s $SliPackeLen -c $SliptCapPacket -w $1_$iLoop.dmp $3"$TcpDump -i eth1 -s $SliPackeLen -c $SliptCapPacket -w $1_$iLoop.dmp $3donefiecho ""export SliPackeLen=68 定义只抓数据包头的68字节export SliptCapPacket=500000 满50W数据包就新建⼀个⽂件给脚本个名字叫z-dump_68_50w.sh,以后就可以⽤:./z-dump_68_50w.sh test3 "host 192.168.0.12 and not udp"来抓包了。
以下将给出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个包。
3.将抓到包写入文件中(-w选项)使用-w选项,我们可将抓包记录到一个指定文件中,以供后续分析linux:/tmp/lx # tcpdump -w 20120606.pcap -i eth0tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size96 bytes75 packets captured150 packets received by filter0 packets dropped by kernel应当保存为.pcap后缀的文件,方便我们使用wireshark等工具读取分析。
4.读取tcpdump保存文件(-r选项)对于保存的抓包文件,我们可以使用-r选项进行读取:linux:/tmp/lx # tcpdump -r 20120606.pcapreading from file 20120606.pcap, link-type EN10MB (Ethernet)11:01:57.392907 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 1210446405:1210446457(52) ack 2583119957 win 1286411:01:57.392917 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 52:168(116) ack 1 win 1286411:01:57.393649 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: .ack 52 win 653275.抓包时不进行域名解析(-n选项)默认情况下,tcpdump抓包结果中将进行域名解析,显示的是域名地址而非ip地址,使用-n选项,可指定显示ip地址。
6.增加抓包时间戳(-tttt选项)使用-tttt选项,抓包结果中将包含抓包日期:linux:/tmp/lx # tcpdump -n -tttt -i eth02012-06-0611:14:59.539736 IP 10.71.171.140.22 > 10.70.121.95.1787: P 1:53(52) ack 100 win 75042012-06-0611:14:59.539754 IP 10.71.171.140.22 > 10.70.121.95.1787: P 53:105(52) ack 100 win 75042012-06-0611:14:59.539770 IP 10.71.171.140.22 > 10.70.121.95.1787: P 105:157(52) ack 100 win 75047.指定抓包的协议类型我们可以只抓某种协议的包,tcpdump支持指定以下协议:ip,ip6,arp,tcp,udp,wlan等。
以下例子只抓取arp协议的包:linux:/tmp/lx # tcpdump -i eth0 arptcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 96bytes 11:22:26.948656 arp who-has 10.10.1.30 tell 10.10.1.2611:22:27.017406 arp who-has 10.10.1.30 tell 10.10.1.2611:22:27.078803 arp who-has 10.10.1.30 tell 10.10.1.268.指定抓包端口如果想要对某个特定的端口抓包,可以通过以下命令:linux:/tmp/lx # tcpdump -i eth0 port 22tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 96bytes 11:41:04.387547 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: .ack 1216136825 win 6475111:41:04.387891 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 1:233(232) ack 0 win 1608011:41:04.398973 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: P 0:52(52) ack 233 win 64519下面的例子全是以抓取eth0接口为例,如果不加”-i eth0”是表示抓取所有的接口包括lo。
1、抓取包含10.10.10.122的数据包# tcpdump -i eth0 -vnn host 10.10.10.1222、抓取包含10.10.10.0/24网段的数据包# tcpdump -i eth0 -vnn net 10.10.10.0/243、抓取包含端口22的数据包# tcpdump -i eth0 -vnn port 224、抓取udp协议的数据包# tcpdump -i eth0 -vnn udp5、抓取icmp协议的数据包# tcpdump -i eth0 -vnn icmp6、抓取arp协议的数据包# tcpdump -i eth0 -vnn arp7、抓取ip协议的数据包# tcpdump -i eth0 -vnn ip8、抓取源ip是10.10.10.122数据包。
# tcpdump -i eth0 -vnn src host 10.10.10.1229、抓取目的ip是10.10.10.122数据包# tcpdump -i eth0 -vnn dst host 10.10.10.12210、抓取源端口是22的数据包# tcpdump -i eth0 -vnn src port 2211、抓取源ip是10.10.10.253且目的ip是22的数据包# tcpdump -i eth0 -vnn src host 10.10.10.253 and dst port 2212、抓取源ip是10.10.10.122或者包含端口是22的数据包# tcpdump -i eth0 -vnn src host 10.10.10.122 or port 2213、抓取源ip是10.10.10.122且端口不是22的数据包[root@ ftp]# tcpdump -i eth0 -vnn src host 10.10.10.122 and not port 2214、抓取源ip是10.10.10.2且目的端口是22,或源ip是10.10.10.65且目的端口是80的数据包。
# tcpdump -i eth0 -vnn \( src host 10.10.10.2 and dst port 22 \) or \( src host 10.10.10.65 and dst port 80 \)15、抓取源ip是10.10.10.59且目的端口是22,或源ip是10.10.10.68且目的端口是80的数据包。
[root@localhost ~]# tcpdump -i eth0 -vnn 'src host 10.10.10.59 and dst port 22' or ' src host 10.10.10.68 and dst port 80 '16、把抓取的数据包记录存到/tmp/fill文件中,当抓取100个数据包后就退出程序。