Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explain PEX for .onion addresses #57

Open
MuxZeroNet opened this issue May 18, 2017 · 5 comments
Open

Explain PEX for .onion addresses #57

MuxZeroNet opened this issue May 18, 2017 · 5 comments

Comments

@MuxZeroNet
Copy link
Contributor

Explain PEX for .onion addresses. If we get more organized we can figure out how to implement IPv6 peer exchange.

@HelloZeroNet
Copy link
Owner

HelloZeroNet commented May 18, 2017

To add new kind of connection (ipv6 or i2p) we need to modify these:

+ Modify AnnounceZero and Bootstrapper plugin to store and send new kind of peer addresses.

So it's not extendable easily...

@MuxZeroNet
Copy link
Contributor Author

MuxZeroNet commented Oct 11, 2017

I made a pull request (#64) and it is merged. The PEX packet is much more flexible than I expect. Let me propose the PEX encoding for IPv6 addresses and Next-generation onion services.

IPv6 address in PEX: A packed IPv6 address is an element in the peers list. It is (16+2) bytes long. The last two bytes are the port number.

Next-generation (v3) onion address in PEX: A next-generation onion address is an element in the peers_onion list. It is (35+2) bytes long. The address is b32-decoded, so that it can be represented in 35 bytes instead of 56 bytes. The last 2 bytes are the port number.

You can vote below. If this gets enough votes, we can make this spec official.


Recipe for parsing and packing IPv6 addresses (Python 3)

>>> import ipaddress
>>> ipaddress.IPv6Address
<class 'ipaddress.IPv6Address'>

>>> ipv6 = ipaddress.IPv6Address("::1")
>>> ipv6.packed
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'

>>> len(ipv6.packed)
16

>>> ipaddress.IPv6Address(ipv6.packed)
IPv6Address('::1')

>>> ipv4 = ipaddress.IPv4Address('8.8.8.8')
>>> ipv4.packed
b'\x08\x08\x08\x08'

>>> len(ipv4.packed)
4

@HelloZeroNet
Copy link
Owner

Sounds great for me. Still have to decide if we should pack next-gen onion addresses to "peers_onion" node and ipv6 ones to "peers" or separate ones.
Probably it's easier to use the current ones, but we need to take care about backward compatibility issues. (checking client's version before sending new-style addresses to them)

@MuxZeroNet
Copy link
Contributor Author

Does ZeroNet put onion peers in PEX requests? There should be a peers_onion field in the request.

https://zeronet.readthedocs.io/en/latest/help_zeronet/network_protocol/#pex-site-peers-need

@HelloZeroNet
Copy link
Owner

Yes, thanks, added!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants