没有端口转发,Skype如何工作?

时间:2009-10-08 17:33:22

标签: p2p portforwarding

我正在设计一个适用于端口30000的 p2p 应用程序。我的路由器不是 UPnP 所以我需要将端口转发到路由器。但 Skype 另一个p2p应用程序在我的电脑上没有端口转发。当我用wireshark分析它时,我发现它使用的是UDP端口48980,58544。我正在使用c ++。

python here中有一个库可用于 Nat PnP路由器。是否可以以编程方式将端口转发到路由器,而不管路由器和操作系统的类型。用c ++或任何其他语言做什么的方法应该是什么。

6 个答案:

答案 0 :(得分:25)

本文How-Skype-Co-get-round-firewalls

中对此进行了详细介绍

答案 1 :(得分:20)

Skype以非常有趣的方式运作。从我所读到的(这是前一段时间),它的工作原理如下:

  • Skype服务器维护所有的列表 用户和IP。
  • Skype用户A想要 告诉用户B
  • Skype用户A发送一个 网络数据包到用户B的IP地址 并等待回应。 (用户B永远不会收到此数据包)。
  • Skype用户A通知服务器IP /端口 正在等待的组合 作出回应
  • 服务器通知用户B. 向用户A发送响应 指定端口
  • 建立连接。

这可能过度简化,但最后我查了一下,这就是它的工作原理。 (如果我错了,有人会纠正我。)

编辑:修复子弹问题

答案 2 :(得分:18)

UDP hole punching是(一种)如何遍历NAT的方法。

答案 3 :(得分:3)

您必须使用中间服务器,并从客户端启动通信。正如Yossarian所说,从那时起,一种可能性是UDP打孔。根据应用程序的类型(以及它是否真的是P2P),您可以在整个时间内保持中间服务器。

答案 4 :(得分:0)

当无法直接连接时,Skype使用另一个对等体作为中间点。

即。对等体A希望连接到对等体B,但对等体B关闭所有端口,然后通过具有开放端口的对等体C发起通信。

答案 5 :(得分:0)

在实施P2P应用程序并让他们在NAT路由器后面工作方面有一些经验。

Skype使用UDP打孔功能在NAT路由器后面工作。我写了一篇文章并制作了一个演示视频来帮助其他人实现类似的应用程序。还提供了有用库的链接,这些库可以完成大部分基础工作,例如libutp,这里。

>>> UDP hole punching Demo video and useful Libs.