如何正确运行 localtunnel v2

Posted

技术标签:

【中文标题】如何正确运行 localtunnel v2【英文标题】:How to run localtunnel v2 properly 【发布时间】:2012-05-22 08:39:48 【问题描述】:

我正在使用localtunnel v1。但是我发现v2允许你自定义子域,我需要这个功能。

我按照repository 中的README 中描述的教程进行操作,但它在几个部分让我感到困惑,最后还是没有用。

第一步是运行一些网络应用程序:检查,在端口号上。 8000。

然后,它说明了主机名:

Localtunnel 用主机名做一些事情,所以你想设置两个 主机名。一个用于本地隧道注册,一个用于您的本地隧道。 通常它需要一个通配符,但我们只会硬编码一个主机名 这个示例隧道。

example.localtunnel.local -> 127.0.0.1 localtunnel.local -> 127.0.0.1

您可以在 /etc/hosts 中执行此操作,或者使用那个花哨的 ghost 实用程序。

我在这里迷路了,但我还是编辑了我的/etc/hosts

127.0.0.1   localhost
127.0.1.1   my-pc-name
127.0.0.1   example.localtunnel.local
127.0.0.1   localtunnel.local

下一步...

现在您可以启动服务器了。它基于一个配置文件 配置目录。您可以自己制作,但这个配置为 在端口 9999 上运行服务器并期望主机名 localtunnel.local

银杏配置/default.conf.py

哪一个?无论如何...我创建了 myconfig.conf.py 基于 localtunnel repo 目录/deploy 中的文件:

port = 9999
hostname = 'localtunnel.local'
service = 'localtunnel.server.TunnelBroker'

但是,当我跑步时:

lt --broker 127.0.0.1:9999 --name example 8000

我明白了:

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gevent/greenlet.py", line 390, in run
  result = self._run(*self.args, **self.kwargs)
File "/usr/local/lib/python2.7/dist-packages/localtunnel/client.py", line 53, in listen
  msg = self.ws.receive(msg_obj=True)
TypeError: receive() got an unexpected keyword argument 'msg_obj'
<Greenlet at 0xb6e0db1cL: <bound method TunnelClient.listen of <localtunnel.client.TunnelClient object at 0xb6def52c>>> failed with TypeError

而在银杏过程中:

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gevent/pywsgi.py", line 438, in handle_one_response
  self.run_application()
File "/usr/local/lib/python2.7/dist-packages/ws4py/server/geventserver.py", line 85, in run_application
  self.result = self.application(self.environ, start_response_for_upgrade)
File "/usr/local/lib/python2.7/dist-packages/ws4py/server/wsgi/middleware.py", line 131, in __call__
  environ.copy()))
TypeError: handle_websocket() takes exactly 3 arguments (2 given)
<BrokerFrontend fileno=6 address=0.0.0.0:9999>: Failed to handle request:
  request = GET /t/example HTTP/1.1 from ('127.0.0.1', 35907)
  application = <ws4py.server.wsgi.middleware.WebSocketUpgradeMiddleware object at 0x95bc2ac>

127.0.0.1 - - [2012-05-14 17:18:18] "GET /t/example HTTP/1.1" 101 162 0.000933

而且,很明显,http://example.localtunnel.local:9999 不起作用。

如何解决这个问题?我必须在哪里修改才能更改最终的子域?

对不起,令人毛骨悚然的英语。


编辑

我已按照 paul 的建议进行了降级。但是,虽然发生了变化,但错误仍然存​​在。银杏工艺:

$ ginkgo eco.conf.py  
Starting process with eco.conf.py...  
127.0.0.1 - - [2012-05-22 20:21:11] "GET /t/example HTTP/1.1" 400 116 0.000190

本地隧道进程:

$ lt --broker 127.0.0.1:9999 --name example 8000
Traceback (most recent call last):
  File "/usr/local/bin/lt", line 9, in <module>
    load_entry_point('localtunnel==0.4.0', 'console_scripts', 'lt')()
  File "/usr/local/lib/python2.7/dist-packages/localtunnel/client.py", line 31, in main
    client.serve_forever()
  File "/usr/local/lib/python2.7/dist-packages/ginkgo/core.py", line 188, in serve_forever
    self.start()
  File "/usr/local/lib/python2.7/dist-packages/ginkgo/core.py", line 124, in start
    ready = not self.do_start()
  File "/usr/local/lib/python2.7/dist-packages/localtunnel/client.py", line 42, in do_start  
    self.ws.connect()
  File "/usr/local/lib/python2.7/dist-packages/ws4py-0.1.5-py2.7.egg/ws4py/client/threadedclient.py", line 72, in connect
    self.process_response_line(response_line)
  File "/usr/local/lib/python2.7/dist-packages/ws4py-0.1.5-py2.7.egg/ws4py/client/__init__.py", line 61, in process_response_line
    raise HandshakeError("Invalid response status: %s %s" % (code, status))
ws4py.exc.HandshakeError: Invalid response status: 400 Bad Handshake

虽然 ginkgo 现在没有报错,localtunnel 还是会报出不同于以往报错的报错。显然它试图在连接过程中获取“/t/example”。

【问题讨论】:

【参考方案1】:

看起来这个软件需要一个旧版本的 ws4py。 ws4py 的 current version (0.2.1) 与您所拥有的相匹配,而 0.1.5 version of ws4py 与 localtunnel 尝试使用的相匹配。

降级到 ws4py 0.1.5 可能足以解决您遇到的问题。

不过,另一方面,这似乎不是世界上受支持最好的软件。您确定这是解决您问题的正确方法吗?我已经查看了该 repo 中提供的代码和所有文档,我得到的是它设置了这个奇怪的 tcp-tunnel-over-json-over-websockets(是的,websockets,对于两个都有 python 的东西服务器和客户端!)的东西,甚至没有提供任何特定的安全性或加密或自身的稳健性功能,而且它似乎没有做其他更常见的工具无法做得更好的事情。但当然,我可能遗漏了一些重要的东西。

【讨论】:

我可以提供或解释任何其他信息来改进我的答案吗? 一千次对延迟响应表示歉意......但只有降级 ws4py 不起作用。请查看我的编辑。 关于您的评论,我使用此工具的目标只是共享本地 Web 服务器以测试与安全性无关的功能。如果你知道有什么工具可以做同样的事情,我很想知道! 您熟悉 ssh 隧道吗?如果我正确理解您的问题,他们会很好地解决它。 我想找到适合您的解决方案的一条有用信息是:是什么阻止您让本地 Web 服务器自己监听外部接口?【参考方案2】:

我认为您必须按照说明设置 localtunnel.com 服务器(即,如果您想在其他域上运行自己的 localtunnel 服务器)。

正常使用安装 localtunnel v2 应该像运行 pip install localtunnel 一样简单(可能使用 sudo)。

完成后,只需运行localtunnel-beta -n &lt;subdomain&gt; 8000

更多详情请见Jeff's blog post。

【讨论】:

以上是关于如何正确运行 localtunnel v2的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Paypal IPN 与 localtunnel 随机 400 错误请求

可与 Windows 的“localtunnel”相媲美的东西 [关闭]

将 localtunnel\ngrok 与多个本地站点一起使用

localtunnel 和 CORS 无法正常工作

localtunnel.me 原理流程浅析

将 localhost 暴露给世界总是给出 5** [ngrok, localtunnel, etc]