shadow1ng/fscan · error

Unable to create output file {{.Arg1}}: %w

Error message

Unable to create output file {{.Arg1}}: %w

What it means

Raised in KeyloggerPlugin.checkOutputFilePermissions when os.OpenFile on the keystroke-log output path fails (permission denied, unwritable directory, or invalid path); the localized 'output_file_create_failed' message wraps the OS error.

Source

Thrown at plugins/local/keylogger.go:131

	}

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

	// 保存到文件
	if err := p.saveKeysToFile(outputFile, session); err != nil {
		session.LogError(i18n.Tr("keylogger_save_failed", err))
	}

	return nil
}

// checkOutputFilePermissions 检查输出文件权限
func (p *KeyloggerPlugin) checkOutputFilePermissions(outputFile string) error {
	file, err := os.OpenFile(outputFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)
	if err != nil {
		return fmt.Errorf("%s: %w", i18n.Tr("output_file_create_failed", outputFile), err)
	}
	_ = file.Close()
	return nil
}

// checkPlatformRequirements 检查平台特定要求
func (p *KeyloggerPlugin) checkPlatformRequirements() error {
	switch runtime.GOOS {
	case "windows":
		return p.checkWindowsRequirements()
	case "linux":
		return p.checkLinuxRequirements()
	case "darwin":
		return p.checkDarwinRequirements()
	default:
		return fmt.Errorf("%s", i18n.Tr("unsupported_platform", runtime.GOOS))
	}
}

View on GitHub (pinned to 95cc12e753)

Solutions

  1. Choose an output path in a writable directory
  2. Run with sufficient privileges to create the file (0600)
  3. Free the file if another process holds a lock on it
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at plugins/local/keylogger.go:131 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/e1181c14dbf3b2c4. Report an issue: GitHub.