转安卓了,有哪些必装

在国内开发微信公众号、企业号以及做前端开发的朋友想必对ngrok都不陌生吧,就目前来看,ngrok可是最佳的在内网调试微信服务的tunnel工 具。记得今年春节前,提供的服务还一切正常呢,但春节后似乎就一切不正常了。无法访问,ngrok虽然能连上 提供的服务,但微信端因为无法访问,导致消息一直无法发送到我们的服务地址上,比如。 这一切都表明,ngork被墙了。没有了ngrok tunnel,一切开始变得困难且没有效率起来。内网到外部主机部署和调试是一件慢的让人想骂街的事情。ngrok不能少。ngrok以及其服务端ngrokd都是开源的,之前我也知道通过源码可以自搭建ngrok服务。请求搜索引擎后,发现国内有个朋友已经搭建了一个www.tunnel.mobi的ngrok公共服务,与类似,我也实验了一下。编写一个ngrok.cfg,内容如下:server_addr: "tunnel.mobi:44433"trust_host_root_certs: true用ngrok最新客户端1.7版本执行如下命令:$ngrok -subdomain tonybaiexample -config=ngrok.cfg 80可以顺利建立一个tunnel,用于本机向外部提供"tonybaiexample.tunnel.mobi"服务。Tunnel Status
onlineVersion
1.7/1.7Forwarding
http://tonybaiexample.tunnel.mobi -> 127.0.0.1:80Forwarding
https://tonybaiexample.tunnel.mobi -> 127.0.0.1:80Web Interface
127.0.0.1:4040# Conn
0Avg Conn Time
0.00ms而且国内的ngrok服务显然要远远快于提供的服务,消息瞬间即达。但这是在公网上直接访问的结果。放在公司内部,我看到的却是另外一个结果:Tunnel Status
reconnectingVersion
1.7/Web Interface
127.0.0.1:4040# Conn
0Avg Conn Time
0.00ms我们无法从内网建立tunnel,意味着依旧不方便和低效,因为很多基础服务都在内网部署,内外网之间的交互十分不便。但内网连不上tunnel.mobi也是个事实,且无法知道原因,因为看不到server端的连接错误日志。于是我决定自建一个ngrok服务。一、准备工作搭建ngrok服务需要在公网有一台vps,去年年末曾经在Amazon申请了一个体验主机EC2,有公网IP一个,这次就打算用这个主机作为ngrokd服务端。需要一个自己的域名。已有域名的,可以建立一个子域名,用于关联ngrok服务,这样也不会干扰原先域名提供的服务。(不用域名的方式也许可以,但我没有试验过。)搭建的参考资料主要来自下面三个:1) ngrok的官方SELFHOST指南:/inconshreveable/ngrok/blob/master/docs/SELFHOSTING.md2) 国外一哥们的博客:/2014/09/run-ngrok-on-your-own-server/3) "海运的博客"中的一篇文章:http://www.haiyun.me/archives/1012.html二、实操步骤我的AWS EC2实例安装的是Ubuntu Server 14.04 x86_64,并安装了golang 1.4(go version go1.4 linux/amd64)。Golang是编译ngrokd和ngrok所必须的,建议直接从golang官方下载对应平台的二进制安装包(国内可以从 上下载,速度慢些罢了)。1、下载ngrok源码(GOPATH=~/goproj)$ mkdir ~/goproj//inconshreveable$ git clone /inconshreveable/ngrok.git$ export GOPATH=~/goproj//inconshreveable/ngrok2、生成自签名证书使用官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,我们需要生成自己的证书,并提供携带该证书的ngrok客户端。证书生成过程需要一个NGROK_BASE_DOMAIN。 以ngrok官方随机生成的地址为例,其NGROK_BASE_DOMAIN就是"",如果你要 提供服务的地址为"example.",那NGROK_BASE_DOMAIN就应该 是""。我们这里以NGROK_BASE_DOMAIN=""为例,生成证书的命令如下:$ cd ~/goproj//inconshreveable/ngrok$ 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执行完以上命令,在ngrok目录下就会新生成6个文件:-rw-rw-r– 1 ubuntu ubuntu 1001 Mar 14 02:22 device.crt-rw-rw-r– 1 ubuntu ubuntu
903 Mar 14 02:22 device.csr-rw-rw-r– 1 ubuntu ubuntu 1679 Mar 14 02:22 device.key-rw-rw-r– 1 ubuntu ubuntu 1679 Mar 14 02:21 rootCA.key-rw-rw-r– 1 ubuntu ubuntu 1119 Mar 14 02:21 rootCA.pem-rw-rw-r– 1 ubuntu ubuntu
17 Mar 14 02:22 rootCA.srlngrok通过bindata将ngrok源码目录下的assets目录(资源文件)打包到可执行文件(ngrokd和ngrok)中 去,assets/client/tls和assets/server/tls下分别存放着用于ngrok和ngrokd的默认证书文件,我们需要将它们替换成我们自己生成的:(因此这一步务必放在编译可执行文件之前)cp rootCA.pem assets/client/tls/ngrokroot.crtcp device.crt assets/server/tls/snakeoil.crtcp device.key assets/server/tls/snakeoil.key3、编译ngrokd和ngrok在ngrok目录下执行如下命令,编译ngrokd:$ make release-server不过在我的AWS上,出现如下错误:GOOS="" GOARCH="" go /jteeuwen/go-bindata/go-bindatabin/go-bindata -nomemcopy -pkg=assets -tags=release /
-debug=false /
-o=src/ngrok/client/assets/assets_release.go /
assets/client/…make: bin/go-bindata: Command not foundmake: *** [client-assets] Error 127go-bindata被安装到了$GOBIN下了,go编译器找不到了。修正方法是将$GOBIN/go-bindata拷贝到当前ngrok/bin下。$ cp /home/ubuntu/.bin/go14/bin/go-bindata ./bin再次执行make release-server。~/goproj//inconshreveable/ngrok$ make release-serverbin/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/…/p/log4go (download)go: missing Mercurial command. See http://golang.org/s/gogetcmdpackage /p/log4go: exec: "hg": executable file not found in $PATH<//gorilla/websocket (/inconshreveable/go-update (/kardianos/osext (/kr/binarydist (/inconshreveable/go-vhost (/inconshreveable/mousetrap (/nsf/termbox-go (/mattn/go-runewidth (/rcrowley/go-metrics (download)Fetching https://gopkg.in/yaml.v1?go-get=1Parsing 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=1gopkg.in/yaml.v1 (download)make: *** [deps] Error 1又出错!提示找不到hg,原来是aws上没有安装hg。install hg后(sudo apt-get install mercurial),再编译。$ make release-serverbin/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/…/p/log4go (download)go install -tags 'release' ngrok/main/ngrokd同样编译ngrok:$ make release-clientbin/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/ngrokAWS上ngrokd和ngrok被安装到了$GOBIN下。三、调试1、启动ngrokd$ ngrokd -domain="" -httpAddr=":8080" -httpsAddr=":/15 04:47:24] [INFO] [registry] [tun] No affinity cache specified[03/14/15 04:47:24] [INFO] [metrics] Reporting every 30 seconds[03/14/15 04:47:24] [INFO] Listening for public http connections on [::]:/15 04:47:24] [INFO] Listening for public https connections on [::]:/15 04:47:24] [INFO] Listening for control and proxy connections on [::]:4443… …2、公网连接ngrokd将生成的ngrok下载到自己的电脑上。创建一个配置文件ngrok.cfg,内容如下:server_addr: ":4443"trust_host_root_certs: false执行ngrok:$ ngrok -subdomain example -config=ngrok.cfg 80Tunnel Status
reconnectingVersion
1.7/Web Interface
127.0.0.1:4040# Conn
0Avg Conn Time
0.00ms连接失败。此刻我的电脑是在公网上。查看ngrokd的日志,没有发现连接到达Server端。试着在本地ping 这个地址,发现地址不通。难道是DNS设置的问题。之前我只是设置了"*."的A地址,并未设置""。于是到DNS管理页面,添加了""的A记录。待DNS记录刷新OK后,再次启动ngrok:Tunnel Status onlineVersion 1.7/1.7Forwarding http://epower.:8080 -> 127.0.0.1:80Forwarding https://epower.:8080 -> 127.0.0.1:80Web Interface 127.0.0.1:4040# Conn 0Avg Conn Time 0.00ms这回连接成功了!3、内网连接ngrokd将ngrok拷贝到内网的一台PC上,这台PC设置了公司的代理。按照同样的步骤启动ngrok:$ ngrok -subdomain example -config=ngrok.cfg 80Tunnel Status
reconnectingVersion
1.7/Web Interface
127.0.0.1:4040# Conn
0Avg Conn Time
0.00ms不巧,怎么又失败了!从Server端来看,还是没有收到客户端的连接,显然是连接没有打通公司内网。从我自己的squid代理服务器来看,似乎只有443端口的请求被公司代理服务器允许通过,4443则无法出去。.558 .126.101 TCP_MISS/000 366772 CONNECT api.equinox.io:443 – DEFAULT_PARENT/ -
通过了.441 27 10.10.126.101 TCP_MISS/000 1185 CONNECT :4443 – DEFAULT_PARENT/ -
似乎没有通过只能修改server监听端口了。将-tunnelAddr由4443改为443(注意AWS上需要修改防火墙的端口规则,这个是实时生效的,无需重启实例):$ sudo ngrokd -domain="" -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":443"[03/14/15 04:47:24] [INFO] [registry] [tun] No affinity cache specified[03/14/15 04:47:24] [INFO] [metrics] Reporting every 30 seconds[03/14/15 04:47:24] [INFO] Listening for public http connections on [::]:/15 04:47:24] [INFO] Listening for public https connections on [::]:/15 04:47:24] [INFO] Listening for control and proxy connections on [::]:443… …将ngrok.cfg中的地址改为443:server_addr: ":443"再次执行ngrok客户端:Tunnel Status
onlineVersion
1.7/1.7Forwarding
http://epower.:8080 -> 127.0.0.1:80Forwarding
https://epower.:8080 -> 127.0.0.1:80Web Interface
127.0.0.1:4040# Conn
0Avg Conn Time
0.00ms这回成功连上了。4、80端口是否大功告成了呢?我们看看ngrok的结果,总感觉哪里不对呢?噢,转发的地址怎么是8080端口呢?为何不是80?微信公众号/企业号可只是支持80端口啊!我们还需要修改一下Server端的参数,将-httpAddr从8080改为80。$ sudo ngrokd -domain="" -httpAddr=":80" -httpsAddr=":8081" -tunnelAddr=":443"这回再用ngrok连接一下:Tunnel Status
onlineVersion
1.7/1.7Forwarding
http://epower. -> 127.0.0.1:80Forwarding
https://epower. -> 127.0.0.1:80Web Interface
127.0.0.1:4040# Conn
0Avg Conn Time
0.00ms这回与我们的需求匹配上了。5、测试在内网的PC上建立一个简单的http server 程序:hello//hello.gopackage mainimport "net/http"func main() {
http.HandleFunc("/", hello)
http.ListenAndServe(":80", nil)}func hello(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hello!"))}$ go build -o hello hello.go$ sudo ./hello通过公网浏览器访问一下“http://epower.”这个地址,如果你看到浏览器返回"hello!"字样,那么你的ngrokd服务就搭建成功了!四、注意事项客户端ngrok.cfg中server_addr后的值必须严格与-domain以及证书中的NGROK_BASE_DOMAIN相同,否则Server端就会出现如下错误日志:[03/13/15 09:55:46] [INFO] [tun:15dd7522] New connection from 54.149.100.42:/15 09:55:46] [DEBG] [tun:15dd7522] Waiting to read message[03/13/15 09:55:46] [WARN] [tun:15dd7522] Failed to read message: remote error: bad certificate[03/13/15 09:55:46] [DEBG] [tun:15dd7522] Closing(C) 2015, bigwhite. 版权所有.
无相关信息
最新教程周点击榜
微信扫一扫3144人阅读
Linux(8)
服务器准备
CentOS6上试过了, 编译卡住了, 据说是git版本过低导致, 想升级git , 谁知又有一堆问题, 索性放弃, 安装了CentOS7, 在上面部署.
2. go环境搭建
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
源码安装go的详细过程如下:
1).下载源码,可以在 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.7.1.linux-amd64.tar.gz。
2).将其解压到/usr/local目录下:
tar -C /usr/local
go1.7.1.linux-amd64.tar.gz
注意下载适合自己操作系统的版本
3).设置环境变量
mkdir $HOME/go
echo 'export GOROOT=/usr/local/go'&& ~/.bashrc
echo 'export GOPATH=$HOME/go'&& ~/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin'&& ~/.bashrc
$HOME/.bashrc
4). 安装go get工具
yum install mercurial git bzr subversion
2.获取ngrok源码
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
获取源码:
git clone https:
1). 配置环境变量
export NGROK_DOMAIN="tunnel.ngrok.me"
tunnel.ngrok.me 替换成你自己的域名。
2). 生成自签名ssl证书
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
设置变量:
GOOS=linux GOARCH=amd64
生成服务端与客户端
make release-server release-client
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。
其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。
由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
4. 交叉编译
1).生成windows客户端
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。
交叉编译过程如下:
GOOS=windows GOARCH=amd64 make release-server release-client
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
网上有文章说需要:
/usr/local/go/src/
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
我没有重新编译go, 一样生成了windows客户端, 可能我的go版本高的缘故?
2). 编译arm客户端
sudo GOOS=linux GOARCH=arm make release-client
3).编译mac版本客户端
GOOS=darwin GOARCH=amd64 make
release-client
5.设置域名解析
添加两条A记录:tunnel.ngrok.me和*.tunnel.ngrok.me,指向所在的Ngrok服务器ip。
6. ngrokd服务启动与使用
1).启动ngrokd服务端
bin/ngrokd -domain="$NGROK_DOMAIN"
运行结果如下:
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:80
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:443
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
默认转发80和443端口, 监听端口是4443
如果要改需要添加参数
-httpAddr=":8000" -httpsAddr=":44443"
$NGROK_DOMAIN是必须指定的, 不然会生成的二级域名, 那就用不了
2).启动ngrok客户端
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
server_addr: "tunnel.ngrok.me:4443"
trust_host_root_certs: false
ngrok -config=ngrok.cfg -subdomain test 8080
test是你的二级域名地址
看到这样的信息说明你成功了
Tunnel Status
Forwarding
http://test.tunnel.ngrok.me -& 127.0.0.1:80
Forwarding
https://test.tunnel.ngrok.me -& 127.0.0.1:80
Web Interface
127.0.0.1:4040
Avg Conn Time
如果出错了, 可以加参数看看什么原因
-log=stdout
错误的原因有可能是证书的原因,也可能是域名的原因, 必须保持与NGROK_DOMAIN相同
如果开了防火墙的话, 还必须开启80, 443, 4443端口
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:17947次
排名:千里之外
(1)(1)(1)(3)(1)(2)(1)(1)(1)(2)关于内网穿透之ngrok-----免费搭建自己的网站与应用
你是否也曾想过想写一个自己的网站,来分享技术和生活,但是又碍于不懂怎么搭建个人网站呢?下面是我这几天的一些小尝试,希望能给你带来些灵感。
这几天写了一个书城应用,想把他挂网上跑起来,让别人也能看到。之前写的一些网页都传到github上,运用githubpages这个功能,都能跑起来。这个书城应用跟教程写的,运用Nodejs做服务端环境的搭建,传上去后发现githubpages不管用了?!于是开始在网上找各种方法,先后试了hexo+github搭建个人博客法、nodejs提供的http-server、花生壳、utralhook、魔法隧道、、、这些要不就出错,要不就收费,最后还是ngrok解救了我,好了废话这么多,现在开始说说,用ngrok怎么解决吧;
第一步,登录ngrok官网 /download ,下载对应系统的ngrok.exe;
第二步,命令行进入ngrok存放地址,运行ngrok;
第三步,运行ngrok http 是你本地服务器的端口,自己设置),至于创建本地服务器,我这个是node app.js 里就设置为127.0.0.1:3001;
完成这里,命令行就会输出一个url地址,这时你就惊奇的发现,在你的手机上,别人的电脑上都能通过这个url访问你的应用和网站了!
还有一点是,由于用的是免费服务,生成的二级域名是变化的,如果想要自定义二级域名,需要到ngrok网站注册,收费,在dashboard 下的auth中copy下authtoken码,然后开始时执行命令ngrok authtoken码,最后执行命令ngrok http -subdomain 自己设置的二级域名 3001(端口),这样就生成的自己固定的url地址。
当然这是我这小菜鸟今天的收获,老鸟们不要笑我啊,分享给还没学会这招的大家。
哈哈哈哈哈,刚刚试过,能用,很顺,本来想买个服务器的,就是有配置要求的贵,而且只是毕业项目和组员的交互用而已,这技术刚好帮了忙,多谢分享
并没有完全免费的服务器,多关注一下各云主机的免费试用机会 //:只能测试时用下,请问有什么免费服务器,或者其他方法吗? //:你这不是要把个人PC日夜开着么,电不要钱么
只能测试时用下,请问有什么免费服务器,或者其他方法吗? //:你这不是要把个人PC日夜开着么,电不要钱么
你这不是要把个人PC日夜开着么,电不要钱么
12 总笔记数
3113 总阅读量
Copyright &
All Rights Reserved.
合作伙伴:2092人阅读
1,下载windows版本的客户端,解压到你喜欢的目录
2,在命令行下进入到path/to/windows_386/下
3,执行 ngrok -config=ngrok.cfg -subdomain xxx port[8080] &//(xxx 是你自定义的域名前缀, port端口号)
4,如果开启成功 你就可以使用 xxx. 来访问你本机的 127.0.0.1:80 的服务啦
5,如果你自己有顶级域名,想通过自己的域名来访问本机的项目,那么先将自己的顶级域名解析到123.57.165.240(域名需要已备案哦),然后执行 ngrok -config=ngrok.cfg -hostname xxx.xxx.xxx 80 //(xxx.xxx.xxx是你自定义的顶级域名)
6,如果开启成功 你就可以使用你的顶级域名来访问你本机的 127.0.0.1:80 的服务啦
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:60817次
排名:千里之外
转载:61篇
(1)(2)(6)(2)(1)(2)(10)(9)(22)(2)(12)(1)(1)用ngrok实现外网访问本地WEB项目的方法 - niweiwei - ITeye技术网站
博客分类:
用ngrok实现外网访问本地WEB项目的方法
在ngrok官网/download下载
打开CMD命令行,进入ngrok.exe所在目录,运行ngrok.exe+端口,如ngrok.exe 8081,默认会分配随机的二级域名来访问,转发到本机的8081端口。可以通过-help参数来查看详细的说明,运行后如下提示:
也可以使用自定义的二级域名来访问。
3.自定义二级域名
采用自定义二级域名转发到本机的8080端口
ngrok -authtoken lBldiu -subdomain je 8080
注意:只有在进行注册,并获得授权码后,才可以使用自定义二级域名。
其中:-authtoken标示你注册后的授权码,-subdomain标示你自定义的二级域名
4.回车键执行,在弹出窗口会显示网址,如下所示:
5.该网址则为外网访问网址,即可开始外网访问之旅
浏览 14578
浏览: 428668 次
来自: 成都
使用的maven的版本很老的,而且写的不是很清楚,建议可以参考 ...
OSGi联盟官网:
你好,我在本地测试时,删除catalina.jar和tomca ...
xtunnel开源内网穿透,图形界面,功能更强大https:/ ...
xuexiele ,xuiexile

我要回帖

更多关于 安卓开发要学什么 的文章

 

随机推荐