震惊,phpstorm使用xdebug调试被Windows Defender防火墙拦截调试端口的罪魁祸首竟然是!!!

开发环境win10,phpstorm,调试环境vagrant+homestead+php7.3,xdebug,配置正常,插件正常加载。打印xdebug日志,发现本地能够连通虚拟机,但是xdebug回包的时候,被本地的防火墙拦截了。

xdebug开启远程调试配置,日志的方法

xdebug.remote_enable = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.max_nesting_level = 512
xdebug.remote_autostart=1
xdebug.remote_log=/tmp/xdebug.log

验证xdebug正常开启的方法,不需要编写php脚本,调用phpinfo()。只需要输入命令:

php -v

看到加载了xdebug模块,还有版本号信息,就是正常的。

而查看具体的xdebug配置可以输入以下命令

php -i|grep xdebug

把xdebug模块的信息过滤后,会输出一堆关于xdebug的配置,这里只截取重点配置

当我使用chrome,开启xdebug调试插件,访问虚拟机web端口的时候,xdebug日志输出如下:

因为是内网环境,所以200ms已经足以判断超时。不放心可以再用curl进行验证

curl 172.17.7.49:9000

会一直卡着直到超时异常。确认是本地防火墙问题,之后自然想到会配置Windows Defender。但是问题又来了。当我添加了一条入站规则

再打开win10防火墙日志(这方法win10通用),然后打开PowerShell输入命令

//防火墙默认的日志输出路径C:\WINDOWS\system32\LogFiles\Firewall\pfirewall.log
//-Tail 类似linux bash tail,输出最近30行内容,-Wait 表示1秒刷新一次日志,近似-f,组合起来类似于tail -f
Get-Item -Path C:\WINDOWS\system32\LogFiles\Firewall\pfirewall.log|Get-Content -Tail 30 -Wait

查看被丢弃的数据包

能看到我虚拟机发到9000端口的数据包被DROP掉了。但是我关闭防火墙,又确实可以正常断点,所以肯定就是防火墙的配置问题。我又从网上搜索了入站规则无法生效的问题,涉及到作用域,我看了一下,任何IP来源,配置文件所有地方生效,顺带一提(我这个触发的是公有配置,明明网络是专有网络)。我突然又想到,也许是以前某些入站规则的配置,覆盖了我现在这一条配置。于是我首先查找,有没有关于phpstorm的配置,因为我使用的就是phpstorm首先要排除是IDE配置的原因。果不其然按照名称排列,找到了phpstorm一堆禁用任何端口的入站规则,之所以是一堆,是因为我升级比较频繁,所以还有旧版本的入站规则,

我不明白为什么会有这些入站配置,但是立马先把这些规则删除了,然后端口立马通了,断点调试正常了。我排除了自己使用IDE过程中,主动增加的这些规则,我甚至还能看到Pycharm也做了类似的默认配置,所以有理由确定是jb出于安全策略生成了这些默认配置。

嘛,反正问题到此为止算是解决了,希望能帮助看到这篇博客的朋友,首先确认xdebug扩展是否正常加载,配置是否正确,两边防火墙是否做了限制。一步步排查,问题就迎刃而解了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无限超频

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值