shadow1ng/fscan · error

smbv2_negotiate_read_failed: %w

Error message

smbv2_negotiate_read_failed: %w

What it means

Guard in probeSMBv2: reading the SMBv2 negotiate response failed (timeout/reset), so the dialect and capabilities offered by the server cannot be determined and SMBv2 probing aborts.

Source

Thrown at plugins/services/smb_protocol.go:309

// probeSMBv2 处理SMBv2协议信息收集
func probeSMBv2(ctx context.Context, target string, timeout time.Duration, session *common.ScanSession) (*SMBTarget, error) {
	conn2, err := session.DialTCP(ctx, "tcp", target, timeout)
	if err != nil {
		return nil, fmt.Errorf(i18n.Tr("service_connection_failed", "%w"), err)
	}
	defer func() { _ = conn2.Close() }()

	_ = conn2.SetDeadline(time.Now().Add(timeout))

	// 发送SMBv2协商包
	_, err = conn2.Write(smbv2NegotiatePacket)
	if err != nil {
		return nil, fmt.Errorf("%s: %w", i18n.GetText("smbv2_negotiate_send_failed"), err)
	}

	r2, err := readSMBMessage(conn2)
	if err != nil {
		return nil, fmt.Errorf("%s: %w", i18n.GetText("smbv2_negotiate_read_failed"), err)
	}

	// 构建NTLM数据包
	var ntlmData []byte
	if len(r2) > 70 && hex.EncodeToString(r2[70:71]) == "03" {
		flags := []byte{0x15, 0x82, 0x08, 0xa0}
		ntlmData = buildNTLMSSPData(flags)
	} else {
		flags := []byte{0x05, 0x80, 0x08, 0xa0}
		ntlmData = buildNTLMSSPData(flags)
	}

	// 发送Session Setup
	_, err = conn2.Write(smbv2SessionSetupPacket)
	if err != nil {
		return nil, fmt.Errorf("%s: %w", i18n.GetText("smbv2_session_send_failed"), err)
	}

View on GitHub (pinned to 95cc12e753)

Solutions

  1. Retry with an increased deadline
  2. Verify the target speaks SMBv2 on the port
  3. Check network stability to the host
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at plugins/services/smb_protocol.go:309 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/b7012cdf8b713682. Report an issue: GitHub.