Писане на ваш собствен P2P messenger

На фона на обсъждането на бъдещето на интернет пратениците и четенето на статията „Защо вашият любим пратеник трябва да умре“, реших да споделя моя опит от създаването на P2P приложение за комуникация независимо от сървъри на трети страни. По-точно, това е само празно място, което изпраща едно съобщение от клиента към сървъра, по-нататъшното разширяване на функционалността зависи само от вашето въображение.
Ето какво можем да прочетем за STUN сървъра в Wiki:
При решаването на проблема бяха използвани следните модули на Python: socket, twisted, stun, sqlite3, os, sys.
За обмен на данни, както между сървъра и клиента, така и между сървъра, клиента и сървъра за сигнализация, се използва UDP протоколът.
Най-общо функциониращият механизъм изглежда така:
Сървър STUN сървър
STUN сървър клиент
Сървър за сигнални сървъри
Клиент на сървър за сигнали
1. Клиентът, който е зад NAT с тип Full Cone NAT връзка, изпраща съобщение до STUN сървъра, получава отговор под формата на външния си IP и отваря PORT;