From 59f35fe9527215f03d3fd64bbe6e19fd678f21f5 Mon Sep 17 00:00:00 2001 From: stl0755 Date: Wed, 14 Aug 2019 10:58:39 +0800 Subject: [PATCH] protocol = websocketsecure websocketsecure support in frpc --- cmd/frpc/sub/http.go | 2 +- cmd/frpc/sub/https.go | 2 +- cmd/frpc/sub/stcp.go | 2 +- cmd/frpc/sub/udp.go | 2 +- cmd/frpc/sub/xtcp.go | 2 +- conf/frpc_full.ini | 2 +- models/config/client_common.go | 2 +- utils/net/conn.go | 4 +++- utils/net/websocket.go | 6 +++--- 9 files changed, 13 insertions(+), 11 deletions(-) diff --git a/cmd/frpc/sub/http.go b/cmd/frpc/sub/http.go index 08e915cd..f56bd60b 100644 --- a/cmd/frpc/sub/http.go +++ b/cmd/frpc/sub/http.go @@ -28,7 +28,7 @@ import ( func init() { httpCmd.PersistentFlags().StringVarP(&serverAddr, "server_addr", "s", "127.0.0.1:7000", "frp server's address") httpCmd.PersistentFlags().StringVarP(&user, "user", "u", "", "user") - httpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket") + httpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket or websocketsecure") httpCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token") httpCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level") httpCmd.PersistentFlags().StringVarP(&logFile, "log_file", "", "console", "console or file path") diff --git a/cmd/frpc/sub/https.go b/cmd/frpc/sub/https.go index 5eb6a7d0..172718a8 100644 --- a/cmd/frpc/sub/https.go +++ b/cmd/frpc/sub/https.go @@ -28,7 +28,7 @@ import ( func init() { httpsCmd.PersistentFlags().StringVarP(&serverAddr, "server_addr", "s", "127.0.0.1:7000", "frp server's address") httpsCmd.PersistentFlags().StringVarP(&user, "user", "u", "", "user") - httpsCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket") + httpsCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket or websocketsecure") httpsCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token") httpsCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level") httpsCmd.PersistentFlags().StringVarP(&logFile, "log_file", "", "console", "console or file path") diff --git a/cmd/frpc/sub/stcp.go b/cmd/frpc/sub/stcp.go index c91040ee..42803cc2 100644 --- a/cmd/frpc/sub/stcp.go +++ b/cmd/frpc/sub/stcp.go @@ -27,7 +27,7 @@ import ( func init() { stcpCmd.PersistentFlags().StringVarP(&serverAddr, "server_addr", "s", "127.0.0.1:7000", "frp server's address") stcpCmd.PersistentFlags().StringVarP(&user, "user", "u", "", "user") - stcpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket") + stcpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket or websocketsecure") stcpCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token") stcpCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level") stcpCmd.PersistentFlags().StringVarP(&logFile, "log_file", "", "console", "console or file path") diff --git a/cmd/frpc/sub/udp.go b/cmd/frpc/sub/udp.go index 3572e416..873eb9a3 100644 --- a/cmd/frpc/sub/udp.go +++ b/cmd/frpc/sub/udp.go @@ -27,7 +27,7 @@ import ( func init() { udpCmd.PersistentFlags().StringVarP(&serverAddr, "server_addr", "s", "127.0.0.1:7000", "frp server's address") udpCmd.PersistentFlags().StringVarP(&user, "user", "u", "", "user") - udpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket") + udpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket or websocketsecure") udpCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token") udpCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level") udpCmd.PersistentFlags().StringVarP(&logFile, "log_file", "", "console", "console or file path") diff --git a/cmd/frpc/sub/xtcp.go b/cmd/frpc/sub/xtcp.go index c15ac5ad..deb26c78 100644 --- a/cmd/frpc/sub/xtcp.go +++ b/cmd/frpc/sub/xtcp.go @@ -27,7 +27,7 @@ import ( func init() { xtcpCmd.PersistentFlags().StringVarP(&serverAddr, "server_addr", "s", "127.0.0.1:7000", "frp server's address") xtcpCmd.PersistentFlags().StringVarP(&user, "user", "u", "", "user") - xtcpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket") + xtcpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket or websocketsecure") xtcpCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token") xtcpCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level") xtcpCmd.PersistentFlags().StringVarP(&logFile, "log_file", "", "console", "console or file path") diff --git a/conf/frpc_full.ini b/conf/frpc_full.ini index 71513eea..de550b2f 100644 --- a/conf/frpc_full.ini +++ b/conf/frpc_full.ini @@ -41,7 +41,7 @@ user = your_name login_fail_exit = true # communication protocol used to connect to server -# now it supports tcp and kcp and websocket, default is tcp +# now it supports tcp and kcp and websocket and websocketsecure, default is tcp protocol = tcp # if tls_enable is true, frpc will connect frps by tls diff --git a/models/config/client_common.go b/models/config/client_common.go index 1cd9ffc5..58198da6 100644 --- a/models/config/client_common.go +++ b/models/config/client_common.go @@ -189,7 +189,7 @@ func UnmarshalClientConfFromIni(defaultCfg *ClientCommonConf, content string) (c if tmpStr, ok = conf.Get("common", "protocol"); ok { // Now it only support tcp and kcp and websocket. - if tmpStr != "tcp" && tmpStr != "kcp" && tmpStr != "websocket" { + if tmpStr != "tcp" && tmpStr != "kcp" && tmpStr != "websocket" && tmpStr != "websocketsecure" { err = fmt.Errorf("Parse conf error: invalid protocol") return } diff --git a/utils/net/conn.go b/utils/net/conn.go index 9f415ec8..0fb69d1d 100644 --- a/utils/net/conn.go +++ b/utils/net/conn.go @@ -203,7 +203,9 @@ func ConnectServerByProxy(proxyUrl string, protocol string, addr string) (c Conn // http proxy is not supported for kcp return ConnectServer(protocol, addr) case "websocket": - return ConnectWebsocketServer(addr) + return ConnectWebsocketServer(addr,"http","ws") + case "websocketsecure": + return ConnectWebsocketServer(addr,"https","wss") default: return nil, fmt.Errorf("unsupport protocol: %s", protocol) } diff --git a/utils/net/websocket.go b/utils/net/websocket.go index 99423373..2c81b021 100644 --- a/utils/net/websocket.go +++ b/utils/net/websocket.go @@ -81,14 +81,14 @@ func (p *WebsocketListener) Close() error { } // addr: domain:port -func ConnectWebsocketServer(addr string) (Conn, error) { - addr = "ws://" + addr + FrpWebsocketPath +func ConnectWebsocketServer(addr string, httpProtocol string, wsProtocol string) (Conn, error) { + addr = wsProtocol +"://" + addr + FrpWebsocketPath uri, err := url.Parse(addr) if err != nil { return nil, err } - origin := "http://" + uri.Host + origin := httpProtocol + "://" + uri.Host cfg, err := websocket.NewConfig(addr, origin) if err != nil { return nil, err