java - Apache Mina SSHD 端口转发,如 NGROK
问题描述
我正在尝试实现一个“动态”代理转发以从 Internet 访问 localhost,例如纯 Java 中的 Ngrok。
这家伙基本上做同样的事情:https ://serveo.net/#intro (但是,没有客户端)
想法是在服务器上使用相同的端口,并基于子域为每个客户端创建一个动态代理
问题是默认实现在第二个连接上抛出错误..说端口已经打开。
org.apache.sshd.common.forward.DefaultForwardingFilter #doBind
谁知道如何实现这一点?这样做的好处是,您甚至不需要像 Ngrok 这样的客户端……只需使用普通的 ssh 就可以了。
ssh -R http2:9000:localhost:8002 localhost -p 4440
ssh -R http2:pSERVER:localhost:pLOCAL localhost -p SSHD_PORT
我想象的一个选项是在服务器上动态生成端口:忽略“pSERVER”端口,并创建一个 HttpProxy,为每个端口进行重定向。但是我发现这非常低效,我相信只能通过分析请求标头并为相应的通道/连接进行重定向来完成
解决方案
太头疼之后。代码质量非常低,只是可以实现的概念证明。
实现的想法是通过更改sshd-netty,并添加一个功能来解包http请求并删除HOST HEADER(这里需要改进)。
服务器上只使用了一个端口,它是一种客户端的反向代理......
我希望开发人员的帮助来改进有问题的代码。我对 Netty 和 Mina 的了解非常有限。
欣赏:
来源:https ://github.com/ricardojlrufino/sshd-dyn-tunneling
测试:打开 2 个连接:
ssh -v -R http1:9000:localhost:8001 localhost -p 4440
ssh -v -R http2:9000:localhost:8002 localhost -p 4440
提出要求:
curl -v -H "Host: http1" http1:9000
curl -v -H "Host: http2" http2:9000
推荐阅读
- angular-directive - 如何在 Angular 10 中使用自定义指令设置元素的占位符样式?
- tensorflow - TypeError: ('Not JSON Serializable:'... 仅在 Google 云平台中保存具有自定义层的模型时
- postgresql - 取消嵌套数组值并计算每个值的出现次数
- python - 在容器中找不到 Python 模块
- postgresql - 如何使用纯 docker-compose 将 PostGIS 添加到我的 PostgreSQL 设置中
- cmake - CMake 在子目录中找不到 Fortran 源文件
- unit-testing - 由于 LocaDateTime 字段,单元测试未通过
- httpclient - PoolingHttpClientConnectionManager(apache.httpcomponents) 对 maxTotal 和 defaultMaxPerRoute 使用惰性或急切初始化?
- r - 从互相关到 R 中的列格式
- python - Selenium:能够通过完整的 XPath 定位元素,无法通过带有属性选择器的 XPath 定位