0

https API を使用して VPN 上のサーバーからランダムに割り当てられたポート番号を取得する Python 3 スクリプトを作成しています。この番号を取得したら、そのポートを使用して emule --easy を起動するように emule の .ini ファイルを変更します。

次に、エミュールが使用しているリッスン ポート != で vuze が開くことを確認します。これを編集しやすい .ini ファイルに保存するのではなく、Vuze はコード化された .config ファイルを使用します。

構成ファイルでこの値を設定する比較的簡単な方法があれば、Python スクリプトでランダムなポート番号を選択し、.config ファイルを変更して vuze を開きたいと思います。

2 番目に良い方法は、機能をオンにして vuze を起動し、ランダムなリッスン ポートを割り当て、.config ファイルからポートを読み取り、それがエミュール ポートと同じ場合は、vuze を閉じて再起動することです。

3 月 17 日: [https://bitbucket.org/rsnitsch/py3bencode][1] で py3bencode を見つけました。

3 月 30 日: 最終コードで更新:

def startmysoftware(portgiven):
# eMule

emuleinifile = os.environ['ProgramFiles']+'\\eMule\\config\\'+'preferences.ini'
# vvv beginning and ending quotes are to compensate for Microsoft kludge
emuleappfile = '"'+os.environ['ProgramFiles']+'\\eMule\\emule.exe'+'"'
print(emuleappfile)
# to use both Kademelia and eD2K, emule requires two different port numbers
# unfortunately, PIA's portforwarding servers only provide 1
eMuleNetworkIseD2K = True
parser = SafeConfigParser()
parser.read(emuleinifile)
if eMuleNetworkIseD2K:
    #set up for eD2K
    parser.set('eMule','Port',portgiven)
    parser.set('eMule','UDPPort','0')
    parser.set('eMule','NetworkKademlia','0')
    parser.set('eMule','NetworkED2K','1')
else:
    #set up for Kademelia
    parser.set('eMule','Port','1')
    parser.set('eMule','UDPPort',portgiven)
    parser.set('eMule','NetworkKademlia','1')
    parser.set('eMule','NetworkED2K','0')
with open(emuleinifile, 'w') as configfile:
    parser.write(configfile)
os.system(emuleappfile)
# Vuze
# verify vuze listening port != portgiven for emule and start vuze
vuzeconfigfile = os.environ['AppData']+'\\Azureus\\'+'azureus.config'
# vvv beginning and ending quotes are to compensate for Microsoft kludge
vuzeappfile = '"'+os.environ['ProgramFiles']+'\\Vuze\\azureus.exe'+'"'
vuzelistenport = portgiven
while vuzelistenport == portgiven:
    vuzelistenport = random.randint(49160, 65534)
# bdecode aszreus.config, set port and save
encodedconfig = open(vuzeconfigfile, 'rb').read()
mydecodedconfig=py3bencode.bdecode(encodedconfig)
mydecodedconfig['TCP.Listen.Port']=vuzelistenport
mydecodedconfig['UDP.Listen.Port']=vuzelistenport
mydecodedconfig['UDP.NonData.Listen.Port']=vuzelistenport
encodedconfig=py3bencode.bencode(mydecodedconfig)
configfile = open(vuzeconfigfile,'wb')
configfile.write(encodedconfig)
configfile.close()
os.system(vuzeappfile)
return True
4

1 に答える 1

2

経由でpy3bencodeをインストールする必要はありませんsetup.pypy3bencode.py独自の Python モジュールの 1 つをインポートするように、メイン スクリプトと同じディレクトリに配置してインポートするだけです。

py3bencode を取得するには、次の手順に従います。

  • Mercurialを入手
  • コマンドライン経由で py3bencode の Mercurial リポジトリのクローンを作成します。hg clone https://bitbucket.org/rsnitsch/py3bencode

py3bencode.pyスクリプトと同じフォルダーにコピーするだけです。

setup.pyどうしてもという場合は、手順をもう一度試すこともできます。

  • py3bencode ディレクトリに移動します。cd py3bencode
  • setup.py installPython インタープリターで実行します。C:\Python33\python.exe setup.py install

py3bencode を自由に使えるようになれば、目的を達成するのは簡単です。Vuze の構成ファイルをデコードし、Python に内容を出力させるだけです (ヒント: Python のpprintモジュールを使用して読み取り可能な出力を取得してください)。次に、変更する値を探します。

于 2013-03-24T16:32:22.473 に答える