当前位置:首页 > CN2资讯 > 正文内容

centos花生壳客户端

3天前CN2资讯

一、ngrok简介及作用

ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。

这些看上去很麻烦,我们更需要的是了解ngrok的用途。

  • 完美代替“花生壳”软件。

“花生壳”是一款老牌的内网穿透软件,一年的内网版服务要两百多块钱,都快可以买一年垃圾点的VPS服务器了。而免费版的“花生壳”稳定性较差,隔三差五的不能访问,每个月只有1G流量,以前做项目没少被坑。ngrok是一款免费开源的软件,稳定性极强,我曾做过测试,将ngrok客户端所在计算机的网络断开一阵子,再连接另一个网络,ngrok很快会自动重连,几乎不受影响。

  • 用于对处在内网环境中,无外网IP的计算机的远程连接。

ngrok可以做TCP端口转发,对于Linux可以将其映射到22端口进行SSH连接。Windows的远程桌面可以将其映射到3389端口来实现。同理,如果要做MySQL的远程连接,只需映射3306端口即可。

  • 用作临时搭建网站并分配二级域名,可用作微信二次开发的本地调试。

微信公众平台二次开发时,服务器必须要能通过外网访问,而且必须是80接口。我们一般会在自己的电脑上写代码,但是由于电信运营商将80端口屏蔽了,甚至很多人通过无线路由器上网,根本就没有公网ip。在这种情况下,我们每次都要上传代码到服务器对微信公众平台进行接口调试,十分的不方便。而ngro可以将内网映射到一个公网地址,这样就完美的解决了我们的问题。

ngrok官方为我们免费提供了一个服务器,我们只需要下载ngrok客户端即可正常使用,但是后来官方的服务越来越慢,直到ngrok官网被完全屏蔽。现在我们已经无法使用ngrok官方的服务器了。所以,接下来我们自行搭建属于自己的ngrok服务器,为自己提供方便快捷又稳定的服务,一劳永逸。

二、环境准备

VPS:这里以阿里云ECS为例,操作系统为CentOS7(64位)。 域名:将一个域名或二级域名泛解析到VPS服务器上。例如将*.解析到VPS的IP。要注意,此时还需要将的A记录设置为VPS的IP。

1、安装git

#安装git yum install git #注意git版本应大于1.7.9.5

源码编译安装请参考:

2、配置go环境

下载并解压

#下载go1.4.2源码包 wget https://storage.googleapis.com/golang/go1.7.linux-amd64.tar.gz #解压到/usr/local/ tar -C /usr/local/ -zxf go1.7.linux-amd64.tar.gz

可从后面的链接中下载新的版本:https:///dl/

添加环境变量

#打开/etc/profile #配置profile vim /etc/profile

在最后面添加:

#添加下面两行代码 export GOROOT=/usr/local/go export PATH=$GOROOT/bin:$PATH

保存并退出,然后编译/etc/profile文件,使之前的配置生效

#编译profile source /etc/profile

查看go环境是否配置成功

#查看go环境是否配置成功 #显示go version go1.4.2 linux/amd64则说明go环境配成功 # go version

 

三、准备编译Ngrok

1、下载Ngrok源码包

#下载ngrok源码包 cd ~ git clone https:///inconshreveable/ngrok.git cd ngrok/

2、为Base域名生成自签名证书

ngrok需要一个域名作为base域名,ngrok会为客户端分配base域名的子域名。例如:ngrok的base域名为,客户端即可被分配子域名test.。

使用ngrok官方服务时,base域名是ngrok.com,并且使用默认的SSL证书。现在自建ngrok服务器,所以需要重新为自己的base域名生成证书。

#为base域名生成证书 openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=" -days 5000 -out rootCA.pem openssl genrsa -out device.key 2048 openssl req -new -key device.key -subj "/CN=" -out device.csr openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

一定要注意对应的base域名

执行完上述命令,正常情况下,该目录会多出device.crt、device.csr、device.key、rootCA.key、rootCA.pem、rootCA.srl六个文件,用它们来替换默认的证书文件即可。默认的证书文件在“./assets/client/tls”和“./assets/server/tls/”目录中

#替换默认的证书文件 cp rootCA.pem assets/client/tls/ngrokroot.crt cp device.crt assets/server/tls/snakeoil.crt cp device.key assets/server/tls/snakeoil.key

