20

起動時に共有したいディレクトリを指定する機能を備えた、本質的には単なる小さな ftp サーバーであるアプリケーションを開発しました。サーバーには ftplib を使用しています。私が抱えている唯一の問題は、ルーターの背後にいる場合、ルーターのポートを手動で転送する必要があり、ユーザー (同僚/クライアント) にとっては少し複雑すぎることです。

そのため、ポートを開くための簡単な解決策を探していましたが、ほとんどの API が広すぎて頭がいっぱいであることがわかりました。実装が比較的簡単なソリューションを誰かが知っていますか?

注: クロスプラットフォームの互換性は歓迎されますが、実際には Windows でのみ使用されます。より簡単な Windows のみのソリューションがあれば、それを選択します。

ありがとう!

4

5 に答える 5

14

miniupnp の簡単な例。検出されたゲートウェイに外部ポート 43210 から、検出されたゲートウェイに接続されたインターフェイスのポート 43210 に接続されたインターフェイスへのマッピングを作成します。

import miniupnpc

upnp = miniupnpc.UPnP()

upnp.discoverdelay = 10
upnp.discover()

upnp.selectigd()

port = 43210

# addportmapping(external-port, protocol, internal-host, internal-port, description, remote-host)
upnp.addportmapping(port, 'TCP', upnp.lanaddr, port, 'testing', '')
于 2016-02-27T05:24:54.103 に答える
13

必要なプロトコルは IGD (Internet Gateway Device) と呼ばれ、UPNP に基づいています。これにより、クライアント プログラム (ユーザーのプログラム) が (UPNP を使用して) ネットワーク上のルーターを検出し、特定のポートを転送するように依頼できます。

これはほとんどの家庭用ルーターでサポートされており、この手法は BitTorrent やマルチプレイヤー ゲームなどの多くのサービスで使用されていますが、使用または実装が少し複雑です。IGD をサポートするオープン ソース ライブラリがいくつかありますが、最も単純なもの (クロスプラットフォームでもある) の 1 つは " miniupnp " です: http://miniupnp.free.fr/を参照してください。

于 2012-05-03T23:08:05.540 に答える
2

win32com で Windows IGD COM オブジェクトを使用する方法を説明する記事があります。

于 2010-12-08T21:03:41.490 に答える