[tor-dev] exitmap/RESOLVE control command limitations

teor teor at riseup.net
Tue Jul 9 09:54:38 UTC 2019



On July 9, 2019 8:55:00 AM UTC, nusenu <nusenu-lists at riseup.net> wrote:
>Hi,
>
>I noticed some unexpected answers in exitmap's [1] dnsenum results
>and suspected that this has todo with IPv4 vs. IPv6.
>
>First I looked at [2] and found that it only lists IPv4 and hostnames
>as possible answers but then I realized that exitmap might not be using
>the RESOLVE command?

Exitmap is using tor's RESOLVE extension to SOCKS:
https://gitweb.torproject.org/torspec.git/tree/socks-extensions.txt#n49

>>     def resolve(self, domain):
>>         """
>>         Resolve the given domain using Tor's SOCKS1 resolution
>extension.
>>         """
>> 
>>         domain_len = len(domain)
>>         if domain_len > 255:
>>             raise error.SOCKSv5Error("Domain must not be longer than
>255 "
>>                                      "characters, but %d given." %
>domain_len)
>> 
>>         # Tor defines a new command value, \x0f, that is used for
>domain
>>         # resolution.
>> 
>>         self._send_all("\x05\xf0\x00\x03%s%s%s" %
>>                      (chr(domain_len), domain, "\x00\x00"))

Exitmap uses the SOCKS 5, resolve, DNS command:
See page 4 of https://www.ietf.org/rfc/rfc1928.txt

>> 
>>         resp = self._recv_all(10)
>>         if resp[:2] != "\x05\x00":
>>             raise error.SOCKSv5Error("Invalid server response: 0x%s"
>%
>>                                      resp[1].encode("hex"))

Resolve can return an IPv4 or IPv6 response, but Exitmap ignores the address type, and turns the first 4 bytes of the response into an IPv4 address.

>>         return socket.inet_ntoa(resp[4:8])
>
>
>Does Tor's SOCKS resolution extension support IPv6 answers
>or does it only attempt A records?

If it gets both IPv4 and IPv6, I think it will prefer IPv4.

Try testing with ipv6.google.com, which only has an IPv6 address.

>I'm aiming to resolve a hostname and would like to get 
>the IPv4 and if available the IPv6 address.

I don't know how you can reliably get the IPv6 address over SOCKS, when the site has an IPv4 address.

Try using the controller RESOLVE command and ADDRMAP event, which supports IPv6:

Address = ip4-address / ip6-address / hostname

If that doesn't work, we might need to make some changes to tor, or fix some bugs.

>thanks,
>nusenu
>
>
>[1] https://github.com/NullHypothesis/exitmap
>[2]
>https://gitweb.torproject.org/torspec.git/tree/control-spec.txt#n1349


--
teor
----------------------------------------------------------------------


More information about the tor-dev mailing list