dcsimg

数据包捕获,第2部分-第9页

在O'Reilly的书中, 网络故障排除工具,您将学到所有关于如何使用tcpdump进行数据包捕获的方法。

 By 奥赖利出版社
第9页,共10页  |  返回第1页

1.4.2.4.3。数据包特征。

过滤器还可以基于数据包特征(例如数据包长度或特定字段的内容)进行设计。这些过滤器必须包含一个关系运算符。要使用长度,关键字 要么 更大的 用来。这是一个例子:

bsd1# tcpdump 更大的 200

此命令收集长度超过200个字节的数据包。

查看数据包的内部稍微复杂一点,因为您必须了解数据包标头的结构。但是,尽管有这种复杂性,或者也许是因为这种复杂性,但这项技术仍使您可以最大程度地控制捕获的内容。 (如果您负责使用需要在标头中指定偏移量的产品来创建防火墙,请练习 tcpdump 可能被证明是无价的。)

通用语法是 原型 [expr:size]。场 原型 指示要查看的标头- ip 对于IP标头 tcp TCP标头等等。的 expr 字段给出了从0开始索引的标头的偏移量。也就是说,标头中的第一个字节是数字0,第二个字节是数字1,依此类推。或者,您可以想到 expr 作为要跳过的标头中的字节数。的 尺寸 字段是可选的。它指定要使用的字节数,可以为1、2或4。

bsd1# tcpdump "ip [9] = 6" 

在第十个字节(协议字段)的IP标头中查找值6。请注意,必须用引号将其引起来。撇号或双引号都应该起作用,但是反引号将不起作用。

bsd1# tcpdump tcp

是等效命令,因为6是TCP的协议号。

此技术经常与掩码一起使用以选择特定的位。值应为十六进制。使用语法指定比较 & 然后是一点遮罩。下一个示例从以太网报头中提取第一个字节(即目标地址的第一个字节),提取低位,并确保该位不为0:[4]

[4]精明的读者会注意到,该测试可能更简洁地写为 =1 而不是 !=0。尽管对于本示例而言并不重要,但是使用第二种形式在某些情况下可以简化测试,这是常见的习惯用法。在下一条命令中,语法更简单,因为您正在测试以查看是否设置了多个位。

bsd1# tcpdump 'ether[0] & 1 != 0' 

这将匹配多播和广播数据包。

对于这两个示例,都有更好的匹配数据包的方法。对于更实际的示例,请考虑以下命令:

bsd1# tcpdump "tcp[13] & 0x03 != 0"

此过滤器跳过TCP标头中的前13个字节,提取标志字节。面具 0x03 选择第一和第二位,即FIN和SYN位。如果任一位置1,则捕获数据包。这将捕获用于TCP连接的设置或拆卸数据包。

试图将关系运算符与这些逻辑运算符混在一起是很诱人的。不幸的是,像 tcp src端口> 23 不行最好的思考方式是 tcp src端口 返回true或false值,而不是数字值,因此无法将其与数字进行比较。如果要查找源端口值大于23的所有TCP通信,则必须使用以下语法从标头中提取端口字段: “ tcp [0:2]& 0xffff > 0x0017".

本文最初于2001年11月13日发布
通过网络更新新闻获取最新消息