shadow1ng/fscan · error
short response
Error message
short response
What it means
Guard in rpcNullCall: the RPC NULL procedure reply fragment was either unreadable or under the 24-byte minimum length of an ONC RPC reply header. The fragment is too short to contain XID, message type, and status, so the probe cannot validate the RPC program.
Solutions
- Verify the port actually runs an ONC RPC service (rpcbind/NFS)
- Increase the timeout and retry; fragmented reads can be cut short
- Check for middleboxes truncating TCP streams
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at plugins/services/nfs.go:94 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/7cd0d62bb5c07438.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/services/nfs.go:94
Banner: "NFS service detected",
}
}
func (p *NFSPlugin) rpcNullCall(conn interface {
Read([]byte) (int, error)
Write([]byte) (int, error)
}, program, version uint32) error {
xid := uint32(0x12340000 + program)
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)View on GitHub (pinned to 95cc12e753)