shadow1ng/fscan · error

service_not_identified

Error message

service_not_identified

What it means

Guard in PostgreSQL identifyService: the error text from the connection/login probe contained none of the PostgreSQL keywords (postgres, authentication, password, role, user, pq:), so the port cannot be confirmed as PostgreSQL and identification fails with this shared sentinel.

Source

Thrown at plugins/services/postgresql.go:263

		state.IncrementTCPSuccessPacketCount()
	}

	var banner string
	if err != nil {
		errMsg := strings.ToLower(err.Error())
		if strings.Contains(errMsg, "postgres") ||
			strings.Contains(errMsg, "authentication") ||
			strings.Contains(errMsg, "database") ||
			strings.Contains(errMsg, "password") ||
			strings.Contains(errMsg, "role") ||
			strings.Contains(errMsg, "user") ||
			strings.Contains(errMsg, "pq:") {
			banner = "PostgreSQL"
		} else {
			return &ScanResult{
				Success: false,
				Service: "postgresql",
				Error:   fmt.Errorf("%s", i18n.Tr("service_not_identified", "PostgreSQL")),
			}
		}
	} else {
		banner = "PostgreSQL"
	}

	session.LogSuccess(i18n.Tr("postgresql_service", target, banner))

	return &ScanResult{
		Type:    plugins.ResultTypeService,
		Success: true,
		Service: "postgresql",
		Banner:  banner,
	}
}

func init() {
	RegisterPluginWithPorts("postgresql", func() Plugin {

View on GitHub (pinned to 95cc12e753)

Solutions

  1. Confirm the port actually runs PostgreSQL
  2. Expand the keyword list used for banner matching
  3. Inspect the raw error message to see what service answered
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at plugins/services/postgresql.go:263 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/9698e9b5de39be6e. Report an issue: GitHub.