{"record":{"id":"1954f99d1636a76d","repo":"shadow1ng/fscan","slug":"domain-format-invalid","errorCode":null,"errorMessage":"domain_format_invalid","messagePattern":"domain_format_invalid","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugins/local/socks5proxy.go","lineNumber":224,"sourceCode":"\t}\n\n\t// 解析目标地址\n\taddrType := header[3]\n\tvar targetHost string\n\tvar targetPort int\n\n\tswitch addrType {\n\tcase 0x01: // IPv4\n\t\taddr := make([]byte, 6)\n\t\tif _, err := io.ReadFull(clientConn, addr); err != nil {\n\t\t\treturn nil, 0, fmt.Errorf(\"%s\", i18n.GetText(\"ipv4_address_invalid\"))\n\t\t}\n\t\ttargetHost = fmt.Sprintf(\"%d.%d.%d.%d\", addr[0], addr[1], addr[2], addr[3])\n\t\ttargetPort = int(addr[4])<<8 + int(addr[5])\n\tcase 0x03: // 域名\n\t\tlenBuf := make([]byte, 1)\n\t\tif _, err := io.ReadFull(clientConn, lenBuf); err != nil {\n\t\t\treturn nil, 0, fmt.Errorf(\"%s\", i18n.GetText(\"domain_format_invalid\"))\n\t\t}\n\t\tdomainLen := int(lenBuf[0])\n\t\tif domainLen == 0 {\n\t\t\treturn nil, 0, fmt.Errorf(\"%s\", i18n.GetText(\"domain_length_invalid\"))\n\t\t}\n\t\taddr := make([]byte, domainLen+2)\n\t\tif _, err := io.ReadFull(clientConn, addr); err != nil {\n\t\t\treturn nil, 0, fmt.Errorf(\"%s\", i18n.GetText(\"domain_length_invalid\"))\n\t\t}\n\t\ttargetHost = string(addr[:domainLen])\n\t\ttargetPort = int(addr[domainLen])<<8 + int(addr[domainLen+1])\n\tcase 0x04: // IPv6\n\t\taddr := make([]byte, 18)\n\t\tif _, err := io.ReadFull(clientConn, addr); err != nil {\n\t\t\treturn nil, 0, fmt.Errorf(\"%s\", i18n.GetText(\"ipv6_address_invalid\"))\n\t\t}\n\t\t// IPv6地址解析（简化实现）\n\t\ttargetHost = net.IP(addr[:16]).String()","sourceCodeStart":206,"sourceCodeEnd":242,"githubUrl":"https://github.com/shadow1ng/fscan/blob/95cc12e753bf43de7004e5aef42a9ffba3934303/plugins/local/socks5proxy.go#L206-L242","documentation":"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.","triggerScenarios":"Thrown at plugins/local/socks5proxy.go:224 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"95cc12e753bf43de7004e5aef42a9ffba3934303","analyzedAt":"2026-09-06T17:07:30.094Z","contentChangedAt":"2026-09-06T17:07:30.094Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}