比特彗星をUPnPで自前ランダムポートにするスクリプト


Bittorrent用の専用クライアントソフトは沢山あるけれどWindows XP環境でも動作する物となるとかなり限られてくるのですが以前からuTorrent2.2.1(build25302)を愛用していました。uTorrent2.2.1は動作も軽快でなにより安定しているところが気に入っていたのですが、XP32環境で使用すると特有の問題(OS本体ではTLS1.2に対応しない)からHttps接続を強要するトラッカーやRSSが扱えなく不便である事とBittorrent自体の新しい機能(DHEv2)などに追従できないところもあり、そろそろ乗り換えかなーって思い立ち代替を模索してみたのですが現時点でXP32で動作する物が少ないです。

とりあえず有名所のクライアントソフトで現在でも開発が続いている物で、かつ、XP32で動作する物
・Bittorrent → 所謂Mainlineと呼ばれる物(現在ではuTorrentと中身は同じ)
・uTorrent → 3.4.x ぐらいまで?(無料版は広告が入るので厄介)
・qBittorrent → 4.1.9 まで
・Vuze → 現行バージョン(5.7.7)でもXP32で動作可能(無料版は広告あり)
・Bitcomet → 現行バージョン(1.82)でもXP32で動作可能
・Deluge → 1.3.x まで (これはWindows環境への対応が現行の2.x.xでは非対応の為[GTK3+Py3])
・Transmission → どのバージョンか忘れたけど動作した(現行のはWindows7以降らしい)
・Tixati → 現行バージョン(2.86)でもXP32で動作可能らしい
・BiglyBT → XP32でも動作するらしいけどインストーラーが起動不可でした(元がVuzeなので恐らく動作する)
もはやXP32非対応のは除いて日本語UIが可能な物としてVuzeとBitcometに絞って試してみましたが、この2つで直感的に使いやすいと感じたのがBitcometの方でした。Vuzeは設定項目が非常に多く面白そうでしたが分からないところが多い印象です。(Vuze/Bitcomt とも独特の機能があるのでちょっとお勧めはしかねます。多少古くても動けばいいのならuTorrentやqBittorrentの方が断然いいですね)

BitcometでUPnPが動作しない

今後メインに使うクライアントとしてBitcomet(比特彗星)を選んでみたけれど、どういうわけかUPnPを使ったポートのマッピングが出来ませんでした。uTorrentやqBittorrent、Vuze、Transmission何れも何の問題もなくUPnPで使用できるのですが謎ですね。2011年製のuTorrentですら普通に使えているので枯れた定番の技術なのでしょう。Bitcometは大陸製なのでIEの機能に依存する部分が多く、もしかしたらUPnPに関してもWindowsのUPnPデバイス一覧から利用しているのかも知れないかとの憶測はありますが検証するのも無駄なので動かない物は動かないと認識しました。(OSの問題かと考えましたがWindows 7(64)環境でも同様にUPnPでの動作不良がありました)

使用しているルーター側の問題かと、あえてグローバルとローカルでポート番号が異なる設定を試してみましたが一部のルーターであるらしい内側と外側で番号が違うのは受け付けないというタイプには該当しないようでした。正しく動作するかどうかは別として、マッピング出来ていればエントリーは出るはず。

後で調べて分かった事ですがBitcometのUPnPはWindowsの
『SSDP Discovery Service』に依存するようです
(詳しくはこの記事の最後に追記しました)

とりあえず固定番号でポートマッピングはしたものの・・・

UPnPが使えなくとも静的にNATに登録すれば外部からの接続要求に応答できるようにはなるので先ずは静的なポートで利用していましたが固定番号だとセキュリティ面で不安になりますね。というのも常にルーティングされるのだからBittorrentを利用していない時でも何某かパケットが飛んでくる飛んでくる・・・。かといって、いちいちルーターの設定を変えるというのも出来なくはないのですが、今使っているルーターの仕様でフィルターやNATの設定を変更したら毎回リブートしないと反映されないというものなので(過去に使っていたルーターは動的に変更しても動作する物が殆どでしたが・・・)その都度の設定変更での運用は無理そうです。

開かぬなら開けて見せようUPnP

静的なポートマッピングなら当然に動作するので、それならばBitcometのUPnP機能は使わず自前で(手動で)UPnPへのマッピングを行えばいいのでは?という発想でそういうものはあるのかと探してみたら、やっぱりあるところにはあるものですね。コマンドラインから利用するようなツール類はいつの時代でも重宝します。

