From bc931b305d59cdf3d068eacff3c8d81536d3a39f Mon Sep 17 00:00:00 2001 From: "rui.zheng" Date: Sat, 3 Sep 2016 09:06:34 +0800 Subject: [PATCH] fix addr encode --- socks5.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/socks5.go b/socks5.go index 19d03e4..51aefa7 100644 --- a/socks5.go +++ b/socks5.go @@ -302,13 +302,21 @@ func (addr *Addr) Encode(b []byte) (int, error) { pos := 1 switch addr.Type { case AddrIPv4: - pos += copy(b[pos:], net.ParseIP(addr.Host).To4()) + ip4 := net.ParseIP(addr.Host).To4() + if ip4 == nil { + ip4 = net.IPv4zero.To4() + } + pos += copy(b[pos:], ip4) case AddrDomain: b[pos] = byte(len(addr.Host)) pos++ pos += copy(b[pos:], []byte(addr.Host)) case AddrIPv6: - pos += copy(b[pos:], net.ParseIP(addr.Host).To16()) + ip16 := net.ParseIP(addr.Host).To16() + if ip16 == nil { + ip16 = net.IPv6zero.To16() + } + pos += copy(b[pos:], ip16) default: b[0] = AddrIPv4 copy(b[pos:pos+4], net.IPv4zero.To4())