История изменений
Исправление InterVi, (текущая версия) :
Возьми готовую библиотеку или подсмотри как там сделано. Вот, например. Есть сложнее, есть проще. Hole punch — это базовая концепция. Там по ссылкам есть RFC, описывающие Stun — то самое, что ты на самом деле хочешь сделать.
Я б такое делал только в учебных целях, а для прода брал библиотеки, ибо долго и сложно.
Исходная версия InterVi, :