2

たとえば、私は 192.168.0.1 のルーターの背後にいて、192.168.1.64 (DSL モデム) の外部 IP につながり、パブリック インターネット アドレスにつながります。

ゲートウェイへのSOAPリクエストを介してuPnPを使用して、ローカルのhttpサーバーポートをそのパブリックインターネットアドレスの任意のポートにマップすることは可能ですか?

申し訳ありませんが、私はこの問題についてまったく初心者です。ゲートウェイのポート 80 でパテを使用してテストし、xml で http を発行しています。

POST /upnp/control3 HTTP/1.1 Cache-Control: no-cache Connection: Close プラグマ: no-cache Content-Type: text/xml; charset="utf-8" ユーザーエージェント: Microsoft-Windows/6.1 UPnP/1.0 SOAPAction: "urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping" ... ..

ありがとう。

4

1 に答える 1

4

Coherence DNLA/UPnP フレームワークの一部として、外部ポート (ポート 8080 など) のポート マッピングを作成できる「Puncher」(ファイアウォールに「パンチ」穴を開けます! :o) と呼ばれる Python モジュールの良い例を見ることができます。選択した内部ポートに:

http://coherence.beebits.net/browser/trunk/Puncher/puncher/base.py

Coherence モジュールは、Debian でも python-coherence パッケージとして入手できます。ActiveState Python を使用する場合は、Windows でも同様です。

作成中のものの一部としてこれを自動的に/プログラム的に実行したいと考えているので、上記の Coherence DNLA/UPnP フレームワーク in Python を紹介しました

これを 1 回限り手動で行いたい場合は、UPnP ポート マッピングを作成するための優れたコマンドラインおよび GUI ツールがいくつかあります。Mac では、手動の GUI ツールがhttp://www.codingmonkeys.de/portmap/index.htmlで SubEtha Edit の作成者から入手できます。Windows では、 http://deusty.blogspot.com/2008/07/tcmportmapper-for-windows.htmlで手動の GUI ツールを使用できます。

Python で Coherence を試してみることを強くお勧めします。これは楽しいプログラミング体験になる可能性があります。または、ネットワークを使用する多くの異なるプログラムには、ポートを開き、それらをローカル マシンに転送/マップする UPnP モジュールがあります。たとえば、µTorrent には、libtorrent/rtorrent と同様に 1 つがあり、他の多くの場合と同様です。

Python が苦手な場合は、UPnP クライアント実装を備えた次のライブラリ、例、およびツールを参照して、ルーターのポートをプログラムで転送/マップします (これらは C および Perl にあります)。

http://miniupnp.tuxfamily.org/

https://trac.transmissionbt.com/browser/trunk/libtransmission/upnp.c

http://www.howtoforge.com/administrating-your-gateway-device-via-upnp

2 番目のリンクhttps://trac.transmissionbt.com/browser/trunk/libtransmission/upnp.cは、miniupnp ライブラリを使用する一般的な BitTorrent クライアント「Transmission」のコードです (最初のリンク)。

これがあなたの質問に答えたことを願っています。あなたが何をしていても、頑張ってください。

編集: @kaneda: あなたのコメントに応えて、私が正しく理解していれば、あなたは 2 つの NAT の背後にいます。1 つは DSL モデムによって、もう 1 つはワイヤレス ルーターによってです。単純な UPnP はここでは役に立ちません。DSL モデムとルーターの両方でポート マッピングを UPnP できるようにする必要があります (ルーターはおそらく UPnP 要求が WAN ポートを離れることを許可しないため、おそらく不可能です)。 NAT ではなく DSL モデムまたはルーターをブリッジして、1 つの NAT だけの背後にいるようにします。

編集 2: @kaneda: 二重 NAT を回避するもう 1 つの方法は、ルーターを Linux ボックスに置き換え (OpenWRT などを使用するなど)、そこで upnp コードを実行して DSL モデム ポートを転送することです。ルーターの背後にあるホストに miniupnp ベースのコードを追加して、ルーターをさらに開きます。ただし、その時点で、ルーターを制御できるので、静的ポート マッピングを作成し、すべての UPNP プロトコル要求を DSL モデムにパススルーさせることもできます (iptables にそれらのパケットを選択的に転送/NAT で戻すように指示することによって)。これは、この回答の範囲を超えています)。

于 2010-12-05T03:43:48.743 に答える