#P10347. [THUSC 2019] 网络层协议数据处理

[THUSC 2019] 网络层协议数据处理

Description

你需要根据《学习手册》中的相关知识,处理网络层的协议数据:在给定的流量片段中,有一些是对你的 ICMP Echo Request 报文(也就是说,请求的 IP 和 MAC 地址都是是你拥有的,并为 pcap 题面中的对应关系),请你正确地回复它们。你需要构造正确的 ICMP Echo Reply 报文,以及外层的 IP 分组头、以太网帧头尾,并将这些帧按照应答顺序依次写入输出文件中。本题中只对源地址与目的地址在同一个子网中的 ICMP Echo Request 报文进行响应,而不响应其他情况(例如源地址与目的地址不在同一个网络中、ARP 请求)。

我们保证,所有 ICMP Echo Request 报文在数据链路层和网络层都是单播发送的(也就是说不用考虑广播地址等情况,广播地址的定义见《学习手册》),请注意正确填写回复报文在这两层的源、目标地址。如果接收到的报文中含有数据负载,则你回复的报文中也需要原样携带这些负载,但不要携带链路层帧中超过 IP 包尺寸后的多余数据(请忽略 Wireshark 对这部分数据的解析)。特别地,本题对输出数据中片段的时间戳有额外的要求,设 ICMP Echo Request 的时间戳为 (sec0,us0)(\sec_0, \text{us}_0),那么你回应的 ICMP Echo Response 的时间戳 (sec,us)(\sec, \text{us}) 应该满足 $\sec \times 10^6 + \text{us} = \sec_0 \times 10^6 + \text{us}_0 + 1$ 并且 0us<1060 \le \text{us} < 10^6,数据保证 us0<106,sec<232\text{us}_0 < 10^6, \sec < 2^{32},不保证上述加法不会溢出 32 位无符号整数。注意 Wireshark 界面上部显示的时间是相对于第一个以太网帧的时间戳的偏差。

Input Format

输入包含不超过 nn 个流量片段,总大小不超过 mm 字节。

Output Format

你的输出将与答案文件进行逐字节对比。请不要输出任何多余信息,以免导致不必要的失分。

Hint

【子任务】

本题的各子任务规模与上一题相同。

【样例 1】

见题目附件 1.in/ans

【样例解释 1】

样例中输入数据是三个 ICMP Echo Request ,输出数据是三个对应的 ICMP Echo Reply

【提示】

请不要忘记前三题题面中与本题相关的内容,并注意 FCS 和 IP 校验和的计算和以太网帧的长度要求。