Python Huey中 初始化ConsumerConfig时**conf与**config.values的区别
huey是一个轻量的任务队列，支持使用sqlite，适合用于在Linux/Windows多平台的软件使用huey的相关教程较少下一篇文章大概会放出，在嵌入到单个软件项目中使用的demo。现象在初始化ConsumerConfig时有两种写法，可以看看下面的demo：from huey.consumer_options import ConsumerConfig conf = {"workers":2, # 消费者数量 "worker_type":'thread', # 消费者类型 "initial_delay":60, # 最小的轮询间隔，与-d相同。 "backoff":2, # 指数退避使用这个速率，-b. "max_delay":100, # 可能的最大轮询间隔, -m. "periodic":True, # 允许周期性任务 "check_worker_health":True, # 启用工人健康检查。 "health_check_interval":1, # 指定了健康检查的轮询间隔 "utc":True, # 将时间戳转换为UTC时间 "consumer_timeout":10, # 消费者超时时间为10秒 } config = ConsumerConfig( workers=2, # 消费者数量 worker_type='thread', # 消费者类型 initial_delay=60, # 最小的轮询间隔，与-d相同。 backoff=2, # 指数退避使用这个速率，-b. max_delay=100, # 可能的最大轮询间隔, -m. periodic=True, # 允许周期性任务 check_worker_health=True, # 启用工人健康检查。 health_check_interval=1, # 指定了健康检查的轮询间隔 utc=True, # 将时间戳转换为UTC时间 consumer_timeout=10, # 消费者超时时间为10秒 ) def worker(**x): print(x) if __name__ == '__main__': worker(**conf) worker(**config.values)安装完成环境后两种写法都对，但运行输出分别为：{'workers': 2, 'worker_type': 'thread', 'initial_delay': 60, 'backoff': 2, 'max_delay': 100, 'periodic': True, 'check_worker_health': True, 'health_check_interval': 1, 'utc': True, 'consumer_timeout': 10} {'workers': 2, 'worker_type': 'thread', 'initial_delay': 60, 'backoff': 2, 'max_delay': 100, 'check_worker_health': True, 'health_check_interval': 1, 'scheduler_interval': 1, 'periodic': True, 'flush_locks': False, 'extra_locks': None}可以观察到，worker(config.values)的输出内容比worker(conf)要多。但这是为什么呢？原因worker(**conf)worker(**conf)这个还是比较好理解的，毕竟是python的标准写法:通过**声明的参数也是可以传入多个参数，但是传入的参数类型需要为字典的类型,且参数在函数内部将被存放在以形式名为标识符的dictionary中，这种方法在需要声明多个默认参数的时候特别有用。worker(**config.values)worker(**config.values)就不太一样了，config是在类里面定义的对象，理论上应该是用vars() 函数,毕竟：vars() 函数返回对象object的属性和属性值的字典对象。但当你实际使用vars() 函数会发现并不会起作用，而参考huey的demo：huey_consumer.py，可以看到作者是这样写的： # 将 options 对象中的非空属性值提取出来，组成一个字典，并将结果赋值给 options 变量。 options = {k: v for k, v in options.__dict__.items() if v is not None} # 创建一个 ConsumerConfig 类的实例对象，使用 options 字典中的键值对参数进行初始化。 config = ConsumerConfig(**options) # 调用 ConsumerConfig 实例对象的 validate 方法，用于验证参数的合法性。 config.validate() # 根据 args 列表中的第一个元素加载一个 Huey 实例，并将结果赋值给 huey_instance 变量。 huey_instance = load_huey(args[0]) # 创建一个名为 'huey' 的 logger 对象。 logger = logging.getLogger('huey') # 调用 ConsumerConfig 实例对象的 setup_logger 方法，用于设置 logger 对象的日志记录级别等参数。 config.setup_logger(logger) # 调用 huey_instance 对象的 create_consumer 方法，创建一个消费者对象，并使用 config.values 中的键值对参数进行初始化。 consumer = huey_instance.create_consumer(**config.values) # 调用消费者对象的 run 方法，开始消费消息。 consumer.run()通过查看from huey.consumer_options import ConsumerConfig中，ConsumerConfig这个类所在的文件，我们能在末尾搜到： @property def values(self): return dict((key, getattr(self, key)) for key in config_keys if key not in ('logfile', 'verbose', 'simple_log'))因此，就可以知道，在这里，通过config.values将config实例转化为字典，然后再用常规的**，即**config.values将该字典传入函数中，即可实现参数的传递。而通过实例进行传参，可以有效的传递未定义的形参，避免再在from huey.consumer import Consumer后，初始化Consumer类的实例的时候导入不完整，这样写更标准。（虽然两种写法均不会报错）拓展但当我故意引入一个错误的参数"x":121212，可以观察到两种导入方式的更明显的区别了：from huey.consumer_options import ConsumerConfig conf = {"workers":2, # 消费者数量 "worker_type":'thread', # 消费者类型 "initial_delay":60, # 最小的轮询间隔，与-d相同。 "backoff":2, # 指数退避使用这个速率，-b. "max_delay":100, # 可能的最大轮询间隔, -m. "periodic":True, # 允许周期性任务 "check_worker_health":True, # 启用工人健康检查。 "health_check_interval":1, # 指定了健康检查的轮询间隔 "utc":True, # 将时间戳转换为UTC时间 "consumer_timeout":10, # 消费者超时时间为10秒 "x":121212 # !!!!错误的参数 } config = ConsumerConfig( workers=2, # 消费者数量 worker_type='thread', # 消费者类型 initial_delay=60, # 最小的轮询间隔，与-d相同。 backoff=2, # 指数退避使用这个速率，-b. max_delay=100, # 可能的最大轮询间隔, -m. periodic=True, # 允许周期性任务 check_worker_health=True, # 启用工人健康检查。 health_check_interval=1, # 指定了健康检查的轮询间隔 utc=True, # 将时间戳转换为UTC时间 consumer_timeout=10, # 消费者超时时间为10秒 x=121212 # !!!!错误的参数 ) def worker(**x): print(x) if __name__ == '__main__': worker(**conf) worker(**config.values)运行上面的代码可以得到下面的结果：{'workers': 2, 'worker_type': 'thread', 'initial_delay': 60, 'backoff': 2, 'max_delay': 100, 'periodic': True, 'check_worker_health': True, 'health_check_interval': 1, 'utc': True, 'consumer_timeout': 10, 'x': 121212} {'workers': 2, 'worker_type': 'thread', 'initial_delay': 60, 'backoff': 2, 'max_delay': 100, 'check_worker_health': True, 'health_check_interval': 1, 'scheduler_interval': 1, 'periodic': True, 'flush_locks': False, 'extra_locks': None}可以看到，worker(**config.values)不会将错误的参数引入到下一步中，通过这个方式增强了代码的健壮性，因此在作者的demo中也用的这个方式来传递参数。参考：python 中 * 与 ** 的参数传递
这个后面涉及到授权，我估计是通过串口通信来传输授权信息的。可以尝试提取它的内核内的驱动，来完善现有黑群晖。或者通过串口注入的方式，来绕过授权，只不过这就超出了我的能力范围了。总之，vdsm的串口root账户密码不是 空。获取qcow21.创建vdsm按照普通方式创建vdsm，是否开机无所谓，我试过使用免费授权，安装完系统后，再进行提取，直接进入了无授权的安装页面。2.导出不要吐槽我的命名方式，我经常搞混啦3.转换使用解压软件打开ddsm.ova，可以发现一个ddsm.ovf与三个vmdk文件，直接解压到新的文件夹。使用命令：qemu-img convert -p -f vmdk -O qcow2 ddsm-disk3.vmdk ddsm-disk3.qcow2 将三个vmdk文件转化为qcow2格式，并用vscode打开ddsm.ovf查看下配置。创建可以使用原生qemu-img，也可以使用unraid，使用pc-i440fx的machine模式，bios引导,scsi硬盘模式即可，还可以使用virtio网卡，创建虚拟机。然后使用virsh console ddsm进入调试串口，监控启动进度。当然，启动正常，但如果安装最新的dsm7.0就提示需要有授权。研究直接开启当使用dsm 6.2.4-25556 Update 2 synology_kvmx64_virtualdsm.pat进行安装时，会报损毁而非无法授权。再次重启后就无法引导了，有点类似于将系统安装到引导盘内。因此，可以尝试想办法只处理单个硬盘，而非将整个硬盘格掉。硬盘分区使用qemu-nbd进行挂载，如下所示：nbd0 43:0 0 10G 0 disk ├─nbd0p1 43:1 0 15.7M 0 part └─nbd0p2 43:2 0 94.1M 0 part nbd2 43:64 0 10G 0 disk ├─nbd2p1 43:65 0 2.4G 0 part └─nbd2p2 43:66 0 2G 0 part nbd3 43:96 0 100G 0 disk └─nbd3p1 43:97 0 100G 0 part ddsm-disk2root@ubuntu:/home/ubuntu/ddsm# mount /dev/nbd0p1 /mnt root@ubuntu:/home/ubuntu/ddsm# ll /mnt 总用量 9310 drwxr-xr-x 3 root root 1024 3月 4 2021 ./ drwxr-xr-x 20 root root 4096 11月 9 15:12 ../ drwxr-xr-x 3 root root 1024 3月 4 2021 boot/ -rw-r--r-- 1 root root 99 3月 4 2021 GRUB_VER -rw-r--r-- 1 root root 6136768 3月 4 2021 rd.gz -rw-r--r-- 1 root root 3349488 3月 4 2021 zImage root@ubuntu:/home/ubuntu/ddsm# umount /mnt root@ubuntu:/home/ubuntu/ddsm# mount /dev/nbd0p2 /mnt root@ubuntu:/home/ubuntu/ddsm# ll /mnt 总用量 9401 drwxr-xr-x 2 root root 1024 12月 4 20:37 ./ drwxr-xr-x 20 root root 4096 11月 9 15:12 ../ -rw-r--r-- 1 root root 87 12月 4 20:38 grub_cksum.syno -rw-r--r-- 1 root root 6162128 12月 4 20:38 rd.gz -r-------- 1 root root 512 12月 4 20:37 Sone.9 -rw-r--r-- 1 root root 65536 3月 4 2021 vender -rw-r--r-- 1 root root 3349632 12月 4 20:38 zImage ddsm-disk2root@ubuntu:/home/ubuntu/ddsm# mount /dev/nbd2p1 /mnt root@ubuntu:/home/ubuntu/ddsm# ll /mnt 总用量 88 drwxr-xr-x 21 root root 4096 12月 4 20:44 ./ drwxr-xr-x 20 root root 4096 11月 9 15:12 ../ lrwxrwxrwx 1 root root 7 3月 4 2021 bin -> usr/bin/ drwx------ 2 root root 4096 12月 4 20:37 config/ drwxr-xr-x 3 root root 4096 3月 4 2021 dev/ drwxr-xr-x 44 root root 4096 12月 4 20:45 etc/ drwxr-xr-x 42 root root 4096 12月 4 20:42 etc.defaults/ drwxr-xr-x 2 root root 4096 3月 4 2021 initrd/ lrwxrwxrwx 1 root root 7 3月 4 2021 lib -> usr/lib/ lrwxrwxrwx 1 root root 9 3月 4 2021 lib32 -> usr/lib32/ lrwxrwxrwx 1 root root 7 3月 4 2021 lib64 -> usr/lib/ drwx------ 2 root root 4096 3月 4 2021 lost+found/ drwxr-xr-x 2 root root 4096 3月 4 2021 mnt/ drwxr-xr-x 2 root root 4096 3月 4 2021 proc/ -rw------- 1 root root 1024 12月 4 20:36 .rnd drwx------ 3 root root 4096 12月 4 20:38 root/ drwxr-xr-x 8 root root 4096 12月 4 20:35 run/ lrwxrwxrwx 1 root root 8 3月 4 2021 sbin -> usr/sbin/ drwxr-xr-x 4 root root 4096 12月 4 20:38 .syno/ dr-xr-xr-x 2 root root 4096 3月 4 2021 sys/ drwxr-xr-x 2 root root 4096 12月 4 20:36 .system_info/ drwxrwxrwx 2 root root 4096 12月 4 20:40 tmp/ drwxr-xr-x 2 root root 4096 12月 4 20:38 tmpRoot/ drwxr-xr-x 10 root root 4096 3月 4 2021 usr/ drwxr-xr-x 15 root root 4096 12月 4 20:44 var/ drwxr-xr-x 13 root root 4096 3月 4 2021 var.defaults/ drwxrwxrwx 2 root root 4096 3月 4 2021 volume1/ root@ubuntu:/home/ubuntu/ddsm# umount /mnt root@ubuntu:/home/ubuntu/ddsm# mount /dev/nbd2p2 /mnt mount: /mnt: 未知的文件系统类型“swap”. ddsm-disk3root@ubuntu:/home/ubuntu/ddsm# mount /dev/nbd3p1 /mnt root@ubuntu:/home/ubuntu/ddsm# ll /mnt 总用量 4 drwxr-xr-x 1 root root 108 12月 4 20:44 ./ drwxr-xr-x 20 root root 4096 11月 9 15:12 ../ drwxr-xr-x 1 1024 users 76 12月 4 20:41 '@database'/ drwxr-xr-x 1 root root 24 12月 4 20:44 '@S2S'/ drwxr-xr-x 1 195341 195341 26 12月 4 20:44 '@SynoFinder-etc-volume'/ drwxr-xr-x 1 195341 195341 84 12月 4 20:44 '@SynoFinder-log'/ drwxrwxrwt 1 root root 10 12月 4 20:43 '@tmp'/ 总结可以观察到这三块硬盘分别是：引导盘、挂载点+swap、数据盘和skynas类似，只不过在这里引导盘与挂载点分为两个硬盘，这两个硬盘为核心硬盘，而数据盘则被挂载到挂载硬盘上了。可能需要和阿里云的skynas的破解方式一样进行破解，但我目前还没头绪。我就研究到这吧，看有没有大佬对这个有兴趣进一步研究。尝试将第一块硬盘改为USB引导，第二第三块依然是scsi后，部署界面就只有一块硬盘提示需要格式化了。然后进行部署，现在就不会报损毁而是卡40%了：后面我一直无法解决卡40%这个问题，具体解决方法还希望大家一起来研究下。补一个vdsm的原生配置：ash-4.3# virsh dumpxml 11 <domain type='kvm' id='11' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>9a9dff46-b3e1-41c0-8003-1164badee095</name> <uuid>9a9dff46-b3e1-41c0-8003-1164badee095</uuid> DSM instance: ddsm <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <memoryBacking> <hugepages/> <locked/> </memoryBacking> <vcpu placement='static'>1</vcpu> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-2.2'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> <hap/> </features> <cpu mode='host-passthrough'> <topology sockets='1' cores='1' threads='1'/> </cpu> <clock offset='variable' adjustment='-4' basis='utc'> <timer name='rtc' tickpolicy='catchup' track='guest'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/local/bin/qemu-system-x86_64</emulator> <controller type='usb' index='0' model='piix3-uhci'> <alias name='usb'/> </controller> <controller type='pci' index='0' model='pci-root'> <alias name='pci.0'/> </controller> <controller type='virtio-serial' index='0'> <alias name='virtio-serial0'/> </controller> <interface type='ethernet'> <mac address='02:11:32:23:76:dd'/> <target dev='tap0211322376dd'/> <model type='virtio'/> <alias name='net0'/> </interface> <serial type='pty'> <target port='0'/> <alias name='serial0'/> </serial> <console type='pty' tty='/dev/pts/35'> <target type='serial' port='0'/> <alias name='serial0'/> </console> <channel type='unix'> <target type='virtio' name='vchannel' state='disconnected'/> <alias name='channel0'/> </channel> <memballoon model='virtio'> <alias name='balloon0'/> </memballoon> </devices> <qemu:commandline> <qemu:arg value='-device'/> <qemu:arg value='vhost-scsi-pci,wwpn=naa.4ab233f4-33c3-410b-b419-55a1d26629f0,addr=0xa,id=vdisk_4ab233f4-33c3-410b-b419-55a1d26629f0,set_driverok=off,max_sectors=16384,boot_tpgt=1,bootindex=1'/> <qemu:arg value='-device'/> <qemu:arg value='vhost-scsi-pci,wwpn=naa.42ad3b88-f963-4551-b15a-7b7706f0bb14,addr=0xb,id=vdisk_42ad3b88-f963-4551-b15a-7b7706f0bb14,set_driverok=off,max_sectors=16384,boot_tpgt=1,bootindex=2'/> <qemu:arg value='-device'/> <qemu:arg value='vhost-scsi-pci,wwpn=naa.c312c6fd-25c4-4dd2-a4b3-63d7a44a0d21,addr=0xc,id=vdisk_c312c6fd-25c4-4dd2-a4b3-63d7a44a0d21,set_driverok=off,max_sectors=16384,boot_tpgt=1,bootindex=3'/> </qemu:commandline> </domain>
好早之前写的，用来生成exe来给小白加速用，现在觉得占位置，就开源算了。做个存档记录。github地址：https://github.com/wnark/eve-download-acceleration源码::[Bat To Exe Converter] :: ::fBE1pAF6MU+EWHreyHcjLQlHcByLPWSyOpEZ++Pv4Pq7p1sY0Qj/8W8k5r2eNrZd+kvjFQ== ::YAwzoRdxOk+EWAjk ::fBw5plQjdCyDJGyX8VAjFANdTQuKAE+/Fb4I5/jH6vyCJ6fd3QLARAogBDJOx64a6UqE ::YAwzuBVtJxjWCl3EqQJhSA== ::ZR4luwNxJguZRRmT+kMiI1VXQwni ::Yhs/ulQjdFy5 ::cxAkpRVqdFKZSjk= ::cBs/ulQjdFy5 ::ZR41oxFsdFKZSTk= ::eBoioBt6dFKZSDk= ::cRo6pxp7LAbNWATEpSI= ::egkzugNsPRvcWATEpCI= ::dAsiuh18IRvcCxnZtBJQ ::cRYluBh/LU+EWAnk ::YxY4rhs+aU+IeA== ::cxY6rQJ7JhzQF1fEqQJgZksaHUrTXA== ::ZQ05rAF9IBncCkqN+0xwdVsEAlTMbSXrZg== ::ZQ05rAF9IAHYFVzEqQK23sLcpPsHw7E/+mVR7f7+agBHK63iNA== ::eg0/rx1wNQPfEVWB+kM9LVsJDGQ= ::fBEirQZwNQPfEVWB+kM9LVsJDGQ= ::cRolqwZ3JBvQF1fEqQK1wtvdrPuHKm76CbsQ4eb+aSZAJLHw0xjb/X8UX15GpRnbb6oO8071UJK1HjfhifGZ++tjDg== ::dhA7uBVwLU+EWN9yLcrY156rloF+7As= ::YQ03rBFzNR3SWATElA== ::dhAmsQZ3MwfNWATEcY3Crd+oyvJbtINFZg== ::ZQ0/vhVqMQ3MEVWAtB9wSA== ::Zg8zqx1/OA3MEVWAtB9wSA== ::dhA7pRFwIByZRRnk ::Zh4grVQjdCyDJGyX8VAjFANdTQuKAE+/Fb4I5/jH6vyCJ6fd3QLARAktAzxm32XsMMAYpbMb8/+wWELs81VdZhfL ::YB416Ek+ZW8= :: :: ::978f952a14a936cc963da21a135fa983 @echo off setlocal EnableDelayedExpansion color 0b mode con cols=80 lines=25 echo ************************************** echo 建议仅从wnark.com下载脚本 echo 使用其他来源下载谨防病毒、木马 echo 对了，记得打开网卡的启用IPv6支持 start ipv6.png echo 如果不随便“优化”的话默认都是打开的 echo 不懂的可以百度搜：启用IPv6支持 pause echo 桌面的ipv6.png是自动打开的那个图片，我设置会自动删除 echo 如果没有自动删除的话 echo 麻烦您待会把桌面的那个ipv6.png文件手动删掉谢谢啦 pause echo 360啥的会提示这个脚本修改网络啥的 echo 允许就行了 pause echo 由于安全软件的原因请手动修改hosts文件 echo hosts位置：C:\Windows\System32\drivers\etc echo ************************************** echo 如果加速游戏服务器请在hosts内填入 echo 127.0.0.1 tranquility.servers.eveonline.com echo ************************************** echo 如果加速启动器请在hosts内填入 echo 127.0.0.1 launcher.eveonline.com echo 127.0.0.1 resources.eveonline.com echo 127.0.0.1 binaries.eveonline.com echo ************************************** echo 修改hosts的时候不用关闭此脚本 echo 修改完成后执行下一步 pause echo 检测iphlpsvc服务是否在运行 for /f "skip=3 tokens=4" %%n in ('sc query iphlpsvc') do set "zt=%%n" &goto :next :next if /i "%zt%"=="STOPPED" (goto 1) if /i "%zt%"=="RUNNING" (goto 2) :1 echo iphlpsvc服务现在处理停止状态,将进行启动 sc config iphlpsvc start= auto net start iphlpsvc echo 启动完成后请重启电脑再次执行脚本 pause exit :2 echo iphlpsvc服务在运行，现在进入下一步 pause echo 检测hosts的内容中,请稍等 For /f "skip=1 tokens=2 delims=[" %%a in ('ping tranquility.servers.eveonline.com') do ( For /f "tokens=1 delims=]" %%b in ("%%a") do ( Set serverip=%%b ) ) For /f "skip=1 tokens=2 delims=[" %%a in ('ping launcher.eveonline.com') do ( For /f "tokens=1 delims=]" %%b in ("%%a") do ( Set launcherip=%%b ) ) For /f "skip=1 tokens=2 delims=[" %%a in ('ping resources.eveonline.com') do ( For /f "tokens=1 delims=]" %%b in ("%%a") do ( Set resourcesip=%%b ) ) For /f "skip=1 tokens=2 delims=[" %%a in ('ping binaries.eveonline.com') do ( For /f "tokens=1 delims=]" %%b in ("%%a") do ( Set binariesip=%%b ) ) echo 请选择加速类型 echo ************************************** echo 1.加速游戏服务器 echo 2.加速启动器 echo 3.恢复原状 echo ************************************** set /p option=请输入你的选择: if "!option!"=="1" ( echo 开始加速游戏服务器 echo 检测hosts是否正确 echo tranquility.servers.eveonline.com的ip是%serverip% pause if "%serverip%"=="127.0.0.1" ( echo hosts设置正确 pause netsh interface portproxy add v4tov4 listenport=26000 listenaddress=127.0.0.1 connectport=33389 connectaddress=129.146.46.7.ipssh.net echo 加速完成 echo ************************************** echo 当前Windows端口转发状态. echo 没显示即加速失败 echo 加速失败请附上此处截图加群：797474927询问 netsh interface portproxy show all netstat -ano | findstr :26000 echo ************************************** pause exit ) else ( echo hosts没正确修改，请设置 echo 127.0.0.1 tranquility.servers.eveonline.com echo 然后再次运行此脚本 pause exit ) )else if "!option!"=="2" ( echo 开始加速启动器 echo 检测hosts是否正确 echo launcher.eveonline.com的ip是%launcherip% echo resources.eveonline.com的ip是%resourcesip% echo binaries.eveonline.com的ip是%binariesip% pause if "%launcherip%+%launcherip%+%binariesip%"=="127.0.0.1+127.0.0.1+127.0.0.1" ( echo hosts设置正确 pause netsh interface portproxy add v4tov4 listenport=443 listenaddress=127.0.0.1 connectport=47068 connectaddress=idc.cubepaas.com echo 加速完成 echo ************************************** echo 当前Windows端口转发状态. echo 没显示即加速失败 echo 加速失败请附上此处截图加群：797474927询问 netsh interface portproxy show all netstat -ano | findstr :443 echo ************************************** pause exit ) else ( echo hosts没正确修改，请设置 echo 127.0.0.1 launcher.eveonline.com echo 127.0.0.1 resources.eveonline.com echo 127.0.0.1 binaries.eveonline.com echo 然后再次运行此脚本 pause exit ) )else if "!option!"=="3" ( netsh interface portproxy delete v4tov4 listenport=26000 listenaddress=127.0.0.1 netsh interface portproxy delete v4tov4 listenport=443 listenaddress=127.0.0.1 echo ************************************** echo 恢复完成，请自行删除hosts的内容 echo 当前Windows端口转发状态. echo 没显示即恢复成功 netsh interface portproxy show all echo ************************************** pause exit ) else ( echo 输入无效请重新执行脚本. pause exit ) exit解释修改hosts文件，提示手动关闭本地的ipv6，完了。最后使用Bat_To_Exe_Converter_x64生成exe文件。1.0版本从存档翻出来的:@echo off echo ######################################## echo ######################################## echo ######################################## echo 必读 echo ######################################## echo ######################################## echo ######################################## echo 因为没钱买更多服务器 echo 目前只支持 echo 防止启动器白屏 echo 防止聊天服务器断开 echo 防止游戏过程中掉线 pause echo ######################################## echo 如果再次出现启动器白屏无法连接eve服务器 echo 如果你的网络一切正常 echo 那就是我更换了服务器 echo 再次双击运行这个exe文件即可 pause echo ######################################## echo 如果出现启动器下面的下载进度条没有显示 echo 那是因为启动器偶尔会校验文件 echo 完全关闭启动器再打开即可 echo 一次不行就多弄几次 pause echo ######################################## echo 请注意你的安全软件提示 echo ######################################## echo 一定要允许 echo ######################################## echo ######################################## echo 有些杀毒软件的“系统优化”会使加速失效 echo 当你运行“系统优化”后请再次运行这个exe文件 echo ######################################## echo 按任意键开始 echo ######################################## pause >nul echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo 执行中-请等待 echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ::去掉host只读 attrib -R C:\windows\system32\drivers\etc\hosts ::删除host旧版规则 findstr /v /c:"eveonline.com" C:\Windows\System32\drivers\etc\hosts > C:\Windows\System32\drivers\etc\eve echo F | xcopy C:\Windows\System32\drivers\etc\eve C:\Windows\System32\drivers\etc\hosts /d /c /y >nul del C:\Windows\System32\drivers\etc\eve ::获取最新ip，利用ping域名 ipconfig /flushdns >nul set ip= for /f "skip=1 tokens=2 delims=[" %%a in ('ping ip.eveonline.ml -n 1') do ( for /f "tokens=1 delims=]" %%b in ("%%a") do ( set ip=%%b ) ) ::将规则写入host echo %ip% launcher.eveonline.com >>C:\Windows\System32\drivers\etc\hosts echo %ip% tranquility.servers.eveonline.com >>C:\Windows\System32\drivers\etc\hosts echo %ip% tranquility.chat.eveonline.com >>C:\Windows\System32\drivers\etc\hosts ::增加host只读 attrib +R C:\windows\system32\drivers\etc\hosts ipconfig /flushdns >nul echo ######################################## echo 任务完成 echo ######################################## echo 按任意键退出 echo ######################################## pause >nul exit
阿里云开发校园合伙人比赛项目详细开发过程
上一篇文章基本上是流水账，就在这篇文章内详细介绍我的开发流程吧。求点赞、求点赞、求点赞。非常感谢(☆ω☆)之前记的流水账，也可以结合一起看。[post cid="124" cover="https://pic.wnark.com/images/2020/08/12/2aHO.th.jpg"/]关于为什么写这篇文章呢，是为了开拓思维。现在好多东西都可以在网上搜到教程了，但又出现了一个新问题就是：“会者不难，难者不会”，思路有时候比具体的知识更重要。我写这篇文章也是作为我自己的备忘录。毕竟过几天我就可能忘了我当初是怎么实现xx了。比赛要求1.基于云开发平台开发任意形式的Web应用2.参赛应用本身也要有自己的前后端通信和数据库操作可以找同学帮忙，但最终交作业的名义是你自己的。大概就这些吧。项目情况我的项目为：网易云音乐模仿 QQ 音乐网页版界面先“简单”介绍下我所完成的项目吧。萌新小白作品，可能有些地方看起来很傻，见笑了。::aru:shy:: 演示：key.coldark.cn music.coldark.cn api.coldark.cn 这三项目作为一个整体来成为我的作品。key：密钥登录界面music：音乐播放界面api：作为音乐播放界面播放音乐时调用的api其实加上一个发卡站就完美了，但涉及到盈利就属于灰色地带了，违反了比赛的要求。（其实是我压根不会弄nodejs版的发卡站）开发经历以下过程可能有点流水账，建议当小说看吧。确认需求老师的要求是在云开发平台开发,则就是在workbench上的cloudide开发，可以部署到serverless。作为比赛项目，有两种类型：严肃和娱乐。考虑到涉及点赞，如果是严肃类风格的话可能用户并不会感兴趣。参考那些演讲台下观众昏昏欲睡，因此我只能选择娱乐类。而作为载体。有文字、音频、视频、图片这几种选择，还有游戏。在最开始的时候我没考虑到有api从“大厂”那盗链。作为个人用户，直接通过阿里云给用户音频、视频、图片服务带宽费我直接扛不起，因此在最开始的时候就忽略了这三个选项。而文字一般是小说之类的东西，但小说这个涉及到盗版了。除了小说，涉及文字的比较火热的就是查题之类的。再就是小而美的：国标，文书这类。因此我总结了一下我所选择的东西的特点：成本：消耗的性能相对较少，使用的流量必须忽略不计。网络：更能发挥severless多地域的部署的优点。瞬时性能：能展现serverless可以动态扩容优势突出与众不同、差异化竞争：很多人会选择搭建博客、电子相框。因此我的首选就是游戏。正好我玩过游戏有过因为玩家都聚集在一个区域而导致游戏紧急维护的情况。确认优劣我的劣势是完全不熟悉serverless平台，对于nodejs完全是小白，python的话只有写脚本的水平，还不至于能独立做一个网站，优势是熟悉网站运营，了解用户需要什么，市面上有哪些比较热门网站，因此我可以往我的优势发挥，使用开源、热门的项目。确认项目最开始的时候我是准备部署一个html小游戏就行了，所有内容全前端完成。刚好在mjj论坛看到一个魔塔项目，因此参考老师部署静态文件的教程部署到服务器上了：但在某次课程结束后，老师说要前后端通信，以及用到数据库。大概网站我是没时间也没能力了，因此暂时放弃了，大家想玩可以去找安装包玩玩。（原准备开个服务器给大家玩玩的，但是忘记同步Git了（那个时候不会，后面会了又忘了），现在打开容器的时候发现容器已经被清空了。）我再到GITHUB 以：game nodejs为关键词搜索，most stars排序。之所以用GitHub而不用谷歌搜是为了排除那些“商业项目”。根据我谷歌搜到的内容，以nodejs作后端的游戏其实挺少的。果然前两页项目基本上只有几百star。我再打开每个项目，看它的demo以及readme文件来查看是否符合我的选择。以下是我部分筛选项目以及评估。FreezingMoon/AncientBeast ：需要两个人在计算机前玩，更偏向西化 alexa/skill-sample-nodejs-adventure-game：文字冒险类游戏，用户不好迅速体验 jondubois/iogrid：nodejs版本太老了 Jerenaux/phaserquest 介绍了如何连接mongoDB luin/CodeGame 技术上太难实现了 Lallassu/wizardwarz 鼠标控制不方便 gustaYo/vue-chess 国际象棋太小众了 node-pinus/pinus 国人项目，没demo lance-gg/lance：作者写了个很好的入门教程：http://docs.lance.gg/tutorial-MyFirstGame.html 我还用3D+nodejs作为关键词搜了一遍。找到了个挺好玩的项目：https://github.com/konaraddi/web-riimote在本地虚拟机部署成功，但在cloudide部署失败了。和群里讨论了后感觉是因为它的客户端和服务器是使用TCP这类4层协议（不太确定），但为了节省时间我就没继续测试了，以后有机会再看看吧。最后准备使用：colyseus/colyseus为基础的damian-pastorini/reldensdamian-pastorini/reldens前端与后端使用WebSocket 进行通信，并且后端还连接了数据库，部署的demo也还不错在搜资料的过程中我还发现了一个他总结了他参加腾讯云serverless项目的网站，但因为我已经确定了项目因此就没详细的看他的项目了。https://serverlesscloud.cn/blog/page/4 新的思路在筛选合适的游戏项目的时候，因为老师说可以找同学帮忙，因此我询问了一圈我的做网站朋友和实验室的朋友们，但他们都没怎么接触过nodejs。ucw大佬高三要上课，没时间时间。虽然他推荐了个人给我但我想着将其作为最后一道保险吧。最后我决定独自一人完成项目开发。大不了通宵几天在找帮助的过程中，有个朋友和我聊天说他想部署一个项目：https://github.com/maomao1996/Vue-mmPlayer而我在看玩这个项目的readme后才意识到，我可以使用api来获取大厂的资源，作为我自己的资源提供服务。（只要不盈利就没事），刚好Vue-mmPlayer以及api服务器的NeteaseCloudMusicApi都是国人的项目，并且项目维护时间比较久，还有群方便请教问题。只不过那时我以及确定部署游戏了。为了以防万一我还是将Vue-mmPlayer假如我的备用项目内。部署前damian-pastorini/reldens这个项目的readme讲的非常详细，我照着它的readme就成功在虚拟机内跑通了，并且感觉瞬间高端起来。演示如下但是，它的编译文件不包含数据库配置信息，尝试整体部署到serverless时碰到了限制50M，大小限制，因此只能放弃部署，顶多以后再试。Vue-mmPlayerdamian-pastorini/reldens部署失败后，我就开始着手部署Vue-mmPlayer了，虽然借用大厂的api的项目都能可以很好的解决昂贵的音视频资源的问题，但我没时间一个个找了。因此就直接选择Vue-mmPlayer。部署中网易云音乐模仿 QQ 音乐网页版界面本质上是前端：Vue-mmPlayer + 后端：NeteaseCloudMusicApi符合前后端通信这个要求，但原项目并不需要对接数据库，因此我为了对接数据库，加了个前端，参考那行“VIP盗版网站"它们的思路，在最前面加了一个验证网站，播放界面通过referer判断来源域名,来实现是否可以播放还是跳转到授权页面。测试我首先在自己的服务器上进行了测试，参考了源项目的部署教程，在自己的服务器上部署，来熟悉流程和确认可用性。部署过程中，我发现api服务器还是常规的node app.js才能运行，但前端播放界面是可以用nginx部署静态的方式进行部署，询问老师后确认了实质上vue架构npm builder后就成了静态文件了，届时可以在workbench上像部署静态文件一样进行部署即可。我就先部署前端吧。部署后播放器首页报：/top/list 接口提示 Requset failed with status code 500在Vue-mmPlayer源文内：src/api/index.js 排行榜详情的idx改成id，再重新编译。不用改了，作者已经修复了学习git最开始我是从GitHub上git clone，然后用rm -rf *和mv * .[^.]* ../来部署最开始的项目的，只不过这样的话还是不会推到附送的git上，最开始cloudide还是全英文的，阿里官方的文档也写的很简陋。因此我就去百度搜了下别的云厂商的文档，找到华为云的详细操作教程文档，参考那个文档学会了阿里云的cloudide的使用步骤（果然相同）然后我用Sourcetree连接项目的git仓库，将文件保存到本地，再将GitHub的内容下载到本地，覆盖掉项目git文件，然后推到git上，借此来将项目转移到云开发平台的代码仓库中，然后在cloudide内使用同步按钮，将代码仓库的东西拉到cloudide内。后来我创建项目后不会马上打开cloudide，而是先传到云开发平台的仓库，这样第一次打开cloudide后就不需要手动同步了。Vue-mmPlayer作为前端部署的时候我一开始没什么头绪，傻傻的把文件一股脑上传上去，然后部署，以期待能自动化完成，可惜不行。╮(╯▽╰)╭ 但在我自己的服务器上部署的时候发现可以把dist文件夹内的文件当作纯静态文件来对待，虽然用文本方式打开后里面部署常规的格式。但还能提取一些关键信息。因此我直接把宝塔上部署好的Vue-mmPlayer的dist文件夹内的文件按纯静态的方式弄到workbench上，使用nodejs迁移方案来部署，可以从临时域名访问，一次跑通就部署到线上环境了。去解析那修改成workbench的临时域名就行了。NeteaseCloudMusicApi先谷歌搜了下资料，怎么判断项目使用的架构。知道了查看package.json，里面的dependencies，里面有个组件是express，刚好是老师之前提到过的一个nodejs架构，因此我们可以使用workbench的express迁移方案来部署。看迁移方案readme内的文件，有两个关键点。1.## 添加依赖 - 在 package.json 中，添加开发依赖 { "name": "xxxxxx", "version": "xxxx", ..... "devDependencies": { "@midwayjs/faas-cli": "*" } } 这里面的含义是要安装@midwayjs/faas-cli组件，也就是说在之前项目的基础上要加入@midwayjs/faas-cli，而不是直接使用原来的项目的package.json文件，说起来cloudide的package.json不能被覆盖，我是先手动删除后再上传的，作为bug提交给老师了，不知道啥时候修复。2.## 部署 - 结束调试模式 - 在 app.js 中注释对 3000 端口的监听 - 点击 CloudIDE 侧边栏的「WB」部署插件，选择要部署的环境，点击「部署」，等待部署完成即可 - 默认打包 app/ 和 config/ 两个目录，如果你的应用需要将其他目录也一起打包，需要在 f.yml 中添加如下配置，比如 util 目录也要打包： package: include: - util 原来的readme这里package后面没带冒号，我在这里给他加上了。还有这里是选择打包的文件，如果对项目不熟悉的话，建议打包所有的文件。就像我的：package: include: - util - module - docs - module_example - plugins - public - static - test 我也不知道哪些需要，只不过都打包只要不超过50M也没问题。又因为原作者在app.js内指定了端口，翻看了一下直接注释掉试试可以// const port = process.env.PORT || 3000 // const host = process.env.HOST || '' // app.server = app.listen(port, host, () => { // console.log(`server running @ http://${host ? host : 'localhost'}:${port}`) // }) 监听貌似是监听所有来源，就不用管了。部署上线后，发现api失效，是因为Vue-mmPlayer在前端主动加了:3000，手动修改下前端文件就行了。也就一个js文件，不用重新编译。看来是用js结合html文件生成一个网页，然后点击的时候是直接在前端对api提出请求。发卡验证站参考老师的最后一课，我改造了下，注释掉了注册功能，因为我不确定能保证注册的功能完整性，主要还是没系统学习nodejs，因此参考盗版电影、小说网站做了一个授权机制，使用keyid+密钥方式进行授权，届时使用发卡站卖id+密钥。先完成任务，其他的以后再说优化结合起来首先部署的三个站分别是key站和播放站这两个独立的系统，因此我需要将他们结合起来。我知道有传统的跳转的nodejs代码，但我没把喔一下子部署，因此就使用了referer进行跳转，也有一定的安全性（毕竟普通用户也不懂这个）。我的想法在最早是来源这篇文章。https://blog.wolfogre.com/posts/anti-hotlinking-without-referer/ 1.key ⋙ music先去key站的源码那，改造了下登录成功的提示那部分，最开始使用 window.location.href，但在火狐下运行不正常，因此我替换成window.location.assign以兼容火绒.then(resp => { if (resp.success === true) { alert(`登录成功，即将进入播放页面。ID：${resp.user.name}`) window.location.href = "http://music.coldark.cn" } else { alert(`登录失败，提示信息：${resp.message}`) } }) 2.music ⋙ key最好的办法就是在music源码里加一个referer识别，但我不会，也想尽可能减少源码的改动。其次就在cdn厂商那添加，但我用百度云cdn居然不支持referer来源白名单，腾讯云cdn支持但没免费的waf。。。。刚好我需要加层反代，因此就用nginx处理吧，先能上线再说。还有就是播放器页面部署的时候是当作静态部署的，感觉是没法判断referer的（至少没思路）美化替换了下图片，和文字，将他们结合一下，这直接在源码搜索替换就行了。防御阿里的api网关的功能用了下，缺功能，我还是在高防服务器反代后进行限频+防cc吧。渗透倒不用担心。在dns解析那指定了国外解析ip为127.0.0.1，防御那行发卡站的ddos，个人ddos的话用百度云cdn廉价版的waf够了。再加上即使百度云穿透后，甲骨文的vps自带高防，因此不用怕ddos了。百度统计播放站自带百度统计代码，修改下js后面的数字就行了。源码以下是我项目的源码，大家可以直接把全部文件放到workbench的cloudide内，直接绑定自己的域名就行了。感谢感谢阿里云的黄贤良、风驰等各位给我们上课、解答问题的大佬们，还有钉钉群的小伙伴们，还有reldens-skeleton、Vue-mmPlayer、NeteaseCloudMusicApi的作者、discord及QQ群的大佬们。参考：一种新的可应对空白 referer 的防盗链策略Sweet Alert弹窗点击确定后执行页面跳转等操作万物皆可 Serverless 之我的 Serverless 之路
虽然我觉得用那个tap软件来加速eve online太原始了，但还是有人对这个有需求，我又懒得手动配置。因此我还是写一个脚本吧。EVE-Online-Generate-IP-rules-automatically项目地址：https://github.com/wnark/eve-online-Generate-IP-rules-automatically 本项目获取eve online域名对应的所有ip，储存并生成对应的rule文件本项目是 miyouzi/akamTester 的分支拿来即用[scode type="yellow"]由于CCP的聊天服务器ip经常大范围变动，如果你发现你连不上聊天服务器了，并且live.chat.eveonline.com的ip不在live.txt里面，那就表示又要生成新的规则了，请在评论/github提出，我更新文件（或者你自己执行脚本，反正超简单）[/scode]点击下载 Eve-online.rules其实我更推荐用修改hosts的方法[post cid="53" cover="https://pic.wnark.com/images/2020/02/04/48561346-8x3.th.png"/]需要处理域名tranquility.servers.eveonline.com live.chat.eveonline.com launcher.eveonline.com resources.eveonline.com binaries.eveonline.comEve-online.rules 为最终生成的文件，适用sstap版本：1.0.9.7Eve-online.rules文件仅在本项目更新，偶尔在FQrabbit/SSTap-Rule内更新源码运行安装依赖:pip3 install requests beautifulsoup4 lxml termcolor pythonping dnspython IPy执行 eve-online-rule.pypython3 eve-online-rule.py关于轮子GlobalDNSGlobalDNS 是个对域名进行全球解析的类, 使用 www.whatsmydns.net 的 API 进行解析，额外包含本地、谷歌、腾讯、阿里 DNS 的解析结果。导入from GlobalDNS import GlobalDNS使用akam = GlobalDNS('upos-hz-mirrorakam.akamaized.net') ip_list = akam.get_ip_list() # 取得全球解析结果, 返回一个 set akam.renew() # 重新解析 ip_list = akam.get_ip_list() # 将返回最近一次全球解析的结果ColorPrinterColorPrinter 染色输出工具, 可输出红绿及默认颜色(一般终端为白色), 可跨平台, 包括pyCharm中的运行窗口导入from ColorPrinter import color_print使用color_print('Hello World') # 默认输出颜色 color_print('Hello World', status=1) # 输出红色 color_print('Hello World', status=2) # 输出绿色miyouzi/akamTester使用它的轮子来获取每个域名的所有iptry: akam = GlobalDNS(host) color_print('第一次解析:') ip_list = akam.get_ip_list() print() color_print('第二次解析:') akam.renew() ip_list = ip_list | akam.get_ip_list() print() color_print('第三次解析:') akam.renew() ip_list = ip_list | akam.get_ip_list() except BaseException as e: color_print('进行全球解析时遇到未知错误: '+str(e), status=1) if os.path.exists(ip_list_path): color_print('将读取本地保存的ip列表', status=1) with open(ip_list_path, 'r', encoding='utf-8') as f: ip_list = f.read().splitlines() else: color_print('没有本地保存的ip列表！程序终止！', status=1) print() input('按回车退出') sys.exit(0) else: # 保存解析结果 with open(ip_list_path, 'w', encoding='utf-8') as f: for ip in ip_list: f.write(str(ip)) f.write('\n')
我之前用的是javi的公益服务，但他是用的对象存储，要花钱。为了给javi省钱，我决定用jsDelivr白嫖加速handsome静态文件。如果你想直接用现成的话，请点击前往使用javi的服务。[scode type="yellow"]由于有人恶意盗用作者的主题资源，因此我删除了公共项目。[/scode]jsDelivr是什么jsDelivr由ProspectOne维护的公共库，使用的融合CDN技术，由Cloudflare、Fastly、StackPath、QUANTIL等CDN供应商提供了全球超过750个CDN节点。最重要的是，jsDelivr在中国大陆也拥有超过数百个节点，因为jsDelivr拥有正规的ICP备案，解决了中国大陆的访问速度优化，实现真正的全球极速低延迟体验。jsDelivr是免费的、不限制带宽的，可以加速NPM、Github内的文件。本文采用的方法就是将静态文件资源放到Github的仓库内，再使用jsDelivr进行加速访问，达到完全零成本优化访问速度。相当于一个高速访问的图床！开始使用创建仓库在Github新建一个公开仓库，用于存放我们的静态文件资源。这里不再过多赘述，下面的链接是我的静态文件资源仓库。https://github.com/wnark/handsome-assets 使用jsDelivr访问资源根据jsDelivr的文档，有很多种访问资源的方式，但因为我懒得维护，就选择了最简单的一种根据jsDelivr的要求，文件路径为：https://cdn.jsdelivr.net/gh/user/repo@latest/file以我的为例：https://cdn.jsdelivr.net/gh/wnark/blog-assets@latest/6.0.0/ 目前博主使用的是这种方案。这种方案不需要发布releases，可以直接从master读取文件，而且实时更新缓存。但是官方并不推荐使用这种方法，因为修改master的文件后，如果没有修改网站的旧链接，可能会出问题。根据你自己的情况决定吧。访问统计jsDelivr还提供了文件列表和文件访问统计页面：文件列表：https://cdn.jsdelivr.net/gh/user/repo/比如我的：https://cdn.jsdelivr.net/gh/wnark/handsome-assets/访问统计：https://www.jsdelivr.com/package/gh/user/repo比如我的：https://www.jsdelivr.com/package/gh/wnark/handsome-assets代码压缩jsDelivr还提供了代码压缩服务，比如将JS/CSS的代码压缩，优化访问速度。只是前几次访问会执行压缩操作，速度比较慢。后面就会将文件缓存，速度不会再慢了。。。。只不过不适合handsome用，就算了。。。前几次会非常慢，手动多刷新几次后，缓存建立好后就很快了。使用方法Handsome主题的后台设置-速度优化-将本地静态资源上传到你的cdn上中填写：https://cdn.jsdelivr.net/gh/wnark/handsome-assets@master/{版本号}/ 如https://cdn.jsdelivr.net/gh/wnark/handsome-assets@master/6.0.0/ 参考：Handsome静态资源加速利用jsDelivr白嫖全球超高速静态资源访问服务！GitHub+jsDelivr 打造免费且速度理想的 OSS
作为我个人方案备份，不教方法。创建文件夹需要创建C:\eveonline C:\TY-eveonline C:\eveonline\launcher C:\eveonline\resources C:\TY-eveonline\launcher C:\TY-eveonline\resources 安装choco以管理员身份运行powershell执行Set-ExecutionPolicy AllSigned 修改powershell脚本运行安全等级使用Get-ExecutionPolicy 获取当前安全等级再执行Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) 安装chocolatey关闭PS的快速编辑powershell使用快速编辑时，可能会导致界面在运行时一动不动，因此需要关闭。右键powershell程序栏，选择属性，关闭powershell快速编辑和插入模式安装aria2使用choco install aria2 来安装aria2，用来下载。脚本[collapse status="true" title="eveonline-launcher.ps1"]##C:\eveonline为执行脚本所在文件夹 ##C:\TY-eveonline为天翼云盘同步文件夹 ##脚本运行需要创建C:\eveonline | C:\TY-eveonline | C:\eveonline\launcher | C:\TY-eveonline\launcher | C:\TY-eveonline\resources |C:\eveonline\resources\ Invoke-WebRequest -Method Get "https://launcher.eveonline.com/launcherVersions.json" -OutFile "C:\eveonline\new_launcherVersions.txt" ##从json文件获取最新版本并保存到new_launcherVersions.txt中 $new_launcher = Get-Content "C:\eveonline\new_launcherVersions.txt" $old_launcher = Get-Content "C:\eveonline\old_launcherVersions.txt" ##读取新与旧参数的文件,保存参数到new_launcher与old_launcher $json_new_launcher = $new_launcher | ConvertFrom-Json $json_old_launcher = $old_launcher | ConvertFrom-Json ##json规范化版本参数 $new_win = $json_new_launcher | Select-Object -ExpandProperty win $old_win = $json_old_launcher | Select-Object -ExpandProperty win ##获取win的版本号 $new_mac = $json_new_launcher | Select-Object -ExpandProperty mac $old_mac = $json_old_launcher | Select-Object -ExpandProperty mac ##获取mac的版本号 $new_linux = $json_new_launcher | Select-Object -ExpandProperty linux $old_linux = $json_old_launcher | Select-Object -ExpandProperty linux ##获取linux的版本号 if ( Compare-Object $new_win $old_win ) { Remove-Item "C:\eveonline\launcher\EveLauncher.exe*" Remove-Item "C:\TY-eveonline\launcher\EveLauncher.exe*" aria2c --split=10 --max-connection-per-server=10 --dir="C:\eveonline\launcher\" --out=EveLauncher.exe "https://binaries.eveonline.com/EveLauncher-$new_win.exe" Get-FileHash "C:\eveonline\launcher\EveLauncher.exe" -Algorithm MD5 | Select-Object -ExpandProperty Hash > "C:\eveonline\launcher\EveLauncher.exe.md5" } ##如果win版本号不相同就下载win,并生成md5 if ( Compare-Object $new_mac $old_mac ) { Remove-Item "C:\eveonline\launcher\EveLauncher.dmg*" Remove-Item "C:\TY-eveonline\launcher\EveLauncher.dmg*" aria2c --split=10 --max-connection-per-server=10 --dir="C:\eveonline\launcher\" --out=EveLauncher.dmg "https://binaries.eveonline.com/EveLauncher-$new_mac.dmg" Get-FileHash "C:\eveonline\launcher\EveLauncher.dmg" -Algorithm MD5 | Select-Object -ExpandProperty Hash > "C:\eveonline\launcher\EveLauncher.dmg.md5" } ##如果mac版本号不相同就下载mac,并生成md5 if ( Compare-Object $new_linux $old_linux ) { Remove-Item "C:\eveonline\launcher\EveLauncher.tar.gz*" Remove-Item "C:\TY-eveonline\launcher\EveLauncher.tar.gz*" aria2c --split=10 --max-connection-per-server=10 --dir="C:\eveonline\launcher\" --out=EveLauncher.tar.gz "https://binaries.eveonline.com/evelauncher-$new_linux.tar.gz" Get-FileHash "C:\eveonline\launcher\EveLauncher.tar.gz" -Algorithm MD5 | Select-Object -ExpandProperty Hash > "C:\eveonline\launcher\EveLauncher.tar.gz.md5" } ##如果linux版本号不相同就下载linux,并生成md5 Copy-Item "C:\eveonline\new_launcherVersions.txt" "C:\eveonline\old_launcherVersions.txt" ##覆盖旧的文件，作为新的对比项 Move-Item -Path "C:\eveonline\launcher\*" -Destination "C:\TY-eveonline\launcher\" ##把文件转移到天翼云盘 [/collapse][collapse status="true" title="everesources.ps1"]##C:\eveonline为执行脚本所在文件夹 ##C:\TY-eveonline为天翼云盘同步文件夹 ##脚本运行需要创建C:\eveonline | C:\TY-eveonline | C:\eveonline\launcher | C:\TY-eveonline\launcher | C:\TY-eveonline\resources |C:\eveonline\resources\ Remove-Item "C:\eveonline\resources\*" Remove-Item "C:\TY-eveonline\resources\*" ##删除旧文件 aria2c --split=10 --max-connection-per-server=10 --dir="C:\eveonline\resources\" https://binaries.eveonline.com/EVEResources.7z ##下载文件 Get-FileHash C:\eveonline\resources\EVEResources.7z -Algorithm MD5 | Select-Object -ExpandProperty Hash > C:\eveonline\resources\EVEResources.7z.md5 Move-Item -Path "C:\eveonline\resources\*" -Destination "C:\TY-eveonline\resources\" ##把文件转移到天翼云盘 [/collapse]将两脚本均放入C:\eveonline文件夹修改ps安全等级允许我个人编写的脚本运行Set-ExecutionPolicy Unrestricted 执行Get-ExecutionPolicy 查看是否修改成功。调试进入文件夹先手动执行一次eveonline-launcher.ps1内的下载以及创建对比文件主要是将生成的C:\eveonline\new_launcherVersions.txt改成C:\eveonline\old_launcherVersions.txt手动修改C:\eveonline\old_launcherVersions.txt内的数字，再次执行./eveonline-launcher.ps1查看是否能正常比较。再手动运行两个脚本，查看下载情况./eveonline-launcher.ps1 ./everesources.ps1 同步手动执行，下载完后。安装天翼云盘，本地连接ssr，然后天翼云盘使用ssr连接，再创建文件夹C:\TY-eveonline增量备份。当每次备份文件不同时，不会修改文件名，而是覆盖备份。这样可以保证文件夹内文件恒定为最新。自动化运行用Windows自带的计划任务程序来实现每天下载，自动上传功能备份[button color="danger" icon="glyphicon glyphicon-download-alt" url="https://pan.wnark.com/api/v3/file/get/36/eve%E5%90%AF%E5%8A%A8%E5%99%A8%E4%B8%8E%E7%BC%93%E5%AD%98%E6%96%87%E4%BB%B6%E8%84%9A%E6%9C%AC.zip?sign=WqiTBTAy6UX5y50uN2_YBuAySTsK_oedP17k288DHeE%3D%3A0" type=""]eve启动器与缓存文件脚本.zip[/button]参考：chocolatey
利用按键精灵在VPS挂机抢甲骨文免费机
甲骨文免费机的韩国区一直都是一机难求。为了抢免费VPS，有的大佬使用浏览器的控制台挂机脚本，有的大佬利用API。但甲骨文的API已经变过好几次了，我在浏览器使用控制台挂机脚本时报错。于是，我想到利用按键精灵写了个简陋的脚本在VPS上挂机抢甲骨文免费机。哪个MJJ手里没几台win机据说每个月的月初和月末甲骨文放机，你可以试试在30号左右的时候抢。[scode type="yellow"]需要你的Windows VPS拥有VNC连接方式，并且断开VNC后不会失去鼠标。最好使用国外的Windows VPS，以防因网络原因导致无法正常点击。如果你的VPS没有VNC，那么就需要两台Windows VPS[/scode]准备首先在国外的VPS上安装好按键精灵（2014）和chrome浏览器，在chrome浏览器添加Super Auto Refresh Plus这个插件。这个插件是为了定时刷新浏览器界面，防止甲骨文购买界面出现“挂机自动退出”选项。[scode type="yellow"]我测试过火狐浏览器，发现更容易退出。而谷歌可以挂机12个小时。所以建议用谷歌浏览器。[/scode]开始登陆登陆甲骨文云(oracle cloud),右键左上角的oraclecloud图标，选择在新标签页打开链接。此时有两个标签页均为甲骨文云的首页。第一个标签页进入计算 - 实例。我账号原本有两台免费机。为了做教程以及防止被说造假，我先取消一台免费机，如图所示。第一个标签页进入创建界面，设置好你的选项，先尝试创建没准刚好放机了当然，理所当然的，我这里因为没资源了....创建失败（个屁），居然还有机子，我等它没机子吧。第二天中午，终于没免费机了。可用性域 gIce:AP-SEOUL-1-AD-1 中配置 VM.Standard.E2.1.Micro 的容量不足。 请稍后重试。 了解有关主机容量的更多信息。 开始前往第二个标签页，用Super Auto Refresh Plus插件设置30min自动刷新一次。打开刷机精灵按键精灵，提取按钮的坐标，编写脚本，如图所示，即为自动挂机脚本。我设置20s自动点击一次。[scode type="blue"]如果你嵌套远程桌面/使用VNC的话，注意下自己脚本内鼠标点击左边是否是在那个按钮位置。[/scode]嵌套远程桌面如图所示，在第二台Windows远程登陆第一台Windows，注意设置好分辨率，调整好鼠标点击位置。按键精灵选择调试 - 启动。先观察下是否能正常自动点击。然后直接关闭第二个远程桌面即可。此时按键精灵依然可以自动点击，并且由于Super Auto Refresh Plus插件每30分钟自动刷新一次第二个标签页，所以刷机页面不会退出。VNC连接[scode type="blue"]部分运营商的vnc长时间断开后会导致失去鼠标，浏览器停止自动刷新。所以出现这种情况建议用上面嵌套远程桌面的方案。[/scode]我用的第一台Windows运营商自带VNC。直接用VNC连接Windows，调试按键精灵按键位置参数。按键精灵选择调试 - 启动。先观察下是否能正常自动点击。然后直接关闭VNC即可。此时按键精灵依然可以在后台自动点击，并且由于Super Auto Refresh Plus插件每30分钟自动刷新一次第二个标签页，所以刷机页面不会退出。一般来说过一晚就能抢到机子了。
本项目为公益服务，永久免费。由于ccp的操作纯粹是借口，我对eve彻底失去兴趣了，这个项目在2022年1月1日将无限期关闭。本项目现阶段使用的是ucloud的globalSSH来保证网络稳定性，如果各位谁有兴趣接手，可以聊聊在哪个时间无缝衔接下。没人衔接的话，将于2022年1月1日直接关闭项目。序言闲的没事干折腾的项目，不是常见的酸酸乳之类的加速器，不能上外网。[scode type="red"]新增、修改hosts文件的时候注意删掉你之前的内容，恢复为系统默认的内容再进行增改，以免由于粗心导致hosts文件内容混乱。[/scode]bat脚本这个是为了方便大家使用写的bat脚本，没加密，大佬一看源码就懂可以手动配置。如果不会手动配置的就用脚本吧，这个不是游戏外挂[scode type="red"]内置的服务器已失效，别用，我懒得更新[/scode]点击下载，双击打开，按提示操作即可。了（只在Windows 10 64位上测试过，mac无法使用）下载加速服务器到期，不能用了]350报毒，火绒、卡巴斯基没报毒。用360的想用的话添加信任就行。[scode type="yellow"]加速启动器没啥用，还是别用了[/scode]密码是"wnark.com"(没引号)只需要加速的时候打开一次，电脑重启后配置都还在，不用再运行。如果需要恢复原状就再执行一次按3就行了，恢复是全部恢复。可能使用加速后启动器报错：初步筛查是因为vmware虚拟机的问题，建议玩游戏的时候完全关闭VMware（右下角那个图标）具体原因由于目前我没时间因此无法确定。（由linda反馈并提出解决方案）初步怀疑是VMware的虚拟网卡调用了netsh，导致netsh没法正常转发数据包。常规线路使用方法很简单：在Windows/MAC修改host文件即可[scode type="yellow"]360等国产杀毒软件会强行禁止修改hosts，虽然可以忽略警告。自行斟酌吧。[/scode]windows修改 C:\Windows\System32\drivers\etc\ 文件夹下的hosts文件即可。一般没权限，把hosts文件拖到桌面，修改后再拖回去就行了。在hosts内容如下图所示（别照抄）：mac比较复杂，建议看网上的教程：如何在 macOS 下设置 host ？加速游戏与聊天服务器[scode type="blue"]下面的hosts配置为加速游戏服务器与聊天服务器，即通过启动器进入游戏后，在游戏过程中减少出现卡顿掉线的情况，并不能加快启动器打开与下载速度。[/scode]游戏服务器（全宽带可用，无论你是联通、电信还是移动、网通、教育网）对应的域名为：tranquility.servers.eveonline.com提供服务的服务器ip北方：120.132.56.65hosts文件内容：120.132.56.65 tranquility.servers.eveonline.com 聊天服务器[scode type="yellow"]由于有人喜欢在中文频道键政，以及目前游戏聊天服务器不再出现掉线，我将择机停止加速聊天服务器[/scode]对应的域名为：live.chat.eveonline.com提供服务的服务器iphosts文件内容：[scode type="yellow"]tranquility.servers.eveonline.com为游戏服务器域名live.chat.eveonline.com为聊天服务器域名可以根据你家网络情况单独选择一种域名填入hosts中，则可以单独加速游戏服务器/聊天服务器可能随着使用该公益服务器的人数增加，用来加速游戏服务器完全无法满足用户的需求，造成您在过门/交易时卡顿，请及时反馈（但我没钱扩容）并且替换其他线路试试。[/scode][scode type="blue"]服务器带宽有限，我将根据服务器带宽占用情况提供不同的服务器提供不同的服务，暂不为国外的小伙伴提供服务。[/scode]加速启动器及更新把下面内容添加进hosts文件即可。193.123.226.13 launcher.eveonline.com 193.123.226.13 resources.eveonline.com 193.123.226.13 binaries.eveonline.com 193.123.226.13 www.eveonline.com 193.123.226.13 web-cdn.eveonline.com 加速下载没人用，已关闭sstap规则虽然我觉得用sstap来加速eve online太原始了，但还是有人对这个有需求，我又懒得手动配置。因此我还是写一个脚本吧。前往下载脚本：[post cid="101" cover="https://pic.wnark.com/images/2020/04/04/1585910562002-bilibili-8x3.th.png"/]疑难解答Q：为什么推出这个吃力不讨好的项目。A：一切，都要从那只倒霉的蝙蝠说起。没人看我博客，就想宣传下我的博客。Q：你这啥垃圾服务器200多延迟，我买的xx加速器才几ms。A：EVE不像fps游戏对延迟有非常高的要求，并且CCP的服务器在英国，物理上的距离导致中国连接EVE的服务器延迟不可能低于200ms左右。常见加速器显示的延迟均为你家到加速器服务器的延迟，不能算错，偷换概念而已。Q：我手上有bwg/vultr/...服务器，怎么赞助这个项目。A：目前从原理上已经舍弃了使用个人服务器，不需要了，谢谢。Q：是否能ISK/现金赞助。A：报备中Q：XX服务器为什么不能用。A：请在评论区完整的提出出现的问题，最好是按照github的issue的格式提出问题。Q：我多开的时候会出现connect（连接）界面，点击连接所有账户都掉线了。A：短时间多账号同时登陆可能会被服务器误判我设置了防火墙策略，建议多开使用商业加速器，单开的话可以试试我的加速服务。（注：目前来看不影响其他已登陆游戏的用户。）感谢PEN的反馈。Q：为什么不给国外用户使用。A：国内都不够用，能出国工作/留学的同学应该不会在乎加速器这点小钱吧。Q：会不会被脚本连坐。A：一堆宽带商/加速器都是共享IP，你们就不怕连坐？话是这么说，虽然能用脚本付得起脚本月租的钱应该也看不上我这垃圾服务器。但是我这边会查看日志，如果出现一个IP连续23H连接，我将直接ban掉IP，请各个脚本大佬花点钱买个加速器吧。Q：能加速其他游戏吗？能访问“学习资料”吗？A：原理和常见加速器不一样，所以不能加速其他游戏，也不能看“学习资料”。Q：启动器白屏进不去。A：由于带宽有限，暂不提供启动器以及下载服务器加速服务。用白话文说就是进去点击“播放”按钮后游戏进入人物选择才开始生效。请使用常规代理软件打开启动器或者下载游戏文件，进入人物选择界面后再关掉常规代理软件即可。请看目录：加速启动器Q：和其他加速器有冲突吗？会导致系统崩溃吗？A：无冲突，不会导致系统崩溃。但最好不要在游戏过程中同时使用，以免您的游戏数据包满世界跑。Q：我去使用酸酸乳了。A：你开心就好。Q：为什么不使用SSTAP/sockscap64方案。A：除了怕查水表以外，还因为：sockscap64一类的加速器工作原理和外挂一样，容易被误封。SSTAP需要人工维护规则。（GitHub上的FQrabbit/SSTap-Rule项目内eveonline规则就一直是我在维护，没准现在那些杂七杂八的加速器内的规则还是用我写的呢，虽然从早期要花一天时间制作规则到现在几小时就能搞定，但还是太麻烦了。加上CCP经常更换ip，常常是今天写好的规则在第二天就失效了。（╯‵□′）╯︵┴─┴），在尝试出这个新方案后，就一直使用这个新方案，已经放弃维护那个项目了。已写一键生成脚本，点击前往。Q：这个加速服务的原理是什么。A：简单的回答一下，这个加速服务和常见的加速器原理不一样，理论上不会受“国服王”的影响。具体的请看我这个文章：[post cid="13" cover="https://pic.wnark.com/images/2020/02/07/64670588-8x3.th.jpg"/]Q：可以转载吗？A：可以互相转告但禁止转载，毕竟我想靠这个文章往我博客引流呢。ヾ(≧∇≦*)ゝ问题排查如果您在使用本项目后，依然无法连接游戏服务器，请按以下步骤排查。关闭电脑及路由器的科学上网以及相关的服务，因为有的人开的是大陆白名单，而我的服务器在国外。进入CMD/终端，ping下tranquility.servers.eveonline.com和live.chat.eveonline.com这两个域名。查看其IP是否是你设置的IP，如果不是，请看你hosts是否设置正确。访问https://www.ipip.net/ip/，查看您的ip，将您的IP发评论，最好是加上上面ping的截图（可以传到公共图床），我看是不是把你的ip拉黑了。可能你连接那个国内中转服务器不稳定，换一个试试看。请仔细看完疑难解答项目进展[collapse status="false" title="项目进展"]时间|内容| 2020/02/04|项目启动| 2020/02/04|收到大白菜赞助第一台服务器| 2020/02/05|新增香港一台服务器| 2020/02/06|新增北京两台服务器| 2020/02/06|项目开始内测| 2020/02/07|项目开始公测| 2020/02/14|项目开始对外服务| 2020/03/03|因失去控制端计划重装| 2020/03/04|正式开始维护| 2020/03/05|维护结束，新增启动器加速| 2020/03/08|新增下载加速（测试）| 2020/03/14|下载加速因线路问题暂停更新| 2020/03/15|新增南方电信线路| 2020/03/17|新增游戏启动器及更新线路| 2020/03/17|下载加速服务器恢复自动更新| 2020/03/21|新增韩国服务器| 2020/03/26|服务器到期关闭新加坡服务器| 2020/03/26|加速启动器替换为韩国服务器| 2020/03/26|发布网络负载加重预警| 2020/04/05|发布配置sstap规则脚本| 2020/04/12|更换服务器出国线路| 2020/04/20|获取CCP Game授权| 2020/10/10|新增脚本加速| 2020/10/17|bat脚本新增下载更新加速| 2021/4/1|加速服务器与启动器已更换更好的服务器| 2021/12/1|所有服务无限期关闭| [/collapse]授权邮件已给CCP Game发邮件，获取到了CCP的允许使用的授权。[scode type="red"]这个邮件并非CCP Game为本项目作保，请用户保证自身的账户安全。本项目仅为我本人维护，仅在本博客发布。[/scode]备忘录esi服务器：esi.evetech.netccp的网页请求(其实km 总览 包括市场都属于http请求)是用launchdarkly做的聊天服务器另外的接口:live-public-gateway.evetech.net秋风使用的域名：client2.evejiaoben.com本文链接：https://www.wnark.com/archives/53.html禁止转载
之前黑五买了个畸形小鸡，四核1G内存10G硬盘。一开始我也不知道拿它干啥，毕竟硬盘太小了。突然，我想到可以用它反代网站。毕竟反代网站正常情况下吃的就是cpu,不缓存情况下，内存和硬盘消耗量并不大。在最开始，我就是想的利用反向代理来汉化eve university，但最终因为文本量巨大而放弃。但并不意味着使用反向代理来汉化一无是处。关于eve university汉化，你可以看看这篇文章：[post cid="8" cover="https://pic.wnark.com/images/2019/11/06/1571249903741-8x3.th.png"/]其实，汉化最好的方法就是能联系上作者，获取授权和原始文件。可惜的是，并不是所有的作者都能联系上。（幸好eve university加入了开源协议，不用联系作者就能直接提取原始文件）下面我就介绍两种使用反向代理来汉化的方式：利用cloudflare的网站APP功能虽然很多人觉得cloudflare的网站app很垃圾，但在我看来这个挺强大的，可以在反向代理后的网页上添加一些功能，比如谷歌翻译。比如，我反代了eve university后，可以直接使用cloudflare APP里的谷歌翻译在页面添加翻译选项，调用谷歌翻译来翻译整个页面。它的优点是简单快捷，弥补了反向代理网站很难往网站上添加功能的缺点。它的缺点就是太机械化，无法很好的翻译专业的单词，翻译结果只能作为参考而不能实际上拿来用。利用反向代理的文本替换功能原本我以为反向代理的文本替换只能替换文本内容，但是，实际上反向代理的文本替换是可以替换代码的。就像下面的反向代理的替换规则，我将网站的头部，网站部分内容和一个文件进行了替换其效果就是网站的头部，网站部分内容被我替换，网站的版权提示被我删除。[scode type="blue"]我之所以删掉它的版权提示是因为它的版权提示压根就不是授权给它的域名，站长搬迁它的网站后就没修改版权提示内的内容了。当然这个网站仅供测试，除非获得站长授权，否正我不会提供正式的服务[/scode]它的优点就是简单快捷，可以轻轻松松的汉化一个有限文本的网站。它的缺点就是所需工作量巨大，虽然写完规则后几乎就不用变更了，但当原始网站为eve university这样无比庞大的网站后，我都怀疑nginx是否能正常的替换掉所有内容。如果出现502错误，在配置文件加入。proxy_ssl_name $host; proxy_ssl_server_name on; 反向代理来进行汉化虽然简单，但都有各式各样的致命缺点，所有我最后还是选择获取eve university的所有文本，再进行提取和人工汉化，之后再导入汉化的内容。但是，在一些比较简单的网站上，利用反向代理汉化不需要源站作者的提供文本，翻译的更加迅速，因此可以作为汉化网站的强力补充手段。