ICMP不可达(端口不可达)数据包中无效的Raw字段
我正在用Python写两个脚本,一个在服务器上运行,另一个在客户端上运行。在客户端,脚本会向服务器上一个关闭的端口发送UDP数据包。我的脚本目的是测试客户端是否会接受从服务器收到的无效ICMP数据包。在服务器端,我会监听进来的流量,并对每个UDP数据包回复一个ICMP的“端口不可达”消息,并且每次我都会修改ICMP数据包中的一个字段(设置一个错误的值),以测试这个数据包是否被接收。我的问题是:当我修改原始字段(有效载荷)时,客户端会接受这个ICMP数据包吗?我的意思是,原始字段没有进行任何控制。我希望我的问题表达得清楚。非常感谢。
1 个回答
0
好吧,至少对于ID和序列字段,这些可以是任何16位的数字组合,内核会接受这个数据包并把它转发给所有注册的ICMP套接字处理程序。
但是,如果校验和字段不正确,接收的内核就不会把这个头信息传递给处理程序(不过,它会传递给链路层的嗅探工具)。另外,根据我的测试,如果你把类型/代码标志改成一些不正确的已知数字组合,或者是协议中未定义的数字,接收的内核也不会把这些传递给处理程序(但链路层的嗅探工具仍然能看到)。
注意,我没有使用scapy,只是直接用python/socket代码,我的系统是Linux。