projectdiscovery/nuclei · error
dialers not initialized for %s
Error message
dialers not initialized for %s
What it means
Returned by mssql.FingerprintMssql when protocolstate.GetDialersWithId(executionId) returns nil, i.e. no dialer set is registered for the current execution ID. Dialers are created when nuclei initializes a template execution; a nil result means the fingerprint code is running outside that lifecycle or with a stale/unknown execution ID.
Source
Thrown at pkg/js/libs/mssql/fingerprint.go:114
}
// @memo
func fingerprintMssql(ctx context.Context, executionId string, host string, port int) (MSSQLInfo, error) {
info := MSSQLInfo{
Host: host,
Port: port,
Protocol: "mssql",
Transport: "tcp",
}
if host == "" || port <= 0 {
return info, fmt.Errorf("invalid host or port")
}
if !protocolstate.IsHostAllowed(executionId, host) {
return info, protocolstate.ErrHostDenied.Msgf(host)
}
dialer := protocolstate.GetDialersWithId(executionId)
if dialer == nil {
return info, fmt.Errorf("dialers not initialized for %s", executionId)
}
conn, err := dialer.Fastdialer.Dial(ctx, "tcp", net.JoinHostPort(host, fmt.Sprintf("%d", port)))
if err != nil {
return info, err
}
defer func() {
_ = conn.Close()
}()
_ = conn.SetDeadline(time.Now().Add(mssqlFingerprintTimeout))
if _, err := conn.Write(preLoginRequest); err != nil {
return info, err
}
// Read TDS header first, then remaining payload by Length field.
header := make([]byte, 8)
if _, err := io.ReadFull(conn, header); err != nil {View on GitHub (pinned to 265b3a3dec)
Solutions
- Run the template through the nuclei engine so dialers are initialized per execution
- Upgrade nuclei to the current release (dialer/execution-id wiring has changed across versions)
- SDK users: ensure protocolstate initialization happens before template execution
- If reproducible on a stock run, file an issue with template and version
Defensive patterns
Strategy: try-catch
Try / catch
try {
const info = mssql.FingerprintMssql(host, port);
} catch (e) {
if (String(e).includes('dialers not initialized')) {
// engine not initialized for this execution: not recoverable from the template
throw new Error('mssql lib requires a nuclei-initialized runtime');
}
throw e;
} Prevention
- Run JS protocol code within the nuclei engine lifecycle
- Keep engine and JS libs in sync (same release)
- Embedders must initialize protocolstate dialers first
When it happens
Trigger: Invoking the mssql lib from a standalone goja runtime or SDK path that never initialized protocolstate dialers; executing after the engine recycled the execution context; version mismatch between the JS libs and the host binary.
Common situations: Embedding nuclei as a library and calling JS libs directly; unit tests exercising fingerprintMssql without engine setup. Not user-fixable from a template — during a normal nuclei run it indicates an engine or integration bug.
Related errors
- dialers not initialized for execution %s
- krbroast: no executionId on goja runtime
- not a mssql service
- dialers not initialized for %s
- invalid host or port
AI-assisted analysis of projectdiscovery/nuclei@265b3a3dec (2026-08-15).
Data as JSON: /api/errors/7333e43bb90dfaea.
Report an issue: GitHub.