ポート30000で動作するp2pアプリケーションを設計しています。私のルーターはUPnPではないため、ポートをルーターに転送する必要がありました。 。しかし、Skype別のp2pアプリケーションは、私のPCでポート転送なしで動作します。 Wiresharkで分析したところ、UDPポート48980、58544を使用していることがわかりました。私はc ++を使用しています。
python here にはライブラリがあり、Nat PnP routersのためにそれを行います。プログラムでポートを転送することは可能ですか?)ルーターへのルーターの種類やオペレーティングシステムに関係なく、C++またはその他の言語でこれを行うにはどうすればよいですか。
Skypeは非常に興味深い方法で機能します。私が読んだこと(そしてこれは少し前です)から、それは次のように機能します:
これはおそらくあまりにも単純化されていますが、最後に確認したところ、このように動作します。 (私が間違っている場合、誰かが私を訂正します)。
編集:弾丸の問題を修正
DPホールパンチング は、NATを通過する方法の1つです。
仲介サーバーを使用し、クライアント側から通信を開始する必要があります。 Yossarianが述べたように、その時点からの1つの可能性はUDPホールパンチングです。アプリケーションのタイプ(およびそれが本当にP2Pであるかどうか)に応じて、go-betweenサーバーを常時配置したままにすることができます。
P2Pアプリケーションを実装し、それらをNATルーターの背後で動作させるためのいくつかの経験があります。
Skypeは、UDPホールパンチングを使用してNATルーターの背後で動作します。他のユーザーが同様のアプリケーションを実装するのに役立つ記事を書き、デモビデオを作成しました。ほとんどの基本的な作業を行う便利なライブラリへのリンクも提供していますここlibutpのように。