原理 基本原理:
【客户端】- 通过其他的代理相关软件,在本地抓包拦截原神客户端发向官方服务器的网络请求,并转而发送向自建的服务器(可以搭建在本地机器)
【服务端】- 接收客户端发来的请求并模拟原版返回值,由于可以自定义数据,故而实现了自由度极高的私服功能。类似的东西还有很多,Grasscutter只是其中的一个。
Linux服务器 服务器版本:CentOS7
更换源 1 2 3 4 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all
Copy
关闭防火墙和selinux 如果购买的是服务器,需要到服务商防火墙配置界面(如腾讯云),设置防火墙策略!!! 逐步开放8080端口、22102端口、444端口、9001端口
关闭防火墙 1 systemctl stop firewalld.service
Copy
设置防火墙开机不自启
1 systemctl disable firewalld.service
Copy
查看防火墙状态
1 firewall-cmd --state
Copy
关闭selinux 1 vi /etc/selinux/config
Copy
把SELINUX=enable 改成SELINUX=disabled
重启服务器
开机查看selinux状态(disable为关闭)
Docker安装 安装依赖包 1 yum install -y yum-utils device-mapper-persistent-data lvm2
Copy
image-20220724161420953
添加Docker镜像源 1 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Copy
image-20220724161538235
安装Docker 1 yum install docker-ce docker-ce-cli containerd.io
Copy
image-20220724162200607
启动Docker 1 systemctl start docker
Copy
部署原神服务端 拉取grasscutter镜像 1 2 3 4 docker pull evendevil66/grasscutter docker images
Copy
可以使用docker images 查看是否拉取成功
image-20220724163025083
部署服务端到docker 下载元神服务端,上传并解压到 /root
,使用 ls /root
可以看到目录下已经多了 full-grasscutter-"version"
文件夹
1 2 3 4 5 yum install unzipcd /root unzip full-grasscutter-3.0-Beta.9.rar
Copy
image-20220724170419249
image-20220724171644271
更改config.json 打开服务端目录下的 congfig.json
编辑里面的 accessAddress
默认是127.0.0.1 更改为服务器的IP地址(共2处要更改)
注意那个443一定要改成444端口!!!
image-20220724170938615
以docker运行上传的原神服务端 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 docker run -dit \ -v /root/full-grasscutter-3.0-Beta.9:/var/grasscutter \ -p 444:444 \ -p 444:444/udp \ -p 22102:22102 \ -p 22102:22102/udp \ -p 8080:8080 \ -p 8080:8080/udp \ -p 9001:9001 \ -p 9001:9001/udp \ --name grasscutter \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --restart always \ --privileged=true evendevil66/grasscutter /usr/sbin/init docker container ls -all docker container rm mycentos
Copy
/root/full-grasscutter-3.0-Beta.9是元神服务端解压后的文件夹,:后面/var/grasscutter是容器目录。
image-20220724171352563
docker容器操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 docker ps docker container ls -all docker start <CONTAINER ID> docker exec -it CONTAINERID /bin/bash docker stop $(docker ps -a -q) docker stop <CONTAINER ID> docker rm $(docker ps -a -q) docker rm <CONTAINER ID>
Copy
测试服务端 在服务器内使用浏览器 输入 "服务器IP地址"+端口号9001
即可查看运行状态
image-20220724171526062
安装plugin image-20220731175041822
将插件拖拽到物理机的/root/full-grasscutter-3.0-Beta.9/plugins下面
1 2 3 4 5 6 7 docker cp /root/full-grasscutter-3.0-Beta.9/plugins grasscutter:/var/grasscutter/plugins docker exec -it grasscutter /bin/bash cd /var/grasscutter docker stop grasscutter docker start grasscutter
Copy
修改服务器地址,https://10.10.10.66:444,点击查询,右侧服务器状态->远程执行插件显示对号说明成功。
image-20220731175801766
进入割草机环境 1 2 3 4 docker exec -it grasscutter /bin/bash supervisorctlfg grasscutter
Copy
image-20220724172135934
完成以上操作就可以开始创建账号了
创建账号 ,默认不可以自动注册,需要使用 account
指令在控制台创建账号才可以登录;
1 2 3 创建方法如下: 语法:`account create 登录账号 UID` 例如:`account create autumn 123456`
Copy
也可以更改配置允许不存在的账号自动注册(不建议开启)。
自定义配置 config.json
卡池配置文件为 .\data\Banners.json
,其中
gachaType=200,scheduleId=893
的为常驻池
gachaType=301,scheduleId=903
的为角色 UP 池 (多 UP: 增加 gachaType
为 302,303,304… 的成员即可)
gachaType=400,scheduleId=913
的为武器 UP 池
多卡池:增加 gachaType
为非以上四个值的成员即可,注意客户端只识别以上四个 gachaType
值,添加的其他卡池不会显示类型
本站整合包默认为万达桃三 UP 及前两者专武 (专武封面为前者,是客户端内置资源,无法修改)
rateUpItems1
为 UP 五星,rateUpItems2
为 UP 四星,对应 id 在 Handbook_CHS.txt
中可以找到
需修改 prefabPath
previewPrefabPath
titlePath
中的 A0**
为对应的卡池 id(在 卡池顺序.xlsx
中)
costItem
为抽卡耗费的货币名称,223
为纠缠之缘,224
为相遇之缘(修改可能会引发 bug)
sortId
为卡池排序,越大越靠前
beginTime
endTime
为卡池开始 / 结束的 10 位时间戳
softPity
最少几次出 hardPity
最多几次出 eventChance
歪的概率 % ,如果没有这三个成员自己加上即可
bannerType
为 STANDARD
表示常驻池,EVENT
表示角色 UP 池,WEAPON
表示武器 UP 池 (这个参数貌似只是看的)
客户端 444不通 因为客户端不能直接改配置文件,所以只能改代理,把请求原神服务器的ip:端口重定向到私服的IP:端口。私服的端口为444。
telnet IP 444发现不通,服务器中telent IP 444不通,但是telnet 127.0.0.1 444居然是通的。
image-20220724224914838
查看端口号情况
服务器的几个端口都处于监听状态
image-20220724224956024
查看转发列表 1 2 iptables -t nat -nL
Copy
image-20220724225144664
查看内核转发状态 确保ipv4处于开启状态
1 2 3 4 5 sysctl net.ipv4.ip_forwardecho 1 > /proc/sys/net/ipv4/ip_forward sysctl -p
Copy
进入docker容器 1 2 3 4 docker exec -it CONTAINERID /bin/bashexit
Copy
查看端口号情况 1 2 3 4 netstat -nplt netstat -nplu
Copy
docker处于监听状态的端口,tcp有9001和8080,udp有22102,唯独没有444端口。
image-20220724232444934
image-20220724232924142
发现是前面解压后config.json文件没把443改为444,直接进入容器中vi /var/grasscutter/config.json更改后重启即可。
客户端代理方式 flidder拦截重定向 打开Fiddler,菜单栏 Tool -> options -> https
image-20220724234426687
切换到 connections,把端口改成8181,按 OK 保存设置
image-20220724234515849
系统代理中出现8181代理端口即为成功。
image-20220724234959610
主界面选 Fiddler Script ,清空原来的脚本,粘贴如下内容。脚本中的 oS.host 后面改为服务器的IP地址,最后点左上角SaveScript
image-20220724234715944
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import System;import System.Windows.Forms;import Fiddler;import System.Text.RegularExpressions; class Handlers { static function OnBeforeRequest (oS: Session) { if (oS.host.EndsWith(".yuanshen.com" ) || oS.host.EndsWith(".hoyoverse.com" ) || oS.host.EndsWith(".mihoyo.com" )) { oS.host = "10.10.10.66:444" ; } if (oS.uriContains("http://uspider.yuanshen.com:8888/log" )){ oS.oRequest.FailSession(200 , "Blocked" , "haha" ); } } };
Copy
直接用Genshin代理助手 image-20220724235633021
客户端成功进入界面 如果使用的是 国服客户端,启动后有弹窗 (仅 Win) 且登录页面标题为 HOYOVERSE
而不是 miHoYo
即代表成功连接私服;
image-20220724233609106
image-20220725001738819
使用命令获得90级刻晴
image-20220725002034722