このブログ記事ネタの中核になるものなので先ずは入手してください。
・MiniUPnP → http://miniupnp.free.fr/
これを利用して手動で任意のタイミングでUPnPでのマッピングが可能になると、もうちょっと便利に使いたいと思うところあってバッチファイルを弄っていたら気が付くと何やら長大な物が出来上がっていました。
開かれた港 (笑)
大陸製らしいセンスを感じます


お手軽バッチ版

最初にチョイチョイと作った物です。
ローカルIPは決め打ちで途中でBitcometを起動した後、少し間をあけてからUPnPのマッピングを行います。
Bitcomet本体のポート番号ランダム機能を利用しつつUPnPは起動後にマッピングします。このため手動で「もう一度チェック」を行わないと少なくともUDP側のステータス表示は制限有りのままになります。(表示だけなので実害無し)
■処理の流れは
・Bitcometの設定ファイル"BitComet.xml"からポート番号を取得
・取得したポート番号でUPnPをCloseする
・Bitcometを起動する
(このとき、Bitcomet本体のポート番号起動時ランダム機能はON)
・しばらく処理停止(BitComet.xmlにランダムポート番号が更新されるのを待つ)
・再度Bitcometの設定ファイル"BitComet.xml"からポート番号を取得
・取得した現在のポート番号でUPnPをOpenする

■追加で以下のツールが必要です
・XML.EXE → http://xmlstar.sourceforge.net/
・sleep.exe → windows 2000のSPなどに入っている物。または同等のFreeSoft類
 (windows XPの場合のみ必要です。Vista以降は標準のコマンドでtimeout.exeを利用してください)

小綺麗なVBS版 (お勧め!)

どうせならなるべく外部のツールを使わずにとVBSでまとめてみました。(現在はこれを使ってます)
Bitcomet本体のポート番号ランダム機能は使わずVBS側でランダムにポート番号を確定し、その内容で設定ファイルを上書き更新した後、UPnPマッピングを行いBitcometを起動します。このためBitcomet本体側では最初からポートが開いた緑の状態で稼働します。また、オマケ機能でローカルIPの自動取得もしています。DHCP環境で利用している場合には有用でしょう。更には自前でポート番号を確定するので番号の範囲を好みで調整できます。
■処理の流れは
・Bitcometの設定ファイル"BitComet.xml"からポート番号を取得
・取得したポート番号でUPnPをCloseする
・新しいポート番号を確定する
・Bitcometの設定ファイル"BitComet.xml"を更新
・新しいポート番号でUPnPをOpenする
・Bitcometを起動する
(このとき、Bitcomet本体のポート番号起動時ランダム機能はOFF)

■追加ツールは不要ですが次の点に注意
・①Echoを利用するので、Cscriptから起動してください
・②文字列で判断する部分があるので利用しているOSの文字コードでスクリプトを記述してください(XPの場合はShift-JIS)
・③"BitComet.xml"を上書き更新するので障害があった場合、当該ファイルを破損する可能性があります。実行前にバックアップを忘れずに。

動きが丸見えで良く分かるバッチ版 (VBS版と機能的には同じ)

XML.exeのツールが読込だけでなく書き込みにも対応しているのが分かったので、もしかしたらとバッチだけでVBS版と同じ事をやってみました。
VBS版と同じとなるように後付けで作成しました。微妙に異なっているところはポート番号のランダム機能でバッチだと乱数の範囲が上限=32768なので2つ足し算した数を採用しています。バッチだけでも出来るんだという自己満足と、いつか何処かで何かに応用できるかも知れない探求心の為だけに作成しました。VBS版より有利がも知れないところはスクリプトエンジンを使わない為、それに関連したメモリーリークの心配がないぐらいでしょうか。
■処理の流れは
・Bitcometの設定ファイル"BitComet.xml"からポート番号を取得
・取得したポート番号でUPnPをCloseする
・新しいポート番号を確定する
・Bitcometの設定ファイル"BitComet.xml"を更新
・新しいポート番号でUPnPをOpenする
・Bitcometを起動する
(このとき、Bitcomet本体のポート番号起動時ランダム機能はOFF)

■追加で以下のツールが必要です
・XML.EXE → http://xmlstar.sourceforge.net/

■次の点に注意
・①"BitComet.xml.old"というファイルが出来ます
・②文字列で判断する部分があるので利用しているOSの文字コードでスクリプトを記述してください(XPの場合はShift-JIS)
・③"BitComet.xml"を更新するので障害があった場合、当該ファイルを破損する可能性があります。実行前にバックアップを忘れずに。

