diff --git a/src/http/client/client.cr b/src/http/client/client.cr
index 605dc66..608ee81 100644
--- a/src/http/client/client.cr
+++ b/src/http/client/client.cr
@@ -34,12 +34,12 @@ class HTTP::Client
   end
 
   {% for method in %w(get post put head delete patch) %}
-    def {{method.id}}(path, headers = nil, body = nil)
-      exec {{method.upcase}}, path, headers, body
+    def {{method.id}}(path, headers = nil, body = nil, src = nil, dst = nil
+      exec {{method.upcase}}, path, headers, body, src, dst
     end
 
-    def self.{{method.id}}(url, headers = nil, body = nil)
-      exec {{method.upcase}}, url, headers, body
+    def self.{{method.id}}(url, headers = nil, body = nil, src = nil, dst = nil
+      exec {{method.upcase}}, url, headers, body, src, dst
     end
   {% end %}
 
@@ -64,8 +64,8 @@ class HTTP::Client
     HTTP::Response.from_io(socket)
   end
 
-  def exec(method : String, path, headers = nil, body = nil)
-    exec new_request method, path, headers, body
+  def exec(method : String, path, headers = nil, body = nil, src = nil, dst = nil
+    exec new_request method, path, headers, body, src, dst
   end
 
   def close
@@ -76,10 +76,10 @@ class HTTP::Client
     @socket = nil
   end
 
-  private def new_request(method, path, headers, body)
+  private def new_request(method, path, headers, body, src, dst)
     headers ||= HTTP::Headers.new
     headers["Host"] ||= host_header
-    request = HTTP::Request.new method, path, headers, body
+    request = HTTP::Request.new method, path, headers, body, src, dst
     @before_request.try &.call(request)
     request
   end
@@ -107,9 +107,9 @@ class HTTP::Client
     end
   end
 
-  def self.exec(method, url, headers = nil, body = nil)
+  def self.exec(method, url, headers = nil, body = nil, src = nil, dst = nil
     exec(url) do |client, path|
-      client.exec method, path, headers, body
+      client.exec method, path, headers, body, src, dst
     end
   end
 
diff --git a/src/http/request.cr b/src/http/request.cr
index 2fb7a04..0a25c43 100644
--- a/src/http/request.cr
+++ b/src/http/request.cr
@@ -7,8 +7,11 @@ class HTTP::Request
   getter headers
   getter body
   getter version
+  getter src
+  getter dst
 
-  def initialize(@method : String, @path, @headers = Headers.new : Headers, @body = nil, @version = "HTTP/1.1")
+  def initialize(@method : String, @path, @headers = Headers.new : Headers, @body = nil, @version = "HTTP/1.1",
+                 @src = nil, @dst = nil)
     if body = @body
       @headers["Content-Length"] = body.bytesize.to_s
     elsif @method == "POST" || @method == "PUT"
@@ -42,12 +45,14 @@ class HTTP::Request
   end
 
   def self.from_io(io)
+    src          = io.peeraddr
+    dst          = io.addr
     request_line = io.gets.not_nil!
     request_line =~ /\A(\w+)\s([^\s]+)\s(HTTP\/\d\.\d)\r?\n\Z/
     method, path, http_version = $1, $2, $3
 
     HTTP.parse_headers_and_body(io) do |headers, body|
-      return new method, path, headers, body, http_version
+      return new method, path, headers, body, http_version, src, dst
     end
 
     raise "unexpected end of http request"