我Ubuntu Xenial
想使用tcpdump
RCODe 错误(ServFail、NXDomain 等)来过滤 DNS 响应。所以除了“0”之外的每个 RCODE。
所以我必须使用基于 UDP 数据包中第 11 个字节的过滤器。 4 个低位包含 RCODE。我想测试该值是否不同于 0。因此我左移 4 位以仅获取这 4 个低位。
该命令不起作用:
tcpdump 端口 53 和 'udp[11] << 4 > 0'
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 14:07:04.148693 IP ns-cache0.oleane.net.domain > 192.168.151.53.50372: 17799 2/0/0 CNAME video-stats.l.google.com., A 216.58.204.142 (82) 14:07:04.150768 IP ns-cache0.oleane.net.domain > 192.168.151.53.50372: 39389 2/0/0 CNAME video-stats.l.google.com., AAAA 2a00:1450:4007:812::200e (94) 14:07:04.150798 IP ns-cache0.oleane.net.domain > 192.168.151.53.60464: 60219 NXDomain* 0/1/0 (104) 14:07:04.152703 IP ns-cache0.oleane.net.domain > 192.168.151.53.40235: 3472 1/0/0 PTR ns-cache0.oleane.net. (75)
我还收到 NoError DNS 响应...
但使用这个命令是有效的:
tcpdump 端口 53 和“udp[11]&0x0F > 0”
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 14:07:42.014626 IP ns-cache0.oleane.net.domain > 192.168.151.53.54270: 44447 NXDomain 0/1/1 (109) 14:07:42.016611 IP ns-cache0.oleane.net.domain > 192.168.151.53.41840: 57750 NXDomain* 0/1/0 (104)
为什么左移不起作用?
答案1
没有指定在 8 位寄存器中执行左移,并且高位被丢弃。 (事实上,移位可能使用机器具有的任何本机大小的寄存器,例如 32 位或 64 位)。
因此,不要使用左移来尝试掩盖值......