Ngrok内网穿透原理

Ngrok穿透原理

流程图

Ngrok流程

  1. Client与Server创建一个scoket链接,而后发送一个Auth请求,Server验证后,返回AuthResp
  2. 接着Client发送ReqTunnel像服务器注册通道,好比,HTTP,HTTPS,TCP,其中包含想要申请的二级域名,服务器返回NewTunnel,若是Client的二级域名请求为空,服务器会随机分配。
  3. Server等待浏览器,APP等访问,当有APP访问,Server会检查二级域名是不是已经注册了的,若是是,则发送ReqProxy给Client。Client收到请求后会建立一个新的Socket链接到Server,并发送RegProxy请求,服务器收到后,返回StartProxy,并开始使用新的Socket链接作中继。

通讯数据格式

数据经过Socket通讯,主要以Json格式数据为主。浏览器

在数据的开头,有2个分别以64bit的无符号整型<message length><message payload>表示数据的长度和负载。服务器

数据格式:session

  • Auth
type Auth struct {
	Version   string // protocol version
	MmVersion string // major/minor software version (informational only)
	User      string
	Password  string
	OS        string
	Arch      string
	ClientId  string // empty for new sessions
}
  • AuthResp并发

    type AuthResp struct {
    	Version   string
    	MmVersion string
    	ClientId  string
    	Error     string
    }
  • ReqTunneldom

    type ReqTunnel struct {
    	ReqId    string
    	Protocol string
    
    	// http only
    	Hostname  string
    	Subdomain string
    	HttpAuth  string
    
    	// tcp only
    	RemotePort uint16
    }
  • NewTunneltcp

    type NewTunnel struct {
    	ReqId    string
    	Url      string
    	Protocol string
    	Error    string
    }
  • ReqProxyui

    type ReqProxy struct {
    }
  • RegProxythis

    type RegProxy struct {
    	ClientId string
    }
  • StartProxycode

    type StartProxy struct {
    	Url        string // URL of the tunnel this connection connection is being proxied for
    	ClientAddr string // Network address of the client initiating the connection to the tunnel
    }
  • Pingorm

    type Ping struct {
    }
  • Pong

    type Pong struct {
    }
相关文章
相关标签/搜索