Chrome 远程调试不适用于 IP
Posted
技术标签:
【中文标题】Chrome 远程调试不适用于 IP【英文标题】:Chrome remote debugging doesn't work with IP 【发布时间】:2011-10-13 05:28:09 【问题描述】:我正在尝试使用 chrome 中的远程调试选项远程调试 chrome 实例:
chrome.exe --remote-debugging-port=1337
如谷歌页面所述:http://code.google.com/chrome/devtools/docs/remote-debugging.html
问题是当我尝试使用 IP 访问它时它不起作用,而使用 localhost:1337 测试它确实起作用。
有什么想法吗?
【问题讨论】:
端口在windows上打开了吗?如果没有,您必须为此端口添加 Windows 防火墙规则! webkit.org/blog/1620/webkit-remote-debugging 【参考方案1】:您可以使用 netcat 创建简单的 TCP 代理:
EXTERNAL_PORT=1338
CHROME_DEBUG_PORT=1337 # This is the port specified with --remote-debugging-port
nc -l -p $EXTERNAL_PORT -c "nc 127.0.0.1 $CHROME_DEBUG_PORT"
【讨论】:
【参考方案2】:启动无头服务器
chrome.exe --remote-debugging-port=9222
在 windows 上设置端口转发
netsh interface portproxy add v4tov4^
listenport=9222 listenaddress=0.0.0.0^
connectaddress=127.0.0.1 connectport=9222
【讨论】:
在 Windows 上,这与向 Windows 防火墙添加入站规则结合使用效果很好,无需安装任何额外的端口转发实用程序。有关完整说明,请参阅我的答案... 请注意,line continuation character 是 (^
) 对应于 cmd.exe
(正如我在上面添加的),但反引号 (`
) 对应于 PowerShell。
如果你尝试这个,Chome 会报错:Host header is specified and is not an IP address or localhost.
【参考方案3】:
最近的 Chrome 版本支持命令行开关“--remote-debugging-address”,因此不再需要上面列出的解决方法。
这里是描述: "使用给定地址而不是默认环回来接受远程调试连接。应该与 --remote-debugging-port 一起使用。注意远程调试协议不执行任何身份验证,因此暴露它过于广泛可能会带来安全风险。"
【讨论】:
你知道这个怎么用吗?我尝试了各种方法,但无法远程访问调试工具。它是否要求远程客户端IP?还是它要求一个可以解析到我的机器的 DNS 名称? @Sean256 你明白了吗?无论我使用什么咒语,我都无法做到这一点.. @MarcusStade 我没有。从那以后,我求助于创建一个 ssh 隧道。它必须被打破。 我在 Docker 容器下运行 Chrome 并将 --remote-debugging-address=0.0.0.0 添加到命令行允许我从外部连接。简单的测试方法是检查版本页面:localhost:9222/json/version ***.com/questions/40538197/… 声明这只适用于无头模式。【参考方案4】:您可以设置 SSH 隧道以进行远程调试。在源机器上执行:
ssh -L 0.0.0.0:9223:localhost:9222 localhost -N
然后在另一台机器上点Chrome浏览器到http://source-machine-ip:9223
【讨论】:
谢谢!那对我来说效果很好。我从来没有设法为此使用 netcat。 谢谢,正是我需要的,第二次(8 月 15 日引用),让两个 GNU/Linux 机器聊天以进行远程调试。 也可以使用-R
标志进行远程端口转发
它在最新版本中不起作用。 Chrome 正在返回空响应。【参考方案5】:
在 Windows 8 上运行 Chrome 远程调试主机时,以下内容对我有用。
-
向 Windows 防火墙添加入站规则
搜索“Windows 防火墙”并选择“Windows 防火墙”结果
在“Windows 防火墙”控制面板窗口左侧,单击“高级设置”。这将打开“具有高级安全性的 Windows 防火墙”。
在左侧的树形视图中,点击“入站规则”
在最右侧,点击“新建规则...”
选择“端口”(单击下一步)
选择TCP并将“特定本地端口”设置为
9222
(点击下一步)
选择“允许连接”(单击下一步)
根据您的需要选择配置文件访问权限(域、私有、公共)(单击下一步)
给它起一个名字,比如Chrome Remote Debugging (9222)
(点击完成)
关注user3445047's instructions on port forwarding:
在 Windows 主机上运行 Chrome:
chrome.exe --remote-debugging-port=9222
在 Windows 主机上设置端口转发:
打开一个cmd
窗口。您必须“以管理员身份运行”。
在 cmd 窗口中输入以下内容:
netsh
interface
portproxy
add v4tov4 listenport=9222 connectaddress=127.0.0.1
在客户端上,导航到http://THE_HOST_IP_ADDRESS:9222
,您应该会看到一个“可检查页面”列表。
【讨论】:
【参考方案6】:与另一台计算机共享调试会话的最简单方法是使用socat。 例如,如果您在端口 1337 上启用了远程调试协议,使用
chromium --remote-debugging-port=1337
然后,你可以使用socat创建隧道,
socat tcp-listen:5656,fork tcp:localhost:1337
完成此操作后,任何人都可以访问http://<YOUR_IP_OR_HOSTNAME>:5656/
并立即使用调试器。
完成后,按 Ctrl + C 终止 socat,从而停止隧道。
如果前面的代码不起作用,请检查防火墙(例如iptables
)是否阻止访问。如果防火墙正常,请检查 IP 地址或主机名是否正确。要查看流量是否正确转发/隧道,请访问 http://localhost:5656/
并验证是否有 Webkit 调试器实例正在运行。
【讨论】:
当我尝试使用除localhost
之外的其他主机名访问它时,我得到Host header is specified and is not an IP address or localhost
如果您的服务器可以通过 IPV6 和 IPV4 访问,我建议使用 IP 而不是主机名。 (起初对我不起作用,因为 socat 在 IPV4 上运行,而 chrome 正在尝试 IPV6)【参考方案7】:
我认为 Chrome 不接受来自本地主机外部的连接(出于安全原因)。 我建议您必须在 Chrome 所在的同一主机上构建小型代理。
【讨论】:
因为他们是为移动设备创建的,您可以从桌面而不是智能手机进行调试 推荐什么资源来创建代理?我想在大多数情况下,这比它的价值更麻烦,但在过去的几个月里,我曾多次想过这个问题。 对不起,克里斯,我在这里没有建议。我为自己从头开始编写 Java,您可能也可以。我知道某些“nc”(netcat)实用程序已经支持代理(不是openbsd)。 我可以推荐 Charles Web 调试代理。 已解决:在不安装任何第三方软件的情况下查看我在 Windows 上的完整解决方案的答案。以上是关于Chrome 远程调试不适用于 IP的主要内容,如果未能解决你的问题,请参考以下文章