http隧道Chisel

2023-05-16

http隧道有啥用呢?
有些服务器封端口或者封协议只能走http协议。远程维护机器很不方便,可能要VPN+堡垒机,甚至还有限制了ssh客户端的。这里我就会考虑使用http隧道的方式。
在这里插入图片描述
同类文章推荐:

  • 《http隧道Neo-reGeorg使用笔记》https://blog.csdn.net/lxyoucan/article/details/118120656
  • 《钉钉内网穿透》 https://blog.csdn.net/lxyoucan/article/details/112548798

简介

项目地址:https://github.com/jpillora/chisel

Chisel 是一个快速的 TCP/UDP 隧道,通过 HTTP 传输,通过 SSH 进行保护。单个可执行文件,包括客户端和服务器。用 Go (golang) 编写。Chisel 主要用于通过防火墙,但它也可用于为您的网络提供安全端点。

特征

  • 易于使用
  • 性能*
  • 使用 SSH 协议的加密连接(通过crypto/ssh)
  • 经过身份验证的连接;具有用户配置文件的经过身份验证的客户端连接,具有指纹匹配的经过身份验证的服务器连接。
  • 客户端使用指数退避自动重新连接
  • 客户端可以通过一个 TCP 连接创建多个隧道端点
  • 客户端可以选择通过 SOCKS 或 HTTP CONNECT 代理
  • 反向端口转发(连接通过服务器并从客户端传出)
  • 服务器可选择兼作反向代理
  • 服务器可选择允许SOCKS5连接(请参阅下面的指南)
  • 客户端可选择允许来自反向端口的SOCKS5连接转发
  • 通过 stdio 的客户端连接支持ssh -o ProxyCommand通过 HTTP 提供 SSH

安装方法

我只介绍两种方式,其他方法请参考项目主页的介绍。

Binaries

查看最新版本或下载并立即安装

curl https://i.jpillora.com/chisel! | bash

Docker

docker run --rm -it jpillora/chisel --help

用法

详细看帮助。

chisel --help
chisel server --help
chisel client --help

SOCKS5实例

  1. 开启chisel server
    服务端开启服务。
chisel server -p 9312 --socks5 --key supersecret

执行结果如下:

➜ ~ chisel server -p 9312 --socks5 --key supersecret
2021/07/08 12:42:41 server: Fingerprint HmlyYqS8Ce4n+tr8hhVZ39jFJRCaKNMJn0KsI0VsL3I=
2021/07/08 12:42:41 server: Listening on http://0.0.0.0:9312

红色字体部分,我们一会儿要用到。
2. 连接 chisel client (使用上面得到的fingerprint)
客户端连接服务端

chisel client --fingerprint 'HmlyYqS8Ce4n+tr8hhVZ39jFJRCaKNMJn0KsI0VsL3I=' 172.16.184.12:9312 socks

172.16.184.12部分换成你的服务ip。
执行结果如下:

$ chisel client --fingerprint 'HmlyYqS8Ce4n+tr8hhVZ39jFJRCaKNMJn0KsI0VsL3I=' 172.16.184.12:9312 socks
2021/07/08 14:27:14 client: Connecting to ws://172.16.184.12:9312
2021/07/08 14:27:14 client: tun: proxy#127.0.0.1:1080=>socks: Listening
2021/07/08 14:27:14 client: Fingerprint HmlyYqS8Ce4n+tr8hhVZ39jFJRCaKNMJn0KsI0VsL3I=
2021/07/08 14:27:14 client: Connected (Latency 1.784676ms)

此时客户端就开启了一个socks代理服务器了,端口默认1080.隧道就建立完成了。

如何使用socket5隧道。可以参考:
《Sockets代理的使用简介》https://blog.csdn.net/lxyoucan/article/details/118573133
我比较常用的用法,通过代理连接ssh。

ssh -o ProxyCommand='nc -x 127.0.0.1:1080 %h %p' root@172.100.100.100

Nginx+Chisel

