shadow1ng/fscan · error
domain_format_invalid
Error message
domain_format_invalid
What it means
Generic guard in the domain (address type 0x03) branch: io.ReadFull failed while reading the 1-byte domain length prefix. It fires when the connection ends or times out before the client sends the domain-name length byte, i.e. a truncated domain request rather than a syntactically bad domain.
Source
Thrown at plugins/local/socks5proxy.go:224
}
// 解析目标地址
addrType := header[3]
var targetHost string
var targetPort int
switch addrType {
case 0x01: // IPv4
addr := make([]byte, 6)
if _, err := io.ReadFull(clientConn, addr); err != nil {
return nil, 0, fmt.Errorf("%s", i18n.GetText("ipv4_address_invalid"))
}
targetHost = fmt.Sprintf("%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3])
targetPort = int(addr[4])<<8 + int(addr[5])
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()View on GitHub (pinned to 95cc12e753)
Solutions
- Verify the client sends the complete domain request (length byte, domain bytes, 2 port bytes)
- Check for intermediate middleboxes or timeouts cutting the connection
- Set an explicit read deadline so partial reads fail deterministically
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at plugins/local/socks5proxy.go:224 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/1954f99d1636a76d.
Report an issue: GitHub.