libpcap数据包头结构有2个长度字段:
typedef struct pcaprec_hdr_s {
guint32 ts_sec; /* timestamp seconds */
guint32 ts_usec; /* timestamp microseconds */
guint32 incl_len; /* number of octets of packet saved in file */
guint32 orig_len; /* actual length of packet */
} pcaprec_hdr_t;
incl_len :实际捕获并保存在文件中的数据包数据的字节数。该值永远不会大于orig_len或全局标题的snaplen值。
orig_len :数据包捕获时在网络上显示的长度。如果incl_len和orig_len不同,实际保存的数据包大小受snaplen限制。
任何人都能告诉我两个长度字段之间有什么区别吗?我们完全保存了数据包然后两者有什么不同?
答案 0 :(得分:2)
阅读Wireshark wiki(http://wiki.wireshark.org/Development/LibpcapFileFormat)的文档并研究示例pcap文件,看起来incl_len和orig_len通常是相同的数量。它们唯一不同的地方是数据包的长度是否超过snaplen的大小,该大小是在文件的全局标题中指定的。
我只是在这里猜测,但我想snaplen指定了用于捕获的静态缓冲区的大小。如果数据包对于捕获缓冲区而言太大,则这是用于发信号通知该事实的格式的方法。 snaplen被记录为“通常”为65535,这对于大多数数据包来说足够大。但文档规定,用户可能会限制其大小。
答案 1 :(得分:0)
任何人都能告诉我两个长度字段之间有什么区别吗?我们完全保存了数据包然后两者有什么不同?
如果您要保存整个数据包,则2 不应不同。
但是,例如,如果您运行tcpdump或TShark或dumpcap或从命令行捕获Wireshark并使用“-s
n 指定一个小值“标记,或在Wireshark GUI中的”将每个数据包限制为[ n ]字节“选项中指定一个小值,然后libpcap / WinPcap将传递该值,并且只提供第一个 n 每个数据包的字节到程序,并且不会保存整个数据包。
有限的“快照长度”意味着您没有看到所有数据包数据,因此可能无法进行某些分析,但意味着操作系统中需要更少的内存来缓冲数据包(因此可能会丢弃更少的数据包),将数据包数据复制到应用程序需要的CPU带宽更少,如果应用程序正在保存数据包,则需要更少的磁盘带宽来保存数据包(这可能还会减少丢弃的数据包数量),并且需要更少的磁盘空间。保存的数据包。