Chrome 远程调试无法使用 IP 地址。

27

我正在尝试使用Chrome的远程调试选项来远程调试Chrome实例:

chrome.exe --remote-debugging-port=1337

如Google页面所述:http://code.google.com/chrome/devtools/docs/remote-debugging.html

问题是当我尝试使用IP访问它时,它不起作用,而在使用localhost:1337进行测试时确实有效。

有什么想法吗?


2
端口在Windows上开放了吗?如果没有,您必须为该端口添加Windows防火墙规则! - Azd325
http://www.webkit.org/blog/1620/webkit-remote-debugging/ - Azd325
8个回答

36

你可以设置一个SSH隧道以进行远程调试。在源机器上执行:

ssh -L 0.0.0.0:9223:localhost:9222 localhost -N 

然后在另一台机器上,将Chrome浏览器指向http://source-machine-ip:9223


谢谢!那个对我来说很好用。我以前从没用过netcat。 - Konrad Dzwinel
谢谢,正是我需要的,第二次(参考8月15日),让两个GNU/Linux盒子进行远程调试。 - GJSmith3rd
您还可以使用-R标志进行远程端口转发。 - Dmitry Sharshakov
最新版本无法正常工作。Chrome 返回空响应。 - Shashwat Kumar
@ShashwatKumar:返回HTTP 200 OK意味着它正在工作。然而,较新的Chrome开发者工具正在监听ws://而不是http://。 - undefined

20

出于安全原因,我认为Chrome不接受来自本地主机以外的连接。 我建议您在Chrome所在的同一主机上构建一个小型代理。


因为它们是为移动设备创建的,您可以从桌面调试而不是智能手机。 - Azd325
有什么资源可以推荐来创建代理?我想对于大多数情况来说,这可能比它的价值更麻烦,但在过去几个月中,我已经考虑过这个问题好几次了。 - Chris May
抱歉,Chris,我这里没有推荐。我自己从头开始写了Java,你也可能会。我知道某些版本的“nc”(netcat)实用程序已经支持代理(不是OpenBSD)。 - beefeather
我可以推荐使用Charles Web Debugging Proxy。 - izogfif
已解决:请查看我的答案,了解在Windows上完整解决方案而无需安装任何第三方软件。 - Philip Bulley

20

以下方法适用于我在 Windows 8 上运行 Chrome 远程调试主机时:

  1. 向 Windows 防火墙添加入站规则
    • 搜索“Windows 防火墙”,并选择“Windows 防火墙”结果
    • 在“Windows 防火墙”控制面板窗口左侧,单击“高级设置”。这将打开“带有高级安全性的 Windows 防火墙”。
    • 在左侧的树视图中,单击“入站规则”
    • 在最右边,单击“新建规则…”
    • 选择“端口”(单击下一步)
    • 选择 TCP 并将“特定本地端口”设置为 9222(单击下一步)
    • 选择“允许连接”(单击下一步)
    • 选择适合您需求的配置文件访问权限(域、私有、公用)(单击下一步)
    • 给它起一个名称,例如 Chrome 远程调试(9222)(单击完成)
  2. 按照用户3445047关于端口转发的说明进行操作:

在 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,您将看到一个“可检查页面”的列表。


17

使用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标头,但不是IP地址或localhost”的错误。 - Mathieu
如果您的服务器同时支持IPV6和IPV4,我建议使用IP而不是主机名。(一开始对我没有用,因为socat在IPV4上运行,而chrome尝试使用IPV6) - Poyoman

10
  1. 启动无界面服务器

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防火墙添加入站规则配合使用,无需安装任何额外的端口转发工具即可很好地运行。请参阅我的答案以获取完整的说明... - Philip Bulley
    请注意,对于cmd.exe(如上所述),行继续字符是(^),但对于PowerShell,则为反引号(\)。 - jpaugh
    如果您尝试这样做,Chrome会报错: “指定了主机头,但它不是IP地址或本地主机。” - Samuel Thompson

    8

    最近的Chrome版本支持命令行开关“--remote-debugging-address”,因此上面列出的解决方法应该不再需要。

    以下是描述:

    "使用给定地址代替默认的环回地址,以接受远程调试连接。应与--remote-debugging-port一起使用。请注意,远程调试协议不执行任何身份验证,因此过度公开它可能会带来安全风险。"

    你知道如何使用这个吗?我尝试了各种方法,但无法远程访问调试工具。它是在要求远程客户端的IP地址吗?还是要求一个解析到我的机器的DNS名称? - Sean256
    @Sean256 你解决了这个问题吗?无论我使用什么咒语,都不能使其工作。 - Marcus Stade
    2
    @MarcusStade 我没有。我已经转而创建了一个ssh隧道。它一定是坏了。 - Sean256
    2
    我正在Docker容器下运行Chrome,并在命令行中添加--remote-debugging-address=0.0.0.0,这使我能够从外部连接。测试的简单方法是检查版本页面:http://localhost:9222/json/version - Juha Palomäki
    1
    https://dev59.com/ilkR5IYBdhLWcg3w_B_- 表示这只在无头模式下工作。 - Tamir Daniely
    是的,--headless将端口绑定到指定的IP,但它仍然看起来有问题,devtools只部分加载,然后停止。 - OrdinaryOrange

    0

    你可以使用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}"
    

    0

    尝试更改端口号 这对我有效。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接