From 66eaa48372228e098b464e8eac64d15a8582e9ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Busse?= Date: Sun, 18 Oct 2015 22:07:57 +0200 Subject: [PATCH] Perform DNS lookup of client addresses --- README | 2 +- client.go | 13 ++++++++++++- room.go | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/README b/README index b6291ea..3793978 100644 --- a/README +++ b/README @@ -11,7 +11,7 @@ It does not aim to replace full featured mass scalable IRC networks: * It can not connect to other servers. Just standalone installation * It has few basic IRC commands * There is no support for channel operators, modes, votes, invites -* No ident lookups, reverse DNS queries +* No ident lookups But it has some convincing features: diff --git a/client.go b/client.go index a43cc1e..fbaf8a3 100644 --- a/client.go +++ b/client.go @@ -51,8 +51,19 @@ type Client struct { sync.Mutex } +func (c Client) Host() string { + addr := c.conn.RemoteAddr().String() + if host, _, err := net.SplitHostPort(addr); err == nil { + addr = host + } + if domains, err := net.LookupAddr(addr); err == nil { + addr = strings.TrimSuffix(domains[0], ".") + } + return addr +} + func (c Client) String() string { - return *c.nickname + "!" + *c.username + "@" + c.conn.RemoteAddr().String() + return *c.nickname + "!" + *c.username + "@" + c.Host() } func NewClient(conn net.Conn) *Client { diff --git a/room.go b/room.go index 2a5f22a..276397f 100644 --- a/room.go +++ b/room.go @@ -142,7 +142,7 @@ func (room *Room) Processor(events <-chan ClientEvent) { "352", *room.name, *m.username, - m.conn.RemoteAddr().String(), + m.Host(), *hostname, *m.nickname, "H",