おまけ。(一番人気のクライアントは・・・)

遭遇する殆どがqBittorrentですね、多言語対応もあって機能的にも隙がないし人気なのが頷けます。"q"という名前から感じるように"Qt"というフレームワークから来ています。残念ながらQtではWindows XP環境は対象外なのでqBittorrentに限らずQt由来のものはもはやXPでは諦めるしかありません。ところで、このqBittorrentってuTorrentと同様に接続クライアント数、アップロードスロット数、ダウンロードスロット数という「絞るところ」が分かれている設計思想なので、一部では「吸血ソフト」として嫌われているようです。(初期状態で DLスロット>ULスロット となっているので接続しても一方的に吸われる場合がある)もっとも、ちゃんと使い方を熟知しているユーザーは自前で調整したりするので全てのqBittorrentがそうであることは無いのですが(吸うだけのクライアントは迅雷[thunder]が有名ですが、これも設定次第では回避できる)やっぱり、なんかUL/DLが非対称のが多い気がしますね。まぁADSL環境であれば、自然とそうなってしまうので仕方のないところでしょう。

BitcometのUPnP利用について色々と調べてみたのですが機能しないという内容はみかけるものの具体的に対応策が記されてなく今日まで有耶無耶にされているように感じました。同じ問題に遭遇している方の参考になれば幸いです。と言いつつ、この記事を書いている時に初めて調べてみた "Tixati" が、ちょっと気になっているところです。別にUIは意味が分かれば英語でも全然OKだし、なによりチョット昔のソフトだと思っていたのに、まだまだ現行のようだったので試してみたいかなと思うところはあるけれど使用ユーザーが少ないものは、それだけリスクに遭遇する率も上がりますから、なにか機会があればかなぁ

実はBitcometは『SSDP Discovery Service』依存だった (追記)

中国語のBitcometサイトをあちこち閲覧してBitcometはWindowsの『SSDP Discovery Service』を利用していると言う事が分かりました。これが開始されていないとUPnPでのポート設定が出来なくなるようです。ところで、このSSDP Discovery Serviceはちょっと曲者で、サービスを有効にしただけでは機能せず、有効とした後にネット接続をOff/Onするか、PCを再起動しないとUPnPデバイスを認識しないようでした。
 とにかくWindows XP32上では、このSSDP Discovery Serviceを開始した環境であれば、Bitcomet内蔵のUPnP機能は動作してくれるようです。けれどもデフォルトでSSDP Discovery Serviceが有効なWindows 7(64)において、何故だかUPnPマッピングが機能しないという、よく分からない結果も得ています。

このようにWindows 7(64)では最初から開始状態だったのですが、何故だか動作せず。いまもって謎ですね・・・。
XP32環境の方では勝手にUPnPで外部と通信されては困るという考えで意図してSSDP Discovery Serviceを無効にしていましたが、それでもサービス依存しないアプリであれば問題なくUPnPを使えています。SSDP = Simple Service Discovery Protocol の名称で分かるとおりWindows固有の機能ではなく規格化されたプロトコルの1つなのですからOS依存はありません。Windows環境の作法に従う/Windows環境の作法に従わず他OSとの統一性を図る。どちらも間違いだとは指摘できないことですが多勢に無勢ってところかな。
一応、Vista以降でUPnPをWindows経由で利用する為には
ネットワーク探索を有効する必要があるとのこと。
元ネタMS 『ネットワークと共有センターでネットワーク探索を有効にできない
・DNS クライアント ( DNS Client )
・関数探索リソースの公開 ( Function Discovery Resource Publication )
・SSDP 検出 ( SSDP Discovery Service )
・UPnP デバイス ホスト ( UPnP Device Host )
日本語で書いてあったので英字を併記しました。
これらは無効状態であってもインターネット接続には全然問題ないのでOFFにして使っている人も居る事でしょう。

2021/11/02

Posted by まゆみ.H
X f B! P L

Search (in blogs)

Featured

今も続くアバターの身長問題。身長=158cmは子供ですか、そーですか。

もともとリアルサイズなアバター故にアジア圏以外が主催のSIMなどでは低身長として扱われることも少なくなかったのですが、さほど気にせず自分の好みの見た目として楽しんでいました。ところが、先日、とあるSIMを訪問した時に「身長が5フィート以下だから子供は帰りなさい」というメッ...

Picks

クリエイティブ・コモンズ・ライセンス

template by QooQ