我试图了解其tcpdump
工作原理并尝试读取 TCP 标头控制标志 SYN、ACK 等。
在网上研究之后,我了解到控制标志在偏移量 13 处可用,并且我需要使用 tcp[13],但是我无法理解如何计算这个值 13。
有人可以帮忙吗?
答案1
TCP[13] 是一个位(标志)数组。当它们设置为 1 时,表示启用;当它们设置为 0 时,表示禁用。
这些tcpdump
命令显示如何获取 TCP[13] 位的集合并进行逐位与运算以测试这些位是否已启用:
Show all URG packets:
# tcpdump 'tcp[13] & 32 != 0'
Show all ACK packets:
# tcpdump 'tcp[13] & 16 != 0'
Show all PSH packets:
# tcpdump 'tcp[13] & 8 != 0'
Show all RST packets:
# tcpdump 'tcp[13] & 4 != 0'
Show all SYN packets:
# tcpdump 'tcp[13] & 2 != 0'
Show all FIN packets:
# tcpdump 'tcp[13] & 1 != 0'
Show all SYN-ACK packets:
# tcpdump 'tcp[13] = 18
引用的 URL(见下文)中有此项,也对此进行了解释:
记住这些过滤器工作的原因。上面的过滤器找到这些不同的数据包是因为 tcp[13] 查看 TCP 标头中的偏移量 13,该数字表示字节内的位置,而 !=0 表示相关标志设置为 1,即打开。
TCP 报头
如果你看一下RFC 793 3.1以及这篇文章tcpdump 高级过滤器它变得更加明显。
TCP header
----------
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |C|E|U|A|P|R|S|F| |
| Offset| Res. |W|C|R|C|S|S|Y|I| Window |
| | |R|E|G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Matching any TCP traffic with a source port > 1024
# tcpdump -i eth1 'tcp[0:2] > 1024'
- Matching TCP traffic with particular flag combinations
The flags are defined in the 14th byte of the TCP header.
+-+-+-+-+-+-+-+-+
|C|E|U|A|P|R|S|F|
|W|C|R|C|S|S|Y|I|
|R|E|G|K|H|T|N|N|
+-+-+-+-+-+-+-+-+
笔记:这些是我们感兴趣的标志。
计算旗帜的位置
从顶部开始数字节(8 位),并将其编号为 0:
- 所以“源端口”&“目的端口”将组成字节 0、1、2 和 3。
- 下一行,“序列号”,将是4-7。
- “确认号码”将是字节8-11。
- “数据偏移”和“Res.”将是字节 12。
- 这将带您到第 13 个字节,此字节中的位是标志。
位顺序
我还要提到,存储在字节 13 中的数字的排序如下:
- 位 1 =鳍
- 位 2 =同步
- 位 4 =恢复时间
- 位 8 =聚苯乙烯磺酸钠
- 位 16 =确认
- 位 32 =乌拉圭