公众号旧文

如何阻止所有进入本机的 IPv4 Ping 请求?

作者:胖子阅读 —

开头直接给命令,然后再逐步解释该命令在做什么。

netsh advfirewall firewall add rule name="Block_Ping_Test" protocol=icmpv4:8,any dir=in action=block

这是一条 Windows 防火墙入站规则,下面把它逐段拆开理解。

一、整体含义

这条命令是在 Windows 防火墙中添加一条规则:

阻止所有进入本机的 IPv4 Ping 请求(ICMP Echo Request)。

效果就是:

别人 ping 你 → 没有回复

但其他协议:

TCP
UDP
HTTP
SSH

都不会受影响。

二、逐个字段解释

1、netsh

``

这是 Windows 的 网络配置工具。

全称:

Network Shell

作用:

配置网络
配置防火墙
配置接口
配置路由

2、advfirewall

``

表示操作 高级防火墙模块。

Windows 防火墙有两个层级:

模块 用途
firewall 旧接口
advfirewall 高级规则(推荐)

3、firewall

``

表示操作 防火墙规则。

现在的命令是在:

Windows Defender Firewall

里面添加规则。

4、add rule

``

表示:

新增一条规则

类似数据库:

INSERT

如果要删除规则则是:

delete rule

5、name="Block_Ping_Test"

``

规则名称:

Block_Ping_Test

只是一个 标识名字。

用途:

  • 方便查看
  • 方便删除
  • 方便管理

例如删除时就是用这个名字:

netsh advfirewall firewall delete rule name="Block_Ping_Test"

6、protocol=icmpv4:8,any

``

这是 最关键的部分。

意思是:

协议 = ICMPv4
类型 = 8
代码 = any

ICMP 类型表:

类型 含义
8 Echo Request(ping 请求)
0 Echo Reply(ping 回复)
3 Destination Unreachable
11 TTL Exceeded

所以:

icmpv4:8

就是:

Ping 请求

注意:

这条规则 只拦截 ping 请求,不会影响:

Echo Reply
其他 ICMP

7、dir=in

``

表示 入站方向。

网络方向有两个:

参数 含义
in 入站(别人访问你)
out 出站(你访问别人)

这里是:

dir=in

意思是:

拦截别人发给你的 Ping

但:

你 ping 别人 → 不受影响

8、action=block

``

表示:

动作 = 阻止

防火墙动作通常有:

动作 含义
allow 允许
block 阻止
bypass 绕过

这里是:

block

意思是:

丢弃数据包

表现就是:

Request timed out

三、网络层真实发生了什么

当别人 ping 你时:

对方电脑
   │
   │ ICMP Echo Request
   ▼
你的电脑
   │
   │ Windows 防火墙
   ▼
规则命中
   │
   │ 丢弃
   ▼
无回复

所以对方看到:

Request timed out

四、为什么只写 ICMPv4

因为现在很多网络还有:

IPv6

IPv6 ping 类型是:

ICMPv6 type 128

如果要同时禁止 IPv6 ping:

netsh advfirewall firewall add rule name="Block_Ping6_Test" protocol=icmpv6:128,any dir=in action=block

五、一个很多人不知道的小细节

Windows 防火墙默认 允许 ping,因为有一条隐藏规则:

File and Printer Sharing (Echo Request - ICMPv4-In)

而我们刚才的规则是:

优先匹配
覆盖默认规则

所以 Ping 被阻止。

扩展阅读:


你知道127.0.0.1是本机,那127.0.0.2是谁?

为什么IPv6是全球唯一地址,而你家的IPv6却不是固定的?

为什么现在 IP 地址的 .0 和 .255 也能用了?

你每天上网都在使用的IP,是谁分配给你的?