Как работает Skype без переадресации портов? - PullRequest
32 голосов
/ 08 октября 2009

Я разрабатываю приложение p2p , которое работает на порте 30000. Мой маршрутизатор не UPnP , поэтому мне пришлось перенаправить порт на маршрутизатор. Но Skype другое p2p-приложение работает без переадресации портов на моем компьютере. Когда я проанализировал его с помощью wireshark, я обнаружил, что он использует UDP-порт 48980, 58544. Я использую c ++.

В python есть библиотека здесь , которая делает это для Nat PnP-маршрутизаторов . Возможна ли программная переадресация порта на маршрутизатор независимо от типа маршрутизатора и операционной системы . Какой должен быть подход, чтобы сделать это на с ++ или любом другом языке.

Ответы [ 6 ]

25 голосов
/ 08 октября 2009

Это очень хорошо описано в этой статье How-Skype-Co-get-round-firewalls

20 голосов
/ 08 октября 2009

Скайп работает очень интересно. Из того, что я прочитал (и это недавно), оно работает следующим образом:

  • Skype-сервер ведет список всех пользователи и IP-адреса.
  • Skype пользователь А хочет поговорить с пользователем B
  • Skype пользователь A отправляет сетевой пакет на IP-адрес пользователя B и ждет ответа. (пользователь B никогда не получает этот пакет).
  • Skype пользователь A уведомляет сервер об IP / порте комбинация, на которой он ждет за ответ
  • Сервер уведомляет пользователя B отправить ответ пользователю А на указанный порт
  • Соединение установлено.

Возможно, это слишком упрощенно, но в последний раз я проверял, вот как это работает. (Кто-то поправит меня, если я ошибаюсь).

Редактировать: исправлена ​​проблема с пулями

18 голосов
/ 08 октября 2009

Пробивание UDP-дырок - это один из способов прохождения NAT.

3 голосов
/ 08 октября 2009

Вы должны использовать сервер-посредник и инициировать связь со стороны клиента. Как упоминал Йоссариан, с этой точки зрения одной из возможностей является пробивание дырок в UDP. В зависимости от типа приложения (и действительно ли это P2P или нет), вы можете поддерживать промежуточный сервер на месте все время.

0 голосов
/ 14 октября 2016

Имею некоторый опыт реализации приложений P2P и обеспечения их работы за маршрутизаторами NAT.

Skype использует дырочку UDP для работы за маршрутизаторами NAT. Я написал статью и сделал демо-видео, чтобы помочь другим реализовать аналогичные приложения. Также предоставлены ссылки на полезные библиотеки, которые выполняют большую часть основной работы, например libutp, здесь.

>>> Пробивание дырок по UDP Демонстрационное видео и полезные библиотеки.

0 голосов
/ 08 октября 2009

Skype использует других партнеров в качестве промежуточной точки, когда прямое подключение невозможно.

т.е. Одноранговый узел A хочет подключиться к одноранговому узлу B, но одноранговый узел B закрыл все порты, затем связь инициируется через одноранговый узел C, который имеет открытые порты.

...