Skip to content

Commit

Permalink
Add X-Forwarded-For IP to the client's remote address
Browse files Browse the repository at this point in the history
Instead of replacing connection's host with value specified by
this header, we will simply add the address to the logging only.
So instead of having something like:
```
192.168.1.1:5678 - wid:10 - Client connection created
```
we could have:
```
1.2.3.4/192.168.1.1:5678 - wid:10 - Client connection created
```
As seen above, this PR simply prefixes the connection's remote address
with the header's value (if a valid IP).

Related to #2734
Resolves #2767

Signed-off-by: Ivan Kozlovic <ivan@synadia.com>
  • Loading branch information
kozlovic committed Jan 3, 2022
1 parent fbcf1ab commit 8d6eacc
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 9 deletions.
13 changes: 8 additions & 5 deletions server/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -610,12 +610,15 @@ func (c *client) initClient() {
if conn = addr.String(); conn != _EMPTY_ {
host, port, _ := net.SplitHostPort(conn)
iPort, _ := strconv.Atoi(port)
c.port = uint16(iPort)
c.host, c.port = host, uint16(iPort)
if c.isWebsocket() && c.ws.clientIP != _EMPTY_ {
c.host = c.ws.clientIP
conn = net.JoinHostPort(c.host, port)
} else {
c.host = host
cip := c.ws.clientIP
// Surround IPv6 addresses with square brackets, as
// net.JoinHostPort would do...
if strings.Contains(cip, ":") {
cip = "[" + cip + "]"
}
conn = fmt.Sprintf("%s/%s", cip, conn)
}
// Now that we have extracted host and port, escape
// the string because it is going to be used in Sprintf
Expand Down
8 changes: 4 additions & 4 deletions server/websocket_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3989,12 +3989,12 @@ func TestWSXForwardedFor(t *testing.T) {
}
select {
case d := <-l.ch:
ipAndColumn := fmt.Sprintf("%s:", test.expectedValue)
ipAndSlash := fmt.Sprintf("%s/", test.expectedValue)
if test.useHdrValue {
if !strings.HasPrefix(d, ipAndColumn) {
t.Fatalf("Expected debug statement to start with: %q, got %q", ipAndColumn, d)
if !strings.HasPrefix(d, ipAndSlash) {
t.Fatalf("Expected debug statement to start with: %q, got %q", ipAndSlash, d)
}
} else if strings.HasPrefix(d, ipAndColumn) {
} else if strings.HasPrefix(d, ipAndSlash) {
t.Fatalf("Unexpected debug statement: %q", d)
}
case <-time.After(time.Second):
Expand Down

0 comments on commit 8d6eacc

Please sign in to comment.