shadow1ng/fscan · error
not a reply
Error message
not a reply
What it means
Guard in rpcNullCall: the reply's message-type field is not 1 (REPLY). The peer answered with a CALL or garbage, meaning the endpoint is not a functioning ONC RPC server for this program/version.
Source
Thrown at plugins/services/nfs.go:103
rpcCall := p.buildRPCCall(xid, program, version, 0, nil)
rpcFragment := p.wrapRPCFragment(rpcCall)
if _, err := conn.Write(rpcFragment); err != nil {
return err
}
reply, err := readRPCFragment(conn, 512)
if err != nil || len(reply) < 24 {
return fmt.Errorf("short response")
}
replyXID := binary.BigEndian.Uint32(reply[0:4])
if replyXID != xid {
return fmt.Errorf("xid mismatch")
}
msgType := binary.BigEndian.Uint32(reply[4:8])
if msgType != 1 {
return fmt.Errorf("not a reply")
}
return nil
}
func (p *NFSPlugin) getExports(conn interface {
Read([]byte) (int, error)
Write([]byte) (int, error)
}) ([]string, error) {
// Sun RPC call: program=MOUNT(100005), version=3, procedure=EXPORT(5)
xid := uint32(0x12345678)
rpcCall := p.buildRPCCall(xid, 100005, 3, 5, nil)
rpcFragment := p.wrapRPCFragment(rpcCall)
if _, err := conn.Write(rpcFragment); err != nil {
return nil, err
}
reply, err := readRPCFragment(conn, 4096)View on GitHub (pinned to 95cc12e753)
Solutions
- Verify the target port serves RPC (use rpcinfo -p remotely)
- Check program number and version in the probe
- Treat the port as non-RPC and skip further NFS checks
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at plugins/services/nfs.go:103 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/8476e5da0e39832d.
Report an issue: GitHub.