shadow1ng/fscan · error

ipv6_address_invalid

Error message

ipv6_address_invalid

What it means

Generic guard in the IPv6 (address type 0x04) branch: io.ReadFull failed while reading the 18-byte IPv6 address+port payload. It indicates a truncated or unreadable IPv6 address block (connection closed/timed out mid-read), not an invalid IPv6 textual format.

Source

Thrown at plugins/local/socks5proxy.go:239

	case 0x03: // 域名
		lenBuf := make([]byte, 1)
		if _, err := io.ReadFull(clientConn, lenBuf); err != nil {
			return nil, 0, fmt.Errorf("%s", i18n.GetText("domain_format_invalid"))
		}
		domainLen := int(lenBuf[0])
		if domainLen == 0 {
			return nil, 0, fmt.Errorf("%s", i18n.GetText("domain_length_invalid"))
		}
		addr := make([]byte, domainLen+2)
		if _, err := io.ReadFull(clientConn, addr); err != nil {
			return nil, 0, fmt.Errorf("%s", i18n.GetText("domain_length_invalid"))
		}
		targetHost = string(addr[:domainLen])
		targetPort = int(addr[domainLen])<<8 + int(addr[domainLen+1])
	case 0x04: // IPv6
		addr := make([]byte, 18)
		if _, err := io.ReadFull(clientConn, addr); err != nil {
			return nil, 0, fmt.Errorf("%s", i18n.GetText("ipv6_address_invalid"))
		}
		// IPv6地址解析(简化实现)
		targetHost = net.IP(addr[:16]).String()
		targetPort = int(addr[16])<<8 + int(addr[17])
	default:
		// 发送不支持的地址类型响应
		response := []byte{0x05, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
		_, _ = clientConn.Write(response)
		return nil, 0, fmt.Errorf(i18n.GetText("socks5_unsupported_address_type")+": %d", addrType)
	}
	if targetPort == 0 {
		return nil, 0, fmt.Errorf("%s", i18n.GetText("socks5_invalid_request"))
	}

	// 连接目标服务器
	targetAddr := net.JoinHostPort(targetHost, strconv.Itoa(int(targetPort)))
	targetConn, err := net.DialTimeout("tcp", targetAddr, 10*time.Second)
	if err != nil {

View on GitHub (pinned to 95cc12e753)

Solutions

  1. Ensure the client writes all 18 bytes (16 address + 2 port) for IPv6 targets
  2. Check connection stability and read deadlines
  3. Treat repeated occurrences as a broken or non-SOCKS5 client
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at plugins/local/socks5proxy.go:239 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of shadow1ng/fscan@95cc12e753 (2026-09-06). Data as JSON: /api/errors/42e2b94e8e291ade. Report an issue: GitHub.