sca*_*man 5 c ip network-programming pcap
我必须做一个嗅探器作为安全课程的任务.我正在使用C和pcap库.我把一切都运行得很好(因为我从互联网上获得了代码并改变了它).但我对代码有一些疑问.
u_int ip_len = (ih->ver_ihl & 0xf) * 4;
Run Code Online (Sandbox Code Playgroud)
ih是类型ip_header,并且它当前指向数据包中的IP标头.
ver_ihl给出了IP的版本.
我无法弄清楚是什么:& 0xf) * 4;
& 是按位与运算符,在本例中,您将 ver_ihl 与 0xf 进行与运算,其效果是清除除最低有效位 4 之外的所有位
0xff & 0x0f = 0x0f
ver_ihl 定义为前 4 位 = 版本 + 第二个 4 = 互联网标头长度。and 运算删除版本数据,仅留下长度数据。长度记录为 32 位字的计数,因此 *4 将 ip_len 转换为标头中的字节数
回复您的评论:
按位与操作数中的相应位。当你和任何带有 0 的东西时,它都会变成 0,而任何带有 1 的东西都保持不变。
0xf = 0x0f = 二进制 0000 1111
因此,当您将 0x0f 与任何内容一起使用时,前 4 位将设置为 0(因为您将它们与 0 进行与运算),而最后 4 位则保持与另一个操作数相同(就像您将它们与 1 进行与运算一样)。这是一种称为位掩码的常见技术。
http://en.wikipedia.org/wiki/Bitwise_operation#AND
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |