1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-06-23 16:05:24 +00:00

special handling for IPv6 from URL

This commit is contained in:
Darien Raymond 2017-11-21 18:46:28 +01:00
parent b0ac43a8fc
commit dd159cce6c
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
2 changed files with 18 additions and 0 deletions

View File

@ -73,6 +73,12 @@ type Address interface {
// ParseAddress parses a string into an Address. The return value will be an IPAddress when
// the string is in the form of IPv4 or IPv6 address, or a DomainAddress otherwise.
func ParseAddress(addr string) Address {
// Handle IPv6 address in form as "[2001:4860:0:2001::68]"
lenAddr := len(addr)
if lenAddr > 0 && addr[0] == '[' && addr[lenAddr-1] == ']' {
addr = addr[1 : lenAddr-1]
}
ip := net.ParseIP(addr)
if ip != nil {
return IPAddress(ip)

View File

@ -73,3 +73,15 @@ func TestNetIPv4Address(t *testing.T) {
assert(addr, IsIPv4)
assert(addr.String(), Equals, "1.2.3.4")
}
func TestParseIPv6Address(t *testing.T) {
assert := With(t)
ip := ParseAddress("[2001:4860:0:2001::68]")
assert(ip, IsIPv6)
assert(ip.String(), Equals, "[2001:4860:0:2001::68]")
ip = ParseAddress("[::ffff:123.151.71.143]")
assert(ip, IsIPv4)
assert(ip.String(), Equals, "123.151.71.143")
}