查看截图

四、开始编译ngrok

1、编译服务器端ngrokd

ngrokd就是ngrok服务器端,默认编译为Linux的执行文件,我们的VPS本身就是Linux的,所以直接make编译就好。

#编译ngrokd(服务器端) make release-server

显示下面的内容则表示编译成功:

GOOS="" GOARCH="" go get /jteeuwen/go-bindata/go-bindata bin/go-bindata -nomemcopy -pkg=assets -tags=release \ -debug=false \ -o=src/ngrok/client/assets/assets_release.go \ assets/client/... bin/go-bindata -nomemcopy -pkg=assets -tags=release \ -debug=false \ -o=src/ngrok/server/assets/assets_release.go \ assets/server/... go get -tags 'release' -d -v ngrok/... /inconshreveable/mousetrap (download) /rcrowley/go-metrics (download) Fetching https://gopkg.in/inconshreveable/go-update.v0?go-get=1 Parsing meta tags from https://gopkg.in/inconshreveable/go-update.v0?go-get=1 (status code 200) get "gopkg.in/inconshreveable/go-update.v0": found meta tag main.metaImport{Prefix:"gopkg.in/inconshreveable/go-update.v0", VCS:"git", RepoRoot:"https://gopkg.in/inconshreveable/go-update.v0"} at https://gopkg.in/inconshreveable/go-update.v0?go-get=1 gopkg.in/inconshreveable/go-update.v0 (download) /kardianos/osext (download) /kr/binarydist (download) Fetching https://gopkg.in/inconshreveable/go-update.v0/check?go-get=1 Parsing meta tags from https://gopkg.in/inconshreveable/go-update.v0/check?go-get=1 (status code 200) get "gopkg.in/inconshreveable/go-update.v0/check": found meta tag main.metaImport{Prefix:"gopkg.in/inconshreveable/go-update.v0", VCS:"git", RepoRoot:"https://gopkg.in/inconshreveable/go-update.v0"} at https://gopkg.in/inconshreveable/go-update.v0/check?go-get=1 get "gopkg.in/inconshreveable/go-update.v0/check": verifying non-authoritative meta tag Fetching https://gopkg.in/inconshreveable/go-update.v0?go-get=1 Parsing meta tags from https://gopkg.in/inconshreveable/go-update.v0?go-get=1 (status code 200) Fetching https://gopkg.in/yaml.v1?go-get=1 Parsing meta tags from https://gopkg.in/yaml.v1?go-get=1 (status code 200) get "gopkg.in/yaml.v1": found meta tag main.metaImport{Prefix:"gopkg.in/yaml.v1", VCS:"git", RepoRoot:"https://gopkg.in/yaml.v1"} at https://gopkg.in/yaml.v1?go-get=1 gopkg.in/yaml.v1 (download) /inconshreveable/go-vhost (download) /alecthomas/log4go (download) /nsf/termbox-go (download) /mattn/go-runewidth (download) /gorilla/websocket (download) go install -tags 'release' ngrok/main/ngrokd

查看截图

我们可以在./bin/目录中找到文件ngrokd。可以先运行测试一下。

#执行ngrokd # ./bin/ngrokd -domain="" -httpAddr=":8080"

出现类似以下内容,则说明我们的服务器端ngrokd正常运行了。

[23:18:27 CST 2016/08/23] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified [23:18:27 CST 2016/08/23] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:8080 [23:18:27 CST 2016/08/23] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:443 [23:18:27 CST 2016/08/23] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443 [23:18:27 CST 2016/08/23] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds

查看截图

之后Ctrl+C退出ngrokd,继续来编译ngrok客户端。

2、编译客户端ngrok

编译linux客户端很简单,一条命令就搞定

#编译Linux客户端 make release-client

显示以下内容,没有任何报错的话,客户端ngrok就编译成功了,我们在./bin/目录下就可以找到执行文件ngrok。

bin/go-bindata -nomemcopy -pkg=assets -tags=release \ -debug=false \ -o=src/ngrok/client/assets/assets_release.go \ assets/client/... bin/go-bindata -nomemcopy -pkg=assets -tags=release \ -debug=false \ -o=src/ngrok/server/assets/assets_release.go \ assets/server/... go get -tags 'release' -d -v ngrok/... go install -tags 'release' ngrok/main/ngrok

