From 82489c81e85ce3dca8b86a414d607dfaf5e399cd Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Fri, 3 May 2019 13:06:20 -0700 Subject: [PATCH] seems to work --- src/croc/croc.go | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/croc/croc.go b/src/croc/croc.go index da65a37c..0ef07f33 100644 --- a/src/croc/croc.go +++ b/src/croc/croc.go @@ -371,7 +371,32 @@ func (c *Client) Receive() (err error) { return } log.Debugf("ips data: %s", data) + var ips []string + json.Unmarshal(data, &ips) + if len(ips) > 1 { + port := ips[0] + ips = ips[1:] + for _, ip := range ips { + serverTry := fmt.Sprintf("%s:%s", ip, port) + conn, banner2, externalIP, errConn := tcp.ConnectToTCPServer(serverTry, c.Options.SharedSecret) + if errConn != nil { + log.Debugf("could not connect to " + serverTry) + continue + } + log.Debugf("local connection established to %s", conn, serverTry) + log.Debugf("banner: %s", banner2) + // reset to the local port + banner = banner2 + c.Options.RelayAddress = serverTry + c.ExternalIP = externalIP + c.conn[0].Close() + c.conn[0] = nil + c.conn[0] = conn + break + } + } } + c.conn[0].Send([]byte("handshake")) c.Options.RelayPorts = strings.Split(banner, ",") log.Debug("exchanged header message") @@ -731,7 +756,6 @@ func (c *Client) updateState() (err error) { Bytes: bRequest, }) if err != nil { - log.Error(err) return } c.Step3RecipientRequestFile = true