diff --git a/cmd/frpc/sub/http.go b/cmd/frpc/sub/http.go index 081102cb..4af634cb 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 wss") 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 7d5fbe8b..2b1ad41b 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 wss") 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 1a04fbf3..0f60d4e2 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 wss") 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 0d73c763..bfaf9f02 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 wss") 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 558294da..49281c1c 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 wss") 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 14ca6ed3..b4038f8e 100644 --- a/conf/frpc_full.ini +++ b/conf/frpc_full.ini @@ -46,7 +46,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 wss, 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 fe87e08d..8afe87a8 100644 --- a/models/config/client_common.go +++ b/models/config/client_common.go @@ -264,7 +264,7 @@ func UnmarshalClientConfFromIni(content string) (cfg ClientCommonConf, err error 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 != "wss" { err = fmt.Errorf("Parse conf error: invalid protocol") return } diff --git a/utils/net/conn.go b/utils/net/conn.go index 6b1d3fa2..668477e7 100644 --- a/utils/net/conn.go +++ b/utils/net/conn.go @@ -221,7 +221,9 @@ func ConnectServerByProxy(proxyURL string, protocol string, addr string) (c net. // http proxy is not supported for kcp return ConnectServer(protocol, addr) case "websocket": - return ConnectWebsocketServer(addr) + return ConnectWebsocketServer(addr, "http", "ws") + case "wss": + 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 36b6440c..8e71b25b 100644 --- a/utils/net/websocket.go +++ b/utils/net/websocket.go @@ -79,14 +79,14 @@ func (p *WebsocketListener) Addr() net.Addr { } // addr: domain:port -func ConnectWebsocketServer(addr string) (net.Conn, error) { - addr = "ws://" + addr + FrpWebsocketPath +func ConnectWebsocketServer(addr string, httpProtocol string, wsProtocol string) (net.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