将ICMP ECHO_REQUEST发送到网络主机
当我在终端中运行ping host时,ping是一个ICMP客户端吗?
ping是否连接到运行在host上的ICMP服务器?ICMP服务器的程序是什么?
ping是否连接到host上的端口,该端口号是否是ICMP服务器的端口号?
发布于 2018-08-21 23:03:02
平确实是一个客户。
ping命令还使用ICMP协议的一部分,即回显回复(ICMP类型0消息)和回显请求(ICMP消息类型8)。
许多专业人员和网络监控软件使用回波请求/应答成功的ICMP消息处理作为一个指标,一个系统是上/下。然而,这是一种惯例,并不是严格强制性的。例如,我可以在Nagios中定义,我将使用SSH /22端口监视我的Linux服务器,而不是使用PINGs。
作为已建立的连接的概念本身并不存在,就像TCP连接中一样。ICMP不是一个面向连接的协议。
如前所述,端口的概念也不存在-- Linux内核处理ICMP数据包,并相应地抛出一个答案,然后忘记了行为(例如,忽略其他机制作为速率限制)。
Ping也适用于没有特权的用户,或者必须是setuid二进制文件,因为它使用原始套接字来制造ICMP数据包。
您还可以定义内核是否响应带有sysctl/proc设置的ICMP回送请求消息。
若要禁用ICMP pings的答案,请执行以下操作:
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all 或再次启用:
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all至于负责处理ICMP消息的内核部分,它可以在Linux内核源代码中找到icmp.c,就像在https://github.com/torvalds/linux/blob/master/net/ipv4/icmp.c中一样。
至于ICMP数据包,请参阅此图像:

至于更多的内核定义:
linux/icmp.h
#define ICMP_ECHOREPLY 0 /* Echo Reply */
#define ICMP_ECHO 8 /* Echo Request */https://unix.stackexchange.com/questions/463994
复制相似问题