Пытался перехватить входящие DNS-запросы, раскручивая небольшой сервер udp, и в итоге пытался https://stackoverflow.com/a/16981944/9488865.
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Чтобы вывести QR, код операции, AA, TC и т. Д., Мы делаем:
DNS_QUERY_MESSAGE_HEADER = struct.Struct("!6H")
id, misc, qdcount, ancount, nscount, arcount = DNS_QUERY_MESSAGE_HEADER.unpack_from(message)
qr = (misc & 0x8000) != 0
opcode = (misc & 0x7800) >> 11
aa = (misc & 0x0400) != 0
tc = (misc & 0x200) != 0
rd = (misc & 0x100) != 0
ra = (misc & 0x80) != 0
z = (misc & 0x70) >> 4
rcode = misc & 0xF
Хотя Scapy делает все это очень просто (https://stackoverflow.com/a/6732956/9488865), Я хотел бы воспользоваться этой возможностью, чтобы узнать немного больше здесь.
Как я могу найти использование 0x8000, 0x7800, 0x0400 .. 0x70, 0xF и т. Д. Для выполнения этих операций AND? Как мы можем найти и зафиксировать эти значения?