是,我们现在需要在windows下运行ngrok客户端。所以,重点是我们需要编译Windows版的ngrok客户端。那么我们难道要安装WIndows版的go环境,在Windows下编译吗?那太麻烦了,不用这样。go开发环境为我们提供了强大的跨平台交叉编译功能,在Linux下即可完成Windows版的编译。

#切到go的安装目录 cd /usr/local/go/src #给Go编译器加上交叉编译windows/amd64程序的功能 GOOS=windows GOARCH=amd64 ./make.bash

如果这里提示错误

./make.bash: eval: line 135: syntax error near unexpected token `('

有可能是之前使用yum安装过go,通过命令yum remove go 卸载当前的go并按照本文的方法重新安装。

#切回到ngrok目录 cd - #执行如下命令编译Windows 64位客户端 GOOS=windows GOARCH=amd64 make release-client #以上GOARCH=amd64指的是编译为64位版本,如需32位改成GOARCH=386即可

没有错误的话,Windows客户端ngrok就编译成功了,我们可以在./bin/windows_amd64/目录下找到执行文件ngrok.exe。将其下载到Windows上。

查看截图

mac的编译命令

#切换到ngrok目录 cd -; #mac平台下的64位环境 GOOS=darwin GOARCH=amd64 make release-client

五、运行并测试

1、启动服务器端ngrokd

这个很简单,首先执行VPS上的服务器端ngrokd,这里的8080指的是服务器启用8080端口,就是说内网穿透后的域名为xxx.tunnel,mydomain.com:8080。如果在80端口未作他用的情况下,也可将8080端口改为80,这样更方便些。而如果我们VPS的80端口被占用了,但是我们还想用80端口作为服务端口,那么可以使用nginx做一个xxx.的反向代理。

#执行ngrokd ./bin/ngrokd -domain="" -httpAddr=":8080"

2、写客户端配置文件

在ngrok.exe所在目录下建立文件ngrok.cfg,用记事本等文本编辑器写入以下内容并保存。

#配置文件ngrok.cfg的内容 # server_addr: "ngrok.dingdayu.com:4443" trust_host_root_certs: false

3、映射HTTP

之后打开Windows服务器,这里以80端口为例。打开命令提示符,切到ngrok.exe所在目录,并执行以下命令。

#启动ngrok客户端 #注意:如果不加参数-subdomain=test,将会随机自动分配子域名。 # ngrok -config=ngrok.cfg -subdomain=test 80

正常情况下,客户端上会显示以下内容,表示成功连接到服务器端。

#客户端ngrok正常执行显示的内容 ngrok (Ctrl+C to quit) Tunnel Status online Version 1.7/1.7 Forwarding http://ngrok.dingdayu.com:8080 -> 127.0.0.1:80 Forwarding https://ngrok.dingdayu.com:8080 -> 127.0.0.1:80 Web Interface 127.0.0.1:4040 # Conn 0 Avg Conn Time 0.00ms

打开浏览器,分别在地址栏中输入http://localhost和http://test.:8080,如果后者正常显示并且和http://localhost显示的内容相同,则证明我们已经成功了。

4、映射TCP

#这里以SSH连接Linux时的22端口为例 ./ngrok -proto=tcp 22

映射成功的话,会显示如下内容:

#客户端ngrok正常执行显示的内容 ngrok (Ctrl+C to quit) Tunnel Status online Version 1.7/1.7 Forwarding tcp://ngrok.dingdayu.com:49805 -> 127.0.0.1:22 Web Interface 127.0.0.1:4040 # Conn 0 Avg Conn Time 0.00ms

现在,在putty等ssh工具中即可连接。切记端口是号49805,是随机分配的一个端口号,而不是默认的22端口了。

Windows的远程桌面可以将其映射到3389端口来实现。同理,如果要做MySQL的远程连接,只需映射3306端口即可。FTP可映射21端口。

六、后续定制及优化

通过以上操作,我们的ngrok服务器就已经成功搭建了,客户端也成功的跑了起来。但是,如果我们想要对ngrok进行一些定制和优化,可以参考这些后续定制及优化的方法。

1、修改客户端ngrok默认服务地址

客户端每次还需要加载配置文件,这样显得有些麻烦。能不能像官方服务那样直接执行命令ngrok 80就能使用呢?我们只需要在编译客户端之前,稍作修改即可。同样,如果需要指定域名可以执行命令ngrok -subdomain=test 80来运行客户端。

#修改默认服务地址 vim ./src/ngrok/client/model.go#找到第23行,将 defaultServerAddr = ":443" #修改为defaultServerAddr = "ngrok.dingdayu.com:4443" 即可

2、修改客户端ngrok左上角蓝色文字logo

运行客户端后,我们会发现在客户端左上角会有一个蓝色字体的“ngrok”字样的文字logo,如果觉得不太喜欢,或者想修改一下的话,可以在编译客户端之前,作如下修改。

#修改客户端蓝色文字logo Vim ./src/ngrok/client/views/term/view.go

找到第100行,将

v.APrintf(termbox.ColorBlue|termbox.AttrBold, 0, 0, "ngrok")

修改为

v.APrintf(termbox.ColorBlue|termbox.AttrBold, 0, 0, "your logo")

3、修改客户端帮助信息

ngrok客户端默认的帮助信息很少,我们可以在编译客户端之前,自己定制帮助内容。

#修改客户端默认帮助信息 vim ./src/ngrok/client/client/cli.go

找到第14行,修改const usage2 string的值即可。

4、客户端程序加壳优化

编译好的Windows客户端ngrok.exe大小为10MB,有点大,这样加载到内存中,需要读取硬盘的内容也相对较多,影响速度。所以,我们还可以给客户端程序加个压缩壳,对程序进行压缩。

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/20122.html

    分享给朋友:

    “centos花生壳客户端” 的相关文章

    AS7473在网络数据传输中的重要性与应用探究

    AS7473简介 AS7473是一个重要的ASN编号,主要与网络数据传输和路由相关。它在信息技术领域中扮演着至关重要的角色,连接着不同的网络节点,确保数据能够顺利传输。想象一下,在这个数字化时代,数据的传输速度和准确性直接影响着我们的工作效率与信息交流。因此,AS7473的定义与重要性绝不容小觑。...

    Digital-VM优惠活动揭秘:享受五折折扣和稳定续费

    Digital-VM优惠概述 Digital-VM简介 Digital-VM是一家专注于提供基于KVM架构的VPS主机服务商,凭借其强大的服务器性能和丰富的网络资源,已经逐渐在市场中站稳了脚跟。如果你在寻找高可靠性、灵活配置的VPS主机,Digital-VM绝对值得一试。它在全球多个地区建立了数据中...

    2023年美国服务器市场分析与未来展望

    在美国,服务器市场一直以来都具有举足轻重的地位。到了2023年,这个市场依旧保持着强劲的增长势头。根据IDC的分析报告,2023年第一季度,美国的服务器市场规模达到了2212亿美元,相比去年增长了2%。这不仅显示了市场的健康发展,也奠定了美国在全球服务器市场的领导地位,全球市场份额约为30%。 随着...

    选择和管理海外服务器的最佳策略与优势

    在如今这个信息高度发达的时代,海外服务器逐渐成为许多企业的不二选择。简单来说,海外服务器是指那些位于中国境外的数据处理设备。这些服务器致力于为全球用户提供高效的服务,不论是数据存储、网站托管还是其他在线服务。通过使用海外服务器,企业能够接触到更广阔的市场以及可定制的解决方案,以满足特定需求。 选择海...

    AMD EPYC 7K62:数据中心理想选择的高性能服务器CPU

    在数据中心的世界中,选对一款合适的服务器CPU至关重要。今天,我想聊聊AMD EPYC 7K62,这款处理器以其高性价比赢得了许多用户的青睐。这个型号的CPU被设计为服务器专用,接下来我们将深入了解它的基本信息、技术规格以及市场定位。 AMD EPYC 7K62的型号很直接,名称中就带有AMD和EP...

    国外VPS:高性价比虚拟专用服务器选择指南

    什么是国外VPS? 当我提到国外VPS时,它指的就是虚拟专用服务器(Virtual Private Server),这是一种把物理服务器分割成多个独立的小型服务器的技术。每一个VPS都拥有自己的公网IP地址和操作系统,资源如磁盘空间、内存和CPU都可以独立配置。这种固有的隔离性,可以让我在同一个物理...