我正在尝试创建一个protobuf类,它可以更有效地流式传输使用tcpdump捕获的dnspackes。
我想知道这个库中提供的所有可能字段的类型:
DNSPacket Fields:
QUERYID
QR
OPCODE
RCODE
QUESTION
QNAME
QTYPE
ANSWER
AUTHORITY
ADDITIONAL
Packet Fields:
TIMESTAMP
TIMESTAMP_USEC
TIMESTAMP_MICROS
TTL
IP_VERSION
IP_HEADER_LENGTH
IP_FLAGS_DF
IP_FLAGS_MF
IPV6_FLAGS_M
FRAGMENT_OFFSET
FRAGMENT
LAST_FRAGMENT
PROTOCOL
SRC
DST
ID
SRC_PORT
DST_PORT
TCP_HEADER_LENGTH
TCP_SEQ
TCP_ACK
LEN
UDPSUM
UDP_LENGTH
TCP_FLAG_NS
TCP_FLAG_CWR
TCP_FLAG_ECE
TCP_FLAG_URG
TCP_FLAG_ACK
TCP_FLAG_PSH
TCP_FLAG_RST
TCP_FLAG_SYN
TCP_FLAG_FIN
/*Not sure bout these two*/
REASSEMBLED_TCP_FRAGMENTS
REASSEMBLED_DATAGRAM_FRAGMENTS
我的应用程序在scala中,我尝试对捕获的一些数据包进行简单的反射,但是许多字段都是空的,这是没有帮助的。
这个库可以在github上找到
有没有一个简单的方法可以得到所有这些字段的类型(以编程方式或通过文本源)
谢谢,rds
1条答案
按热度按时间qhhrdooz1#
我用最直接的方式来处理这个问题。
我决定使用大量的数据包来解决这个问题,使用wireshark捕获了大约100000个dns数据包,然后将捕获保存为
.pcap
文件。然后,我对该文件运行了以下命令:
本质上,它为每个字段名检查一个值,然后也检查该值的类。每次更新列表中相应的空间以反映字段(不太优雅,但它以合理的方式获得结果)。此外,可以方便地查看哪些字段是公共的,哪些字段不是。
结果如下:
有三个字段仍然出现0次,因此它们的类类型仍然未知:
ipv6_flags_m
,last_fragment
,和reassembled_datagram_fragments
视为ipv6_flags_m
是一个标志,它很可能是一个布尔值,我假设它是留下两个字段的。由于100000个数据包中没有出现这些字段,因此我认为这些字段无关紧要,并将它们从列表中完全删除。