公众号旧文
如何阻止所有进入本机的 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 被阻止。
扩展阅读: