📜  门| GATE-IT-2004 |问题 12(1)

📅  最后修改于: 2023-12-03 14:58:32.782000             🧑  作者: Mango

门 GATE-IT-2004 问题 12

本题是一个简单的计算机网络问题,需要我们对网络中的数据包进行处理和转换。

问题描述

在一台路由器上,收到一个长度为 $n$ 的数据包,其源 IP 地址是 $A$,目的 IP 地址是 $B$。路由器上有两个接口,分别连接到内部网络和外部网络。路由器需要判断该数据包是从内部网络发出,还是从外部网络流入。

数据包的格式如下:各部分均为 16 进制数

| 起始位置 | 长度 | 描述 | | -------- | ---- | ------------ | | 0 | 1 | 版本和头长度 | | 1 | 1 | 区分服务 | | 2 | 2 | 总长度 | | 4 | 2 | 标识 | | 6 | 2 | 标志和偏移 | | 8 | 1 | 生存时间 | | 9 | 1 | 协议 | | 10 | 2 | 首部检验和 | | 12 | 4 | 源 IP 地址 | | 16 | 4 | 目的 IP 地址 |

其中,版本和头长度、区分服务、总长度、标识、标志和偏移、生存时间、协议和首部检验和是 IP 协议头部中的字段,其余字段均属于数据包的载荷。

现在,请你编写一个程序,根据输入的数据包,判断该数据包的方向,并将其转发到正确的接口。

输入格式
  • 第一行一个正整数 $n$,表示数据包的长度($20\leq n\leq 1500$);
  • 第二行一个字符串,表示该数据包的 16 进制字符串,长度为 $2n$。
输出格式

如果该数据包应从内部网络发出(即源 IP 地址以 10.X.X.X 形式给出),则输出字符串 from_in,否则输出字符串 from_out

如果输出结果错误,请检查你的程序逻辑和输入格式。

样例输入
54
450001c2369810004001062a0a00000a8a200cc0050300000000640000f9f5030000
样例输出
from_in
提示

该数据包的 IP 头部信息为:

  • 版本和头长度:45,表示 IPv4 协议,头部长度为 5(20 字节);
  • 区分服务:00;
  • 总长度:1c23(7203),表示数据包总长度为 7203 字节;
  • 标识:6981;
  • 标志和偏移:0010;
  • 生存时间:40;
  • 协议:01,表示该数据包使用 ICMP 协议(Internet Control Message Protocol);
  • 首部检验和:2a0a;
  • 源 IP 地址:0a00000a(表示 10.0.0.10);
  • 目的 IP 地址:8a200cc0(表示 138.32.12.192)。

因此,该数据包的方向应该是从内部网络发出。