luogu#P10347. [THUSC 2019] 网络层协议数据处理
[THUSC 2019] 网络层协议数据处理
题目背景
百度对程序员来说最大的作用当然是测试网络的联通性,在处理完 ARP 包以后,芃芃兴奋地输入了 ping baidu.com
,然而并没有得到任何结果。咨询过杰哥以后,芃芃懂得了 ping 工具的工作原理,原来它使用了 ICMP 协议,工作在比数据链路层更高的网络层。他还发现,网络中也存在许多给他发送的 ping 报文,看来的确有很多人在关心他。为了不让他们失望,你决定帮芃芃回复这些请求。
题目描述
你需要根据《学习手册》中的相关知识,处理网络层的协议数据:在给定的流量片段中,有一些是对你的 ICMP Echo Request 报文(也就是说,请求的 IP 和 MAC 地址都是是你拥有的,并为 pcap
题面中的对应关系),请你正确地回复它们。你需要构造正确的 ICMP Echo Reply 报文,以及外层的 IP 分组头、以太网帧头尾,并将这些帧按照应答顺序依次写入输出文件中。本题中只对源地址与目的地址在同一个子网中的 ICMP Echo Request
报文进行响应,而不响应其他情况(例如源地址与目的地址不在同一个网络中、ARP 请求)。
我们保证,所有 ICMP Echo Request
报文在数据链路层和网络层都是单播发送的(也就是说不用考虑广播地址等情况,广播地址的定义见《学习手册》),请注意正确填写回复报文在这两层的源、目标地址。如果接收到的报文中含有数据负载,则你回复的报文中也需要原样携带这些负载,但不要携带链路层帧中超过 IP 包尺寸后的多余数据(请忽略 Wireshark 对这部分数据的解析)。特别地,本题对输出数据中片段的时间戳有额外的要求,设 ICMP Echo Request
的时间戳为 ,那么你回应的 ICMP Echo Response
的时间戳 应该满足 $\sec \times 10^6 + \text{us} = \sec_0 \times 10^6 + \text{us}_0 + 1$ 并且 ,数据保证 ,不保证上述加法不会溢出 32 位无符号整数。注意 Wireshark 界面上部显示的时间是相对于第一个以太网帧的时间戳的偏差。
输入格式
输入包含不超过 个流量片段,总大小不超过 字节。
输出格式
你的输出将与答案文件进行逐字节对比。请不要输出任何多余信息,以免导致不必要的失分。
提示
【子任务】
本题的各子任务规模与上一题相同。
【样例 1】
见题目附件 1.in/ans
。
【样例解释 1】
样例中输入数据是三个 ICMP Echo Request
,输出数据是三个对应的 ICMP Echo Reply
。
【提示】
请不要忘记前三题题面中与本题相关的内容,并注意 FCS 和 IP 校验和的计算和以太网帧的长度要求。