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