From: Björn Busse Date: Sun, 18 Oct 2015 20:07:57 +0000 (+0200) Subject: Perform DNS lookup of client addresses X-Git-Tag: 1.3~6 X-Git-Url: http://www.git.cypherpunks.ru/?p=goircd.git;a=commitdiff_plain;h=66eaa48372228e098b464e8eac64d15a8582e9ef Perform DNS lookup of client addresses --- 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",