You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mach327 59f6c0931c . 11 months ago
README.md i think it's time for the real world now 12 months ago
udp_hole_punching.py . 11 months ago

README.md

UDP Hole Punching

(and simulation environment)

I wanted to simulate stateful firewall rules and UDP connections through them, so I did. I also have some early proofs of concept of M17 related callsign registration and peer introduction.

Registration

[peer0002]	Sending UDP[peer0002:17000->public0000:17000] b'M17R\x01\x00\x00\x01a\xae\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
"Where is W2FBI?"
[public0000]	RECV UDP[peer0002:17000->public0000:17000] b'M17R\x01\x00\x00\x01a\xae\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[public0000]	Sending UDP[public0000:17000->peer0002:17000] b'M17R\x02\x00\x00\x01a\xae\x1fpeer0000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
"W2FBI is at peer0000"
[peer0002]	RECV UDP[public0000:17000->peer0002:17000] b'M17R\x02\x00\x00\x01a\xae\x1fpeer0000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[peer0002]	Found W2FBI at peer0000!

Hole punching through introductions

[peer0002]	Asking public0000 to introduce us to peer0000
[peer0002]	Sending UDP[peer0002:17000->public0000:17000] b'M17M\x00Bhpeer0000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[public0000]	RECV UDP[peer0002:17000->public0000:17000] b'M17M\x00Bhpeer0000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[public0000]	Asking peer0000 to talk to peer0002
[public0000]	Sending UDP[public0000:17000->peer0000:17000] b'M17M\x01Bhpeer0002\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[peer0000]	RECV UDP[public0000:17000->peer0000:17000] b'M17M\x01Bhpeer0002\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[peer0000]	Sending UDP[peer0000:17000->peer0002:17000] b'M17M\x02Bhpeer0000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[peer0002]	DROP UDP[peer0000:17000->peer0002:17000] b'M17M\x02Bhpeer0000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Notice peer0002 can't receive packets yet - it has to know to expect us and send a packet out, and it hasn't been requested to by public0000 yet
[public0000]	Asking peer0002 to talk to peer0000
[public0000]	Sending UDP[public0000:17000->peer0002:17000] b'M17M\x01Bhpeer0000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[peer0002]	RECV UDP[public0000:17000->peer0002:17000] b'M17M\x01Bhpeer0000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[peer0002]	Sending UDP[peer0002:17000->peer0000:17000] b'M17M\x02Bhpeer0002\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[peer0000]	RECV UDP[peer0002:17000->peer0000:17000] b'M17M\x02Bhpeer0002\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[peer0000] 	Got an opening packet!
But once peer0002 sends a packet out, peer0000 receives it because peer0000 already has a related connection entry in the firewall!
peer0002 and peer0000 can now communicate directly.

```