Skip to content

Commit c652b8e

Browse files
authored
fix ipv6 address parsing (fatedier#2978)
1 parent 5b8b145 commit c652b8e

File tree

4 files changed

+19
-16
lines changed

4 files changed

+19
-16
lines changed

client/admin_api.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ import (
1818
"encoding/json"
1919
"fmt"
2020
"io"
21+
"net"
2122
"net/http"
2223
"os"
2324
"sort"
25+
"strconv"
2426
"strings"
2527

2628
"github.com/fatedier/frp/client/proxy"
@@ -105,48 +107,48 @@ func NewProxyStatusResp(status *proxy.WorkingStatus, serverAddr string) ProxySta
105107
switch cfg := status.Cfg.(type) {
106108
case *config.TCPProxyConf:
107109
if cfg.LocalPort != 0 {
108-
psr.LocalAddr = fmt.Sprintf("%s:%d", cfg.LocalIP, cfg.LocalPort)
110+
psr.LocalAddr = net.JoinHostPort(cfg.LocalIP, strconv.Itoa(cfg.LocalPort))
109111
}
110112
psr.Plugin = cfg.Plugin
111113
if status.Err != "" {
112-
psr.RemoteAddr = fmt.Sprintf("%s:%d", serverAddr, cfg.RemotePort)
114+
psr.RemoteAddr = net.JoinHostPort(serverAddr, strconv.Itoa(cfg.RemotePort))
113115
} else {
114116
psr.RemoteAddr = serverAddr + status.RemoteAddr
115117
}
116118
case *config.UDPProxyConf:
117119
if cfg.LocalPort != 0 {
118-
psr.LocalAddr = fmt.Sprintf("%s:%d", cfg.LocalIP, cfg.LocalPort)
120+
psr.LocalAddr = net.JoinHostPort(cfg.LocalIP, strconv.Itoa(cfg.LocalPort))
119121
}
120122
if status.Err != "" {
121-
psr.RemoteAddr = fmt.Sprintf("%s:%d", serverAddr, cfg.RemotePort)
123+
psr.RemoteAddr = net.JoinHostPort(serverAddr, strconv.Itoa(cfg.RemotePort))
122124
} else {
123125
psr.RemoteAddr = serverAddr + status.RemoteAddr
124126
}
125127
case *config.HTTPProxyConf:
126128
if cfg.LocalPort != 0 {
127-
psr.LocalAddr = fmt.Sprintf("%s:%d", cfg.LocalIP, cfg.LocalPort)
129+
psr.LocalAddr = net.JoinHostPort(cfg.LocalIP, strconv.Itoa(cfg.LocalPort))
128130
}
129131
psr.Plugin = cfg.Plugin
130132
psr.RemoteAddr = status.RemoteAddr
131133
case *config.HTTPSProxyConf:
132134
if cfg.LocalPort != 0 {
133-
psr.LocalAddr = fmt.Sprintf("%s:%d", cfg.LocalIP, cfg.LocalPort)
135+
psr.LocalAddr = net.JoinHostPort(cfg.LocalIP, strconv.Itoa(cfg.LocalPort))
134136
}
135137
psr.Plugin = cfg.Plugin
136138
psr.RemoteAddr = status.RemoteAddr
137139
case *config.STCPProxyConf:
138140
if cfg.LocalPort != 0 {
139-
psr.LocalAddr = fmt.Sprintf("%s:%d", cfg.LocalIP, cfg.LocalPort)
141+
psr.LocalAddr = net.JoinHostPort(cfg.LocalIP, strconv.Itoa(cfg.LocalPort))
140142
}
141143
psr.Plugin = cfg.Plugin
142144
case *config.XTCPProxyConf:
143145
if cfg.LocalPort != 0 {
144-
psr.LocalAddr = fmt.Sprintf("%s:%d", cfg.LocalIP, cfg.LocalPort)
146+
psr.LocalAddr = net.JoinHostPort(cfg.LocalIP, strconv.Itoa(cfg.LocalPort))
145147
}
146148
psr.Plugin = cfg.Plugin
147149
case *config.SUDPProxyConf:
148150
if cfg.LocalPort != 0 {
149-
psr.LocalAddr = fmt.Sprintf("%s:%d", cfg.LocalIP, cfg.LocalPort)
151+
psr.LocalAddr = net.JoinHostPort(cfg.LocalIP, strconv.Itoa(cfg.LocalPort))
150152
}
151153
psr.Plugin = cfg.Plugin
152154
}

client/proxy/proxy.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ package proxy
1717
import (
1818
"bytes"
1919
"context"
20-
"fmt"
2120
"io"
2221
"net"
2322
"strconv"
@@ -307,7 +306,7 @@ func (pxy *XTCPProxy) InWorkConn(conn net.Conn, m *msg.StartWorkConn) {
307306
Sid: natHoleSidMsg.Sid,
308307
}
309308
raddr, _ := net.ResolveUDPAddr("udp",
310-
fmt.Sprintf("%s:%d", pxy.clientCfg.ServerAddr, pxy.serverUDPPort))
309+
net.JoinHostPort(pxy.clientCfg.ServerAddr, strconv.Itoa(pxy.serverUDPPort)))
311310
clientConn, err := net.DialUDP("udp", nil, raddr)
312311
if err != nil {
313312
xl.Error("dial server udp addr error: %v", err)
@@ -415,7 +414,7 @@ func (pxy *XTCPProxy) InWorkConn(conn net.Conn, m *msg.StartWorkConn) {
415414
}
416415

417416
func (pxy *XTCPProxy) sendDetectMsg(addr string, port int, laddr *net.UDPAddr, content []byte) (err error) {
418-
daddr, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", addr, port))
417+
daddr, err := net.ResolveUDPAddr("udp", net.JoinHostPort(addr, strconv.Itoa(port)))
419418
if err != nil {
420419
return err
421420
}
@@ -448,7 +447,7 @@ type UDPProxy struct {
448447
}
449448

450449
func (pxy *UDPProxy) Run() (err error) {
451-
pxy.localAddr, err = net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", pxy.cfg.LocalIP, pxy.cfg.LocalPort))
450+
pxy.localAddr, err = net.ResolveUDPAddr("udp", net.JoinHostPort(pxy.cfg.LocalIP, strconv.Itoa(pxy.cfg.LocalPort)))
452451
if err != nil {
453452
return
454453
}
@@ -570,7 +569,7 @@ type SUDPProxy struct {
570569
}
571570

572571
func (pxy *SUDPProxy) Run() (err error) {
573-
pxy.localAddr, err = net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", pxy.cfg.LocalIP, pxy.cfg.LocalPort))
572+
pxy.localAddr, err = net.ResolveUDPAddr("udp", net.JoinHostPort(pxy.cfg.LocalIP, strconv.Itoa(pxy.cfg.LocalPort)))
574573
if err != nil {
575574
return
576575
}

client/visitor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func (sv *XTCPVisitor) handleConn(userConn net.Conn) {
212212
}
213213

214214
raddr, err := net.ResolveUDPAddr("udp",
215-
fmt.Sprintf("%s:%d", sv.ctl.clientCfg.ServerAddr, sv.ctl.serverUDPPort))
215+
net.JoinHostPort(sv.ctl.clientCfg.ServerAddr, strconv.Itoa(sv.ctl.serverUDPPort)))
216216
if err != nil {
217217
xl.Error("resolve server UDP addr error")
218218
return

pkg/config/proxy.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ package config
1616

1717
import (
1818
"fmt"
19+
"net"
1920
"reflect"
21+
"strconv"
2022
"strings"
2123

2224
"github.com/fatedier/frp/pkg/consts"
@@ -372,7 +374,7 @@ func (cfg *BaseProxyConf) decorate(prefix string, name string, section *ini.Sect
372374
}
373375

374376
if cfg.HealthCheckType == "http" && cfg.Plugin == "" && cfg.HealthCheckURL != "" {
375-
s := fmt.Sprintf("http://%s:%d", cfg.LocalIP, cfg.LocalPort)
377+
s := "http://" + net.JoinHostPort(cfg.LocalIP, strconv.Itoa(cfg.LocalPort))
376378
if !strings.HasPrefix(cfg.HealthCheckURL, "/") {
377379
s += "/"
378380
}

0 commit comments

Comments
 (0)