[tor-bugs] #22122 [Metrics/metrics-lib]: Add support for six new key-value pairs added by OnionPerf

Tor Bug Tracker & Wiki blackhole at torproject.org
Tue May 2 02:13:32 UTC 2017


#22122: Add support for six new key-value pairs added by OnionPerf
---------------------------------+-----------------------------------
 Reporter:  karsten              |          Owner:  metrics-team
     Type:  enhancement          |         Status:  needs_review
 Priority:  Medium               |      Milestone:  metrics-lib 1.7.0
Component:  Metrics/metrics-lib  |        Version:
 Severity:  Normal               |     Resolution:
 Keywords:                       |  Actual Points:
Parent ID:                       |         Points:
 Reviewer:                       |        Sponsor:
---------------------------------+-----------------------------------

Comment (by robgjansen):

 They look good at a high level. I'm not sure how many details you want to
 include in the comments, so instead of editing your code comments
 directly, I will just give some explanation below and allow you to curate
 the details.

 {{{
   /**
    * Return the TGen client socket name, IP address, and port, formatted
 as
    * <code>name:ip:port</code>, or <code>null</code> if the OnionPerf line
    * didn't contain that information. */
   public String getEndpointLocal();
 }}}

 The local endpoint is the TGen's client side socket. If a proxy is in use,
 which is always the case in OnionPerf when downloading over Tor, then the
 client side socket is the socket that is used to connect to the SOCKS
 proxy server that Tor runs. The `name:ip:port` may be `NULL:0.0.0.0:0` if
 TGen was not able to find the info using `getaddrinfo()` and
 `getnameinfo()`.

 {{{
   /**
    * Return the proxy socket name, IP address, and port, formatted as
    * <code>name:ip:port</code>, or <code>null</code> if the OnionPerf line
    * didn't contain that information. */
   public String getEndpointProxy();
 }}}

 The proxy endpoint is the information that the TGen client uses to connect
 to the SOCKS proxy server that Tor runs. The `name:ip:port` may be
 `NULL:0.0.0.0:0` if TGen was not able to find the info using
 `getaddrinfo()` and `getnameinfo()`. In OnionPerf, the SOCKS proxy is run
 on localhost at a well-known SOCKS port that was configured with Tor's
 `SocksPort` config option.

 {{{
   /**
    * Return the TGen server host name, IP address, and port, formatted as
    * <code>hostname:ip:port</code>, or <code>null</code> if the OnionPerf
 line
    * didn't contain that information. */
   public String getEndpointRemote();
 }}}

 The remote endpoint is the information that the TGen client uses to
 connect to the remote server. This is the information that allows the
 SOCKS proxy to create a TCP connection from the exit relay to the TGen
 server. The `name:ip:port` may be `NULL:0.0.0.0:0` if TGen was not able to
 find the info using `getaddrinfo()` and `getnameinfo()`, although in that
 case the download would not have succeeded because the exit relay would
 not know where to connect.

 {{{
   /**
    * Return the client machine hostname, or <code>null</code> if the
 OnionPerf
    * line didn't contain that information. */
   public String getHostnameLocal();
 }}}

 This is the value returned by calling `gethostname()` on the TGen client.
 If that call failed, then I believe GLib uses `(NULL)` as the string.

 {{{
   /**
    * Return the server machine hostname, or <code>null</code> if the
 OnionPerf
    * line didn't contain that information. */
   public String getHostnameRemote();
 }}}

 This is the value returned by calling `gethostname()` on the TGen server.
 The TGen server gets this value on its machine and sends it to the client
 as part of the header to the response to the clients transfer request. If
 that call failed, then I believe GLib uses `(NULL)` as the string.

 {{{
   /**
    * Return the source IP address, or <code>null</code> if the OnionPerf
 line
    * didn't contain that information. */
   public String getSourceAddress();
 }}}

 This is collected by OnionPerf itself. This is the best guess of the
 public IP address of the OnionPerf client machine. This is collected by
 connecting to https://check.torproject.org/ and finding the IP address in
 the result. If that fails, the backup method is to connect to Google DNS
 server 8.8.8.8 on port 53, and then check the IP address listed on the
 client side socket of that connection. If both of those fail, then
 OnionPerf returns a string "unknown".

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/22122#comment:2>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list