我的Nginx配置文件如下:

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    map $http_upgrade $connection_upgrade {
	    default upgrade;
	    '' close;
    }
    sendfile        on;
    keepalive_timeout  65;
    types_hash_max_size 4096;
    server {
        listen       8061;
        server_name  localhost;
	location /dev/ {
		if ($request_method = 'OPTIONS') {
			add_header 'Access-Control-Allow-Origin' 'https://chisel.cloud';
			add_header 'Access-Control-Allow-Credentials' 'true';
			add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-Chisel-Proxied-Url,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
			add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';
			add_header 'Access-Control-Max-Age' 1728000;
			add_header 'Content-Type' 'text/plain charset=UTF-8';
			add_header 'Content-Length' 0;
			return 204;
		}

		add_header 'Access-Control-Allow-Credentials' 'true';
		add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-Chisel-Proxied-Url,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
		add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';

		proxy_redirect off;
		proxy_set_header Host $proxy_host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_pass "http://127.0.0.1:8080";
		proxy_hide_header 'access-control-allow-origin';
		add_header 'access-control-allow-origin' 'https://chisel.cloud';
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection $connection_upgrade;
	}

       error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

其中把proxy_pass "http://127.0.0.1:8080";中的地址,换成你实际Chisel server的地址就行了。
重点是需要支持websocket协议。
这个配置文件参考了:

  • https://www.huaweicloud.com/articles/bb617f001e20ce4973e446d497831b05.html
  • https://gist.github.com/alediaferia/ebc7ecadb88889e6665b32aec9951f46

上面nginx上根据的路径是/dev/所以,客户端的命令应该这样写:

chisel client --fingerprint 'HmlyYqS8Ce4n+tr8hhVZ39jFJRCaKNMJn0KsI0VsL3I=' 180.188.132.10:8061/dev/ socks

总结

对比Neo-reGeorg隧道穿透,Chisel更稳定和流畅。即使是通过http隧道,使用ssh毫无卡顿感。Neo-reGeorg的优点是比较小巧灵活隐蔽,随便丢个jsp文件到服务器上就可以使用了。Chisel还要单独启动个服务显的重一些。但是通过Neo-reGeorg使用ssh,每按一键都会有明显的卡顿。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

http隧道Chisel 的相关文章

  • htaccess 重定向非 www http 和 https

    我想要 http example com重定向至 http www example com https example com重定向至 https www example com 以及任何东西http whatever example co
  • 脚本和链接标签的简写 http:// 为 // ?有人以前看过/用过这个吗?

    问题如下 如果您使用 addthis 共享按钮 查看任何网站 一旦您浮动在 addthis 按钮上 并且加载了所有必需的资源 请使用 firebug 或 chrome 检查器查看文档的正文 不是源代码 而是屏幕上的实际文档 对象检查器 你会
  • 使用 HTML 表单时如何在 HTTP 请求正文中发送数据?

    HTTP 规范规定 POST 请求可以包含任意数据体 An HTML form元素可以 POST 到 URL 并且可能包含input元素 但那些input元素变成查询字符串 我怎样才能得到一个form还可以在按下提交按钮时发送的 HTTP
  • HTTP-DELETE-请求是否允许响应主体?

    我假设响应代码 200 始终允许响应主体 但我找不到任何明确提及删除请求的响应主体 这里明确提到了RFC http www w3 org Protocols rfc2616 rfc2616 sec9 html sec9 7 简短的回答是 Y
  • 通过 HTTPS 包含 Twitter Widgets.js

    当我们包含以下内容时 我在我们网站上的 HTTPS 服务页面上的混合内容方面遇到了一个小问题http platform twitter com widgets js http platform twitter com widgets js
  • Express.js在控制器中获取http方法

    我正在构建一个注册表单 本地护照作为身份验证 表单作为表单助手 因为注册只知道 GET 和 POST 我想在一个函数中完成整个处理 换句话说 我正在寻找类似的东西 exports register function req res if r
  • 使用 PushStreamContent 从 HTTPClient 上传

    我想将大量数据上传到网络服务器from客户端机器 我直接跳到 PushStreamContent 这样我就可以直接写入流 因为结果的大小各不相同 并且可能相当大 流程如下 User runs query gt Reader Ready Ev
  • gRPC(HTTP/2) 比使用 HTTP/2 的 REST 更快吗?

    目标是引入一种性能更好的传输和应用层协议latency and 网络吞吐量 目前 该应用程序使用REST with HTTP 1 1并且我们遇到了很高的延迟 我需要解决这个延迟问题并且我愿意使用gRPC HTTP 2 or 休息 HTTP2
  • 反向代理受 NTLM 保护的网站

    如何将请求代理到受 NTLM 保护的网站 例如团队基金会 and 共享点 我不断得到401 身份验证错误 根据这篇 Microsoft TechNet 文章 https www microsoft com technet prodtechn
  • 对过期会话进行休息调用:HTTP 401 响应导致浏览器显示登录窗口

    我编写了一个 HTML 5 应用程序 它使用 AngularJS 并与在 Tomcat 上运行的 Java REST 后端进行交互 我使用 Spring Security 来处理登录和安全性 当用户进入网站时 他将被转发到登录页面 该页面创
  • C# - 如何进行 HTTP 调用

    我想对网站进行 HTTP 调用 我只需要点击 URL 不想上传或下载任何数据 最简单 最快的方法是什么 我尝试了下面的代码 但它很慢 并且在第二次重复请求后 它只是超时 59 秒 然后恢复 WebRequest webRequest Web
  • 如何测试“If-Modified-Since”HTTP 标头支持

    使用 PHP 如何准确测试远程网站supports If Modified Since HTTP 标头 据我所知 如果您获取的远程文件自标头请求中指定的日期以来已被修改 它应该返回 200 OK 状态 如果尚未修改 则应返回 304 Not
  • Golang 优雅地关闭 HTTP 服务器并进行错误处理

    我正在让我的 HTTP 服务器正常关闭 我从帖子中获取了提示here https stackoverflow com questions 39320025 how to stop http listenandserve 并且到目前为止已经像
  • 服务器返回网页 404,但页面在浏览器中显示正常 - 为什么?

    一个奇怪的网页横亘在我面前 作为一名开发人员 我必须解开这个谜团 在任何浏览器中访问网页时 一切似乎都很正常 网页按预期显示 但是当查看控制台时 服务器实际上返回了 404 状态代码 那么浏览器为什么要渲染页面呢 查看正文显示返回了有效的
  • 除了 GET 和 POST 之外,如何从浏览器向 RESTful 应用程序发送任何内容?

    我没有得到 RESTful 的东西 是的 我知道如何从浏览器向我的应用程序发送 GET 请求 这是通过 URL 链接 a href user someone 并且还可以通过form方法发送POST请求 a
  • 如何禁用 HTTP 的 HSTS 标头?

    我已将以下内容插入到我网站的 htaccess 中 以便能够访问HSTS预加载列表 https hstspreload appspot com
  • 如何解析 Content-Disposition 标头以检索文件名属性?

    使用 go 如何解析从 http HEAD 请求检索到的 Content Disposition 标头以获取文件的文件名 此外 如何从 http HEAD 响应中检索标头本身 这样的事情正确吗 resp err http Head http
  • 如何增加asp classic的请求接受限制

    我从java小程序向asp classic发送post请求 我在此请求中发送非常大的数据 即 csv 数据 当此请求中的字符数增加并超过 138000 时 asp 不接受该请求 java 小程序给出 500 错误 所以有人可以告诉我如何才能
  • ASP.NET Core URL 重写

    我正在尝试将我的网站从 www 重定向到非 www 规则以及 http 到 https https example com https example com 在中间件中 我曾经在 web config 中进行这些重定向更改 例如
  • RestSharp RestClient的默认超时值是多少?

    任何人都知道默认超时值休息锐利 https github com restsharp 休息客户端 RestSharp 在底层使用 HttpWebRequest 它有一个默认超时 https msdn microsoft com en us

随机推荐

  • nodejs切换taobao源

    span class token comment 使用nrm工具切换淘宝源 span npx nrm use taobao span class token comment 如果之后需要切换回官方源可使用 span npx nrm use
  • Centos7 安装新版tmux

    Centos7安装出来的tmux版本是1 8 xff0c 有一些插件用不了 所以想升级一下 tmux V tmux span class token number 1 8 span 一键编译安装 全自动 xff0c 一条命令搞定下面手动做的
  • kali新手入门教学(15)--burpsuite安装&证书导入&字体调整

    第一步 xff0c 卸载kali自身的burpsuite kali自身卸载软件有两个命令 remove 卸载软件包 purge 卸载并清除软件包的配置 因为我们彻底不用了 xff0c 就直接purge span class token fu
  • macOS手动启动 Simulator(ios模拟器)

    使用expo做RN 开发 xff0c 有时需要启动Simulator来做调试 毕竟直接在电脑看 xff0c 比低头看真机舒服一些 我平时会使用xcode打开模拟器 xff0c 然后在手动打开expo 本身打开xcode就要等待 能不能直接命
  • RN开发iOS模拟器按⌃⌘Z没反应?

    在RN开发中Reload还是比较常用的 xff0c 小伙伴有没有遇到按快捷键没有反应的情况 xff1f 但是鼠标点击有用 鼠标点击就很不方便 xff0c 如何解决呢 xff1f 快捷键没反应 xff0c 于是我就怀疑是不是快捷键冲突了 xf
  • typescript错误检查Property ‘navigation‘ is missing in type ‘{}‘

    最近刚把一些react native 的项目转到typescript 一个typescript的菜鸟 我的过程仅供参考 xff0c 不一定是最好的解决办法 遇到问题如下 xff1a 错误信息 tsserver 2741 E Property
  • RN常用组件安装命令

    文章目录 Expo篇WebViewAsyncStoragereact native animatablereact native paperreact native root siblings 64 ant design react nat
  • Centos升级ruby

    CentOS7 安装的ruby默认版本是 xff1a ruby v span class token punctuation span 11 43 53 span class token punctuation span ruby 2 0
  • 设置iTerm2为默认终端

    虽然安装了iTerm2 xff0c 但是有一程序还是会调用系统自带的终端打开程序 如何解决呢 xff1f 设置方法如下 xff1a iTerm2 61 gt Make iTerm2 Default Term
  • ModuleNotFoundError: No module named ‘requests‘

    环境 macOS 11 4 明明已经执行了 xff1a pip3 span class token function install span requests 依然报错 这就让我想到电脑上好像有存在两个pip3 报错 xff1a impo
  • http隧道Neo-reGeorg使用笔记

    项目简介 https github com L codes Neo reGeorg Neo reGeorg 是一个旨在积极重构 reGeorg 的项目 xff0c 目的是 xff1a 提高 tunnel 连接安全性 提高可用性 xff0c
  • 神器webssh学习笔记

    简介 项目主页 xff1a https github com huashengdun webssh 一个简单的 Web 应用程序 xff0c 用作 ssh 客户端以连接到您的 ssh 服务器 它是用 Python 编写的 xff0c 基于
  • react native中使用base64加密解密

    使用方法 考虑使用与和兼容的base 64 xff0c 在 react 和 react native 中对我有用 xff1a btoaatob span class token function npm span span class to
  • kali新手入门教学(16)--如何在校园网下使用桥接模式上网

    emmm很长时间都没有更新了 卑微的我要准备期末考 然后返校什么的耽误了 xff0c 对不起大家啦 再次感谢大家的支持啦 刚收拾完我的寝室 xff0c 打开电脑登上校园网 ip变化很大 xff0c 这也是大家经常遇见的情况 xff0c 本地
  • React Native 兼容ios与android的弹出提示toast

    由于 iOS 没有内置的 toast 功能 xff0c 因此 React Native 开发人员必须实现自己的跨平台 toast 库 react native root toast是开发人员与 React Native 社区共享的一种解决方
  • Unable to resolve module react-native-pager-view

    报错信息 Unable to resolve module react native pager view from home apex wp expo jsjs node modules 64 ant design react nativ
  • Expo开发Field: splash.image - cannot access file at ‘./assets/splash.png‘

    报错信息 Error Problems validating asset fields in app json Learn more https docs expo io Field splash image cannot access f
  • Expo开发的App如果获取版本信息

    如何获取版本信息 xff0c 实际上很简单 但是我第一次使用expo获取版本信息 xff0c 还是查看了好多expo的文档才找到 所以就记录一下吧 版本信息配置app json span class token punctuation sp
  • React Native每次进入页面执行一次方法

    问 xff1a 有什么办法 可以在我每次进入页面的时候 执行一次方法吗 因为我看rn的生命周期 都是只执行一次 然后在下次进入的时候就不会再执行方法了 答 xff1a 在function组件中可以这样实现 xff1a span class
  • http隧道Chisel

    http隧道有啥用呢 xff1f 有些服务器封端口或者封协议只能走http协议 远程维护机器很不方便 xff0c 可能要VPN 43 堡垒机 xff0c 甚至还有限制了ssh客户端的 这里我就会考虑使用http隧道的方式 同类文章推荐 xf