ping命令产生“ICMP echo request”包。ICMP代表Internet Control Messaging Protocol,系统没有专门的守护进程来负责ICMP echo应答,应答包是由内核直接产生的。
如果要阻止系统产生应答包,可以利用ipfwadm或者ipchains工具,在您的包过滤表里加一条记录。
当然,您的系统要配置成支持包过滤。大多数Linux发布缺省就具有了该功能,例如,在Linux 2.2内核中使用ipchains:
ipchains -A output -p icmp --icmp-type pong -j DENY
-A 表示是添加(append)模式,将规则加到output链条后面。-p 表示协议类型是ICMP其后--icmp-type说明icmp协议的子类型为pong,pong是 echo-reply的缩写。-j 表示将继续匹配包的动作。DENY说明拒绝该包。
在旧版Linux 2.0内核中可以使用ipfwadm工具:ipfwadm -I -a deny -P icmp -S 0.0.0.0/0 0 ,可读性要稍差一点。
注意,关闭ICMP echo应答不是好的办法,而关闭所有的ICMP包则更糟。这将会破坏系统TCP/IP模块的一些行为。一些包如“destination unreachable”,“fragmentation needed when DF option set”被关闭将会使TCP/IP性能严重下降。ipchains到Linux 2.4将被Netfilter(IPTables)取代。
白东注:关于关闭ping响应的方法,更好的方法请参见这篇文章中的方法《理解 Proc 文件系统》。比这里的方法要好的多