君匡

V1

2022/07/24阅读:14主题:自定义主题1

Docker系列六EPIC领游戏

前言

自动嫖E宝儿的游戏!刚上车没几天,E宝看不下去了,直接把车给掀了。

后来又有后继者重新上传分享了镜像数据,但是在尝试之后,用QQ邮箱总是无法通过校验,暂且搁置。

安装新镜像

又一次更新的时候,发现了新的镜像库,心情好到飞起~

# 拉取镜像
docker pull charlocharlie/epicgames-freegames 

登陆网站查看内容:https://hub.docker.com/r/charlocharlie/epicgames-freegames

看完阅读说明,运行命令,但是之后发现没有生成核验内容。

docker run \
 -d \
    -e TZ=Asia/Shanghai \
 -e EMAIL=epic邮箱 \
 -e PASSWORD=epic密码 \
 -e RUN_ON_STARTUP=true \
 -e BASE_URL=https://www.epicgames.com \
 -e EMAIL_SENDER_ADDRESS=1533859388@qq.com \
 -e EMAIL_SENDER_NAME="Epic Games Captchas" \
 -e EMAIL_RECIPIENT_ADDRESS=qq号@qq.com \
 -e SMTP_SECURE=true \
 -e SMTP_USERNAME=qq号@qq.com \
 -e SMTP_PASSWORD=qq邮箱密码 \
 -v /home/keen/docker/epic/:/usr/app/config:rw \
 -p 3000:3000 \
 --restart=always \
 -m 2g \
 charlocharlie/epicgames-freegames:latest
  • -d:后台运行
  • -e TZ=Asia/Shanghai:设置时区为上海
  • -e EMAIL: 账号
  • -e PASSWORD: 密码
  • -e TOTP: 开启双重认证后填入双重认证密钥,我没有就删掉了
  • -e RUN_ON_STARTUP: 开启即运行,脚本参数
  • -e BASE_URL: 指定Epic的官网
  • -e EMAIL_SENDER_ADDRESS:发送邮件的地址
  • -e EMAIL_SENDER_NAME: 邮件的主题
  • -e EMAIL_RECIPIENT_ADDRESS: 邮件的接受地址
  • -e SMTP_USERNAME: 邮箱的登陆账号
  • -e SMTP_PASSWORD: 邮箱的登陆密码
  • -v 路径映射
  • -p 3000:3000 :映射宿主机的3000端口到容器服务的3000端口
  • --restart=always:Docker 重启的时候容器也会重启
  • -m: 设置最大使用内存为2G
  • 使用镜像charlocharlie/epicgames-freegames的最新版本

的确是所见即所得,重新登陆到账号上面去看,没有自动领取游戏。

参考官网简介,重新修改配置文件,还花了两毛钱,打开了qq邮箱的SMTP服务,将"testNotifiers"设置为true,尝试测试能否校验通过。

{
    "cronSchedule""0 12 * * *",
    "searchStrategy""all",
    "runOnStartup"true,
    "runOnce"false,
    "timezone""Asia/Shanghai",
    "intervalTime"60,
    "logLevel""info",
    "notificationTimeoutHours"24,
 "testNotifiers":true,
    "skipVersionCheck"false,
    "noHumanErrorHelp"false,
    "browserLaunchTimeout"15,
    "browserLaunchRetryAttempts"5,
    "browserNavigationTimeout"30000,
    "accounts": [
      {
        "email""Epic的邮箱",
        "password""Epic的密码"
      }
    ],
    "webPortalConfig": {
      "localtunnel"false,
      "baseUrl""https://www.epicgames.com"
    },
    "notifiers": [
      {
        "type""email",
        "smtpHost""mail.qq.com",
        "smtpPort"587,
        "emailSenderAddress""qq邮箱",
        "emailSenderName""Epic Games Captchas",
        "emailRecipientAddress""qq邮箱",
        "secure"false,
        "auth": {
            "user""qq邮箱",
            "pass""SMTP密钥"
        }
      }
    ]
  }

学艺不精,使用Node发送邮件一直失败,所以校验总是不通过,暂且放下之后慢慢尝试吧。

安装旧镜像

不用再看这个镜像了,因为这个镜像的作者已经删库跑路了,大家直接忽略就可以了。

安装epicgames-claimer

首先搜索并且拉取镜像。

docker search epicgames

docker pull luminoleon/epicgames-claimer

哦吼~先建个临时容器看看是怎么样子的。

# 运行容器
docker run \
    --name='epicFreeGame' \
    luminoleon/epicgames-claimer

# 进入容器
docker exec -it epicFreeGame /bin/bash

哈哈,原来是python脚本啊,退出容器后,将这个python文件复制出来,然后删除临时容器。

#退出容器
exit
 
# 复制文件
mkdir -p /home/keen/docker/epic/
docker cp epicFreeGame:/epicgames_claimer.py /home/keen/docker/epic/epicgames_claimer.py
docker cp epicFreeGame:/main.py /home/keen/docker/epic/main.py
docker cp epicFreeGame:/requirements.txt /home/keen/docker/epic/requirements.txt

# 停止并销毁临时容器
docker stop epicFreeGame && docker rm epicFreeGame

仔细查看代码后,没有什么明显的后门,那就姑且一用。

docker run \
    -d \
    --restart=always \
    -e PYTHONUNBUFFERED=0 \
 -v /etc/localtime:/etc/localtime:ro \
    -e TZ=Asia/Shanghai \
    -e RUN_AT=09:27 \
    --name epicFreeGame \
    -v /home/keen/docker/epic/User_Data:/User_Data \
    -v /home/keen/docker/epic/main.py:/main.py \
    -v /home/keen/docker/epic/epicgames_claimer.py:/epicgames_claimer.py \
    -v /home/keen/docker/epic/requirements.txt:/requirements.txt \
    luminoleon/epicgames-claimer \
    -u qq邮箱 \
    -p 密码

运行之后,还会新增一个截图,可以拿出来看看。

docker cp epicFreeGame:/screenshot.png /home/keen/docker/epic/screenshot.png

是没有领取成功的意思么?不知道诶……,成功领取到了!

日志持久化和修改容器映射

没有办法看到日志的嘛?全局搜索后也没找到,仔细查看了epicgames_claimer.py文件之后,发现了就是使用print函数打印到命令行了,头大,干脆就小小的修改一下好了。

先进去容器,新建一个日志文件

docker exec -it epicFreeGame /bin/bash

touch /tmp/keen.log

接着修改脚本内容:

f = open("./tmp/keen.log"'w+')

def log(text: str, level: str = "info") -> None:
    localtime = time.asctime(time.localtime(time.time()))
    if level == "info":
        print("[{}] {}".format(localtime, text), file=f)
    elif level == "warning":
        print("\033[33m[{}] Warning: {}\033[0m".format(localtime, text), file=f)
    elif level == "error":
        print("\033[31m[{}] Error: {}\033[0m".format(localtime, text), file=f)

不要忘记将该容器内新增一个文件映射,修改对应容器的

# 默认容器的配置文件/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json

/var/lib/docker/containers/2f532f52c833/hostconfig.json

修改其中的

"Binds": ["/home/keen/docker/epic/User_Data:/User_Data""/home/keen/docker/epic/main.py:/main.py""/home/keen/docker/epic/keen.log:/tmp/keen.log""/home/keen/docker/epic/epicgames_claimer.py:/epicgames_claimer.py""/home/keen/docker/epic/requirements.txt:/requirements.txt"],

到这里算是完成了,接着关掉并且重启该容器即可。

docker stop epicFreeGame && docker start epicFreeGame

感谢

感谢现在的好奇,为了能成为更好的自己。

谨以此文献给以前贫穷的自己,还有现在的穷鬼。/捂脸痛哭

分类:

后端

标签:

后端

作者介绍

君匡
V1