我正在编写一个 Python 3 脚本,该脚本使用 https API 从 VPN 上的服务器获取随机分配的端口号。有了这个号码后,我想更改 emule 的 .ini 文件以使其使用该端口并启动 emule --easy。
接下来,我想确保 vuze 打开一个监听端口!= emule 正在使用的端口。Vuze 没有将其存储在易于编辑的 .ini 文件中,而是使用经过编码的 .config 文件。
如果有一种相对简单的方法可以在配置文件中设置此值,我想让 python 脚本选择一个随机端口号,更改 .config 文件并打开 vuze。
第二好的方法是启动 vuze 并打开该功能以分配一个随机监听端口,从 .config 文件中读取该端口,如果它与 emule 端口相同,则关闭并重新启动 vuze。
3 月 17 日:我在 [https://bitbucket.org/rsnitsch/py3bencode][1] 找到了 py3bencode,不过我是个菜鸟,但在运行 setup.py 之前我不确定将 4 个文件放在哪里。
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