diff options
| author | historia <[not public]> | 2026-09-18 20:03:13 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-09-18 20:03:13 -0400 |
| commit | 79764732406d6484f67d3dec045483dcb5d08c28 (patch) | |
| tree | 7a64e8581a540b97ed554f5723e2d587424ab1c6 /internal/net/server.go | |
| parent | f1e461ab6aec6b9bf056bbe2daa88a251e0f21da (diff) | |
| download | thehouseoficarus-79764732406d6484f67d3dec045483dcb5d08c28.tar.gz | |
feat: better card ascii art
Diffstat (limited to 'internal/net/server.go')
| -rw-r--r-- | internal/net/server.go | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/internal/net/server.go b/internal/net/server.go index c818eef..daf3e47 100644 --- a/internal/net/server.go +++ b/internal/net/server.go @@ -151,6 +151,14 @@ func (sess *Session) RemoteAddr() string { return "" } +// RemoteHost returns the client's IP/host without the ephemeral source port. +// Rate-limit keys must use this: RemoteAddr includes a fresh port on every +// reconnect, so keying on it lets a reconnecting attacker reset the limiter. +// Synthetic/test connections without a transport address return "". +func (sess *Session) RemoteHost() string { + return remoteHost(sess.RemoteAddr()) +} + // sessionSeq is the source of Session.seq values. It is incremented under the // adding Hub's mutex, so no extra atomicity is needed for correctness; atomic // access keeps the package-level default counter safe if Hub.Add is ever |
