文章目录

  • 安装screen
  • 拉取镜像并关闭反作弊
  • 运行docker
  • 导入配置文件
  • mod问题
  • 游戏内语音(BetterCrewLink)
  • GMHv2158汉化日志分析-Python

amongus私人服务器搭建
项目地址: https://github.com/Impostor/Impostor

Im的更新还是挺快的,621版本出了就马上更了。
为了搭建方便,于是用docker进行操作。如果直接运行docker的话,里面会有抽风的反作弊系统,私服的话建议关掉反作弊,因此整个流程如下(全程root

首先需要有一个国内的服务器

安装screen

为了保证关掉与服务器交互的窗口后仍然在运行,因此需要安装screen,直接运行

apt install screen

拉取镜像并关闭反作弊

pull镜像

docker pull aeonlucid/impostor

反作弊配置文件在app/config.json中,因此执行

find /var/lib/docker -name "config.json"


直接用vim修改config.json(每个人的那串id是不一样的)

vim /var/lib/docker/overlay2/7c6397c1e7d2fa13e0a65add69f7401576512b2a523b1a0ecaf9f61f4f970c2b/diff/app/config.json

将两处的true都改成false,如图

然后按下esc,:wq保存退出

运行docker

首先创建一个新的窗口,命名为au

screen -S au

接下来看一下刚刚pull的docker

docker images


然后开放指定端口,执行该命令

docker run -p 22023:22023/udp b96

导入配置文件

打开https://impostor.github.io/Impostor/
在server address里输入自己的服务器ip,在server name处输入你想命的名字

然后下载文件,将如果命名后有(1)等字样,请去掉,保证文件名为"regionInfo.json",不能错字 少字。
如果打不开上面的网站去下载文件,请将最后一行的xxx改成自己的IP与名字,完事后保存为regionInfo.json
{"CurrentRegionIdx":3,"Regions":[{"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"na.mm.among.us","DefaultIp":"50.116.1.42","Port":22023,"Name":"North America","TranslateName":289,"UseDtls":true},{"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"eu.mm.among.us","DefaultIp":"172.105.251.170","Port":22023,"Name":"Europe","TranslateName":290,"UseDtls":true},{"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"as.mm.among.us","DefaultIp":"139.162.111.196","Port":22023,"Name":"Asia","TranslateName":291,"UseDtls":true},{"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"xxx.xxx.xxx.xxx(IP)","DefaultIp":"xxx.xxx.xxx.xxx(IP)","Port":22023,"Name":"xxxxxxx(name)","TranslateName":1003,"UseDtls":false}]}

然后按下win+r,输入%APPDATA%\..\LocalLow\Innersloth\Among Us后按下enter
直接替换掉下面的regionInfo.json

接下来即可关掉与服务器交互的窗口,并打开游戏选择自己的服务器。
如果要回到之前的au窗口,只需要输入

screen -R au

mod问题

在玩mod的时候(如LMv),可能会在创建房间时出现下面这个问题

服务器没有响应握手。
解决方法是修改游戏目录下的BepInEx\config\gg.reactor.api.cfg文件,将Allow vanilla servers = false改成Allow vanilla servers = ture(允许普通服务器)

如果是玩多模,还是推荐GM(

顺便发现GMHv2.1.58里面,在BepInEx下有个日志(LogOutput.log)
测试了一下是实时更新的,草

游戏内语音(BetterCrewLink)

可在github官网进行下载https://github.com/OhMyGuus/BetterCrewLink/releases
但是官网的会强制更新,所以推荐到四个HP汉化组去下载2.9.7汉化去更新版本
https://amonguscn.club/近距离语音模组better-crewlink汉化/

下载安装到任意盘后直接打开

当游戏启动后则进入等待页面,此时大家都进入同一房间后将会自动连上语音软件。可在主界面对不同的玩家音量进行调整,在设置里面也能对总音量进行调整。

对于语音软件的设置,每次开房间的房主可进行设置,其他玩家的设置将会失效并跟随房主的设置。

默认使用的是一个国外服务器,如果要使用自己的服务器。可执行如下命令
创建窗口

screen -R au2

拉取docker镜像(其中第一个9736可修改为其他端口)

docker run -d -p 9736:9736 ohmyguus/bettercrewlink-server:latest

在软件中找到高级设置,修改语音服务器,修改为http://你的ip:你的端口
然后打开NAT修复即可
有时候会出现有些人能用 有些不能用的情况,暂时还没搞明白为什么。

GMHv2158汉化日志分析-Python

没事干写的,还有点问题,可以先测试用,没有优化过,脚本存在奇怪问题概率感觉比较大(因为手里中立获胜日志太少只能凭感觉写没法验证)
然后对于船员、狐妖、豺狼和内鬼的判定,都可以写成如同中立的判定改为循环
但是脚本里的阵营判定是一个个写的暂时不是很想改(能实现功能就是成功!)
想修改的可以自行修改
日志文件在Among Us GMHv2.1.58\BepInEx\LogOutput.log
(对于空数组没有做try-except,即如果有人没有赢过就会报错,这个问题 还没修)
2022/9/1修复起诉人重复胜利问题
2022/9/5修复律师代替胜利但不增加获胜次数问题
2022/9/19增加职业每把显示与获胜显示(在游戏开始时不能退出否则从那把开始后面数据混乱,这个问题暂时不想修)


(括号内为前职业)

# -*- codeing = utf-8 -*-
# @Time : 2022/9/19 11:38
# @Author : Mumuzi
# @File : win_pro.py
# @Software : PyCharm
import re
from collections import Counter
from tabulate import tabulate
Impostor = ['黑手党','化形者','隐蔽者','邪恶的黑客','吸血鬼','抹除者','骗术师','清理者','术士','赏金猎人','女巫','刺客','忍者','嗜血杀手','设陷者','双子爆破者','邪恶的追踪者','模仿者','复仇者','邪恶的赌怪','邪恶的换票师','背叛的']
Crewmate = ['船员','占卜师','市长','工程师','警长','执灯人','侦探','时间之主','医生','灵媒','黑客','追踪者','告密者','卧底','保安','诱饵','通灵师','正义的赌怪','正义的换票师']
Neutral_Win = ['黑死病','夜晚的黑暗是那么惹人怜爱','你们都是我的傀儡','小丑竟是我自己','用火焰净化一切','多谢款待','打赢官司']
Neutral_Name = ['疫医','化身博士','傀儡','小丑','纵火犯','秃鹫','律师','连环交换师','薛定谔的猫','豺狼','跟班','狐妖','背德者']def Collect_Winner():ind = []for i in range(len(f)):if('Game Result' in f[i]):ind.append(i)return inddef Collect_Role():ind = []for i in range(len(f)):if('Role Assign' in f[i]):ind.append(i)return inddef Check_Main_User():for i in range(len(f)):if('[Settings][*]' in f[i]):name = re.search(':(.*):', f[i][40:]).group(0)[1:-1].strip()return namedef Get_ind_AND_NS(Name,Win_Times,ind,HuaiBi):ind2 = indwhile True:if ('--------------------------------' not in f[ind2]):ind2 += 1else:breakfor i in range(ind + 1, ind2):try:name = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]except:passif (name not in Name):Name.append(name)Win_Times.append(0)HuaiBi.append([])return Name,Win_Times,ind2,HuaiBidef Check_Winner(Name,Win_Times,ind,Muser,HuaiBi,FTWIN):Follow = True #已经忘了为啥要写Follow=True,但是不想进行修改Lawyer,Lawyer_Muser = False,Falseinds = ind-1while True:if('[Result]' in f[inds]):role_win = f[inds]breakelse:inds -= 1if(('律师取代客户获得胜利' in f[ind-1]) or ('律师随客户一同胜利' in f[ind-1])):Lawyer,Lawyer_Muser = True,True #主机作为客户时无§标志# print(role_win)Name, Win_Times, ind2,HuaiBi = Get_ind_AND_NS(Name, Win_Times, ind,HuaiBi)FTWin = [False] * len(Name)for _ in range(ind+1,ind2):if('律师' in f[_]):rep_name = re.search('\[Result\](.*?)<{1}', f[_]).group(0)[8:-1]breakif('豺狼' in role_win):for i in range(ind + 1, ind2):if(('豺狼' in f[i]) or ('跟班' in f[i])):try:name = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]if ((Lawyer == True) and ('§' in f[i])):name = rep_nameLawyer,Lawyer_Muser = False,FalseWin_Times[Name.index(name)] += 1FTWin[Name.index(name)] = TrueHuaiBi[Name.index(name)].append('豺狼阵营胜利')except:passif(Lawyer == True):Win_Times[Name.index(rep_name)] += 1Win_Times[Name.index(Muser)] -= 1FTWin[Name.index(rep_name)] = TrueFTWin[Name.index(Muser)] = FalseHuaiBi[Name.index(rep_name)].append('豺狼阵营胜利')elif('jekyllAndHydeWinExtra' in role_win):for i in range(ind + 1, ind2):if('化身' in f[i]):try:Lawyer, Lawyer_Muser = False, Falsename = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]Win_Times[Name.index(name)] += 1FTWin[Name.index(name)] = TrueHuaiBi[Name.index(name)].append('其他中立阵营胜利')breakexcept:passelif('船员' in role_win):for i in range(ind + 1, ind2):for j in Crewmate:if(j in f[i]):if('背叛' not in f[i]):try:name = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]if ((Lawyer == True) and ('§' in f[i])):name = rep_nameLawyer, Lawyer_Muser = False, FalseWin_Times[Name.index(name)] += 1FTWin[Name.index(name)] = TrueHuaiBi[Name.index(name)].append('船员阵营胜利')breakexcept:passif(Lawyer == True):Win_Times[Name.index(rep_name)] += 1Win_Times[Name.index(Muser)] -= 1FTWin[Name.index(rep_name)] = TrueFTWin[Name.index(Muser)] = FalseHuaiBi[Name.index(rep_name)].append('船员阵营胜利')elif('恋人' in role_win):for i in range(ind + 1, ind2):if(('♥' in f[i]) or ('背叛' in f[i])):try:name = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]if ((Lawyer == True) and ('§' in f[i])):name = rep_nameLawyer, Lawyer_Muser = False, FalseWin_Times[Name.index(name)] += 1FTWin[Name.index(name)] = TrueHuaiBi[Name.index(name)].append('恋人阵营胜利')except:passif(Lawyer == True):Win_Times[Name.index(rep_name)] += 1Win_Times[Name.index(Muser)] -= 1FTWin[Name.index(rep_name)] = TrueFTWin[Name.index(Muser)] = FalseHuaiBi[Name.index(rep_name)].append('恋人阵营胜利')elif('内鬼' in role_win):for i in range(ind + 1,ind2):for j in Impostor:if(j in f[i]):try:name = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]if ((Lawyer == True) and ('§' in f[i])):name = rep_nameLawyer, Lawyer_Muser = False, FalseWin_Times[Name.index(name)] += 1FTWin[Name.index(name)] = TrueHuaiBi[Name.index(name)].append('内鬼阵营胜利')breakexcept:passif(Lawyer == True):Win_Times[Name.index(rep_name)] += 1Win_Times[Name.index(Muser)] -= 1FTWin[Name.index(rep_name)] = TrueFTWin[Name.index(Muser)] = FalseHuaiBi[Name.index(rep_name)].append('内鬼阵营胜利')elif('狐妖' in role_win):for i in range(ind + 1, ind2):if(('狐妖' in f[i]) or ('背德者' in f[i])):try:name = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]if ((Lawyer == True) and ('§' in f[i])):name = rep_nameLawyer,Lawyer_Muser = False,FalseWin_Times[Name.index(name)] += 1FTWin[Name.index(name)] = TrueHuaiBi[Name.index(name)].append('狐妖阵营胜利')except:passif(Lawyer == True):Win_Times[Name.index(rep_name)] += 1Win_Times[Name.index(Muser)] -= 1FTWin[Name.index(rep_name)] = TrueFTWin[Name.index(Muser)] = FalseHuaiBi[Name.index(rep_name)].append('狐妖阵营胜利')else:for Ne in Neutral_Win:if(Ne in role_win):for i in range(ind + 1, ind2):if (Neutral_Name[Neutral_Win.index(Ne)] in f[i]):try:name = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]if ((Lawyer == True) and ('§' in f[i])):name = rep_nameLawyer, Lawyer_Muser = False, FalseWin_Times[Name.index(name)] += 1FTWin[Name.index(name)] = TrueHuaiBi[Name.index(name)].append('其他中立阵营胜利')breakexcept:passif (Lawyer == True):Win_Times[Name.index(rep_name)] += 1Win_Times[Name.index(Muser)] -= 1FTWin[Name.index(rep_name)] = TrueFTWin[Name.index(Muser)] = FalseHuaiBi[Name.index(rep_name)].append('其他中立阵营胜利')breakif(Follow == True): #忘了写这个判断是图啥的来着for i in range(ind+1,ind2):LIFE = re.search('<pos=25%>(.*)<pos=34%>',f[i]).group(0)[9:-9]if((('投机者' in f[i]) or ('起诉人' in f[i])) and (LIFE == '存活')):name = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]Win_Times[Name.index(name)] += 1FTWin[Name.index(name)] = Trueif('狐妖' in role_win):HuaiBi[Name.index(name)].append('狐妖阵营胜利')elif('内鬼' in role_win):HuaiBi[Name.index(name)].append('内鬼阵营胜利')elif('豺狼' in role_win):HuaiBi[Name.index(name)].append('豺狼阵营胜利')elif('船员' in role_win):HuaiBi[Name.index(name)].append('船员阵营胜利')elif ('恋人' in role_win):HuaiBi[Name.index(name)].append('恋人阵营胜利')else:HuaiBi[Name.index(name)].append('其他中立阵营胜利')breakRole = ['']*len(Name)for i in range(ind+1,ind2):Temp = ''for _ in Impostor:if(_ in f[i]):Temp = _breakfor _ in Crewmate:if(_ in f[i]):if('背叛' in f[i]):Temp = f'背叛的{_}'breakelse:Temp = _for _ in Neutral_Name:if(_ in f[i]):Temp = _breakif('投机者' in f[i]):Temp = '投机者'if('起诉人' in f[i]):Temp = '起诉人'if('♥' in f[i]):Temp += ' + 恋人'name = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]Role[Name.index(name)] = TempFTWIN.append(FTWin)# print(Name, Win_Times, len(HuaiBi[3]), FTWIN)return Name,Win_Times,HuaiBi,FTWIN,Roledef Get_Every_Occ(Name,ind,occ,Winner,Last_Role):Temp = ['-']*len(Name)for i in range(ind,len(f)):if('------Platforms-------' in f[i]):ind2 = ibreakfor i in range(ind+1,ind2):try:name = re.search('\[Settings\][ \[\]0-9](.*)[ ]:',f[i]).group(0)[16:-1].strip()Duty = re.search(':(.*)',f[i][f[i].index(name):]).group(0)[1:]ind_role = Name.index(name)if(Duty == Last_Role[ind_role]):if(Winner[ind_role] == True):Temp[ind_role] = f'\033[32m{Duty}\033[0m'else:Temp[ind_role] = Dutyelse:if(Winner[ind_role] == True):Temp[ind_role] = f'\033[32m{Last_Role[ind_role]}({Duty})\033[0m'else:Temp[ind_role] = f'{Last_Role[ind_role]}({Duty})'except:passocc.append(Temp)return occdef Count_Max_Teamer(User,HuaiBi):Max = []for i in range(len(HuaiBi)):print(User[i],HuaiBi[i])try:Max.append(Counter(HuaiBi[i]).most_common()[0][0])except:Max.append([])return Maxdef GG_First(User,ind):GG = []ind.insert(0,0)for _ in range(len(User)):GG.append(0)for i in range(len(ind)-1):for j in range(ind[i],ind[i+1]):if('MurderPlayer' in f[j]):NAME = re.search('=> (.*)\(',f[j]).group(0)[3:-1]if(NAME not in User):passelse:GG[User.index(NAME)] += 1break# print(Counter(dict(zip(User,GG))).most_common())GG_MAX,GG_Min = Counter(dict(zip(User,GG))).most_common()[0],Counter(dict(zip(User,GG))).most_common()[-1]return GG_MAX,GG_Mindef Vote_First(User,ind):Vote = []ind.insert(0,0)for _ in range(len(User)):Vote.append(0)for i in range(len(ind)-1):for j in range(ind[i],ind[i+1]):try:if('[Vote]' in f[j]):NAME = re.search('Exiled: (.*)\((.*)\(',f[j]).group(2)if(NAME not in User):passelse:Vote[User.index(NAME)] += 1breakexcept:pass# print(Counter(dict(zip(User, Vote))).most_common())Vote_MAX, Vote_Min = Counter(dict(zip(User, Vote))).most_common()[0], Counter(dict(zip(User, Vote))).most_common()[-1]return Vote_MAX,Vote_Mindef Get_StartTime_EndTime():for i in range(len(f)):if('[Info   :The Other Roles GM]' in f[i]):Start = re.search('GM\] \[(.*)\]\[',f[i]).group(0)[5:-2]breakfor i in range(len(f)-1,-1,-1):if('[Info   :The Other Roles GM]' in f[i]):End = re.search('GM\] \[(.*)\]\[',f[i]).group(0)[5:-2]breakreturn Start,Enddef SHOW(Name,Occ):Occ.insert(0,Name)print(tabulate(Occ, headers='firstrow', tablefmt='grid'))if __name__ == "__main__":f = open('LogOutput.log','r',encoding='utf-8').read().splitlines() #日志位置Start_Time,End_Time = Get_StartTime_EndTime()Winner_index,Roles = Collect_Winner(),Collect_Role() #len(Winner_index) = turnsUser_Name,Winner_Times,HuaiBi,Occ,Role_Win,FTWin = [],[],[],[],[],[]Main_User = Check_Main_User()for i in range(len(Winner_index)):User_Name, Winner_Times,HuaiBi,FTWin,ACC_Role = Check_Winner(User_Name,Winner_Times,Winner_index[i],Main_User,HuaiBi,FTWin)Occ = Get_Every_Occ(User_Name, Roles[i],Occ,FTWin[i],ACC_Role) #Roles->开始的职业,ACC_Role->结束的职业Score = dict(zip(User_Name,HuaiBi))Score = dict(sorted(Score.items(),key=lambda x:len(x[1]))[::-1])Max_HuaiBi = Count_Max_Teamer(User_Name,HuaiBi)SHOW(User_Name,Occ)print(f'[统计信息]本地资源分析:从{Start_Time}到{End_Time}期间共开始了{len(Winner_index)}场游戏\n获胜ID从高到低依次为:')for i,j in Score.items():if(len(j)!=0):print(f'{i} 共获胜{len(j)}场'.ljust(15),f'其中作为{Max_HuaiBi[User_Name.index(i)]}次数最多'.ljust(20))else:print(f'{i} 共获胜{len(j)}场 乐'.ljust(15))Max_GG,Min_GG = GG_First(User_Name,Winner_index)Max_Vote,Min_Vote = Vote_First(User_Name,Winner_index)print(f'其中被首刀最多的是 {Max_GG[0]},共被首刀了{Max_GG[1]}次')print(f'被首刀最少的是 {Min_GG[0]},仅被首刀了{Min_GG[1]}次')print(f'其中被首投最多的是 {Max_Vote[0]},共被投了{Max_Vote[1]}次')print(f'被首投最少的是 {Min_Vote[0]},仅被投了{Min_Vote[1]}次')

among us私服搭建相关推荐

  1. Maven 私服搭建指南

    序言 Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发.打包.测试.部署等一系列行为. 而包管理又是其核心功能,除非是个人项目,我们获取包都是从中 ...

  2. Maven基础与私服搭建

    Blog诞生记 Android studio构建项目有时候build.gradld构建缓慢,严重影响了开发心情,这仅是次要因素,最重要的是leader为了考虑团队发展,建议搭建Maven私服,把项目模 ...

  3. GitLab私服搭建及使用实践

    GitLab私服搭建及使用实践 一 . 环境 CentOS 7 内存配置4G (官方要求2G , 但是2G 经常会出现502问题 ) 二. gitlab 私服搭建 安装依赖的openssh-serve ...

  4. Maven 私服搭建

    由于公司研发环境物理隔绝,所以自己搭建了一个 maven 私服,以下是自己搭建私服过程中的一个记录. 1.准备Maven私服相关文件 1.1 从 sonatype 官网 下载 nexus 安装包 1. ...

  5. 真正的maven私服搭建器--Artifactory

    一个团队要真正用好Maven,repository私服是免不了的,否则team mate们多好奇的目光,都会全部消耗在漫长的jar下载中. 以前介绍过一个搭建私服的简朴但很笨的办法--将雷锋同志下载好 ...

  6. centos 6.8安装git_git 入门教程之 git 私服搭建教程

    git 私服搭建教程 前几节我们的远程仓库使用的是 github 网站,托管项目大多是公开的,如果不想让任何人都能看到就需要收费,而且 github 网站毕竟在国外,访问速度太慢,基于上述两点原因,我 ...

  7. maven 学习笔记--仓库,聚合和继承,私服搭建

    仓库 http://blog.csdn.net/wanghantong/article/details/36427433 聚合和继承 http://www.cnblogs.com/xdp-gacl/p ...

  8. git 入门教程之 git 私服搭建教程

    git 私服搭建教程 前几节我们的远程仓库使用的是 github 网站,托管项目大多是公开的,如果不想让任何人都能看到就需要收费,而且 github 网站毕竟在国外,访问速度太慢,基于上述两点原因,我 ...

  9. 原神私服搭建一: 搭建运行环境(jdk,mongodb)

    原神私服搭建一: 搭建运行环境(jdk,mongodb) 一:jdk: 链接:https://www.oracle.com/java/technologies/javase/jdk17-archive ...

  10. 开源魔兽世界私服搭建

    本文档是原创的,具有可操作性,不是网络上互相抄袭的博客. 觉得有用就赞一个,项目源码: https://github.com/geektcp/Namjagbarwa-wow 同名原创文章(界面样式更简 ...

最新文章

  1. PyTorch Lightning 全攻略!
  2. 16位代码段与32位代码段的区别
  3. 掌握 Angular2 的服务 (service)
  4. 虚拟机没有域服务器,虚拟化现存域控制器
  5. 程序员面试金典 - 面试题 03.05. 栈排序(两栈)
  6. 安装配置gitlab
  7. struts mysql乱码_Struts+Hibernate+MyEclipse+Tomcat+MySQL的乱码之解决
  8. saltstack 远程执行之返回写入到mysql
  9. 超级实用的内存泄漏归纳分析心得
  10. 基于双向长短期记忆神经网络【biLSTM】模型的污染数据预测实战
  11. 旅游景点网站景区景点购票系统毕业设计毕业论文参考(3)后台管理功能
  12. 数据结构与算法(python版)
  13. 安装了汉化包,svn却没有汉化
  14. html源码taptap,taptap开源应用电脑版
  15. Fiddler环境配置/代理设置:电脑端/移动端/模拟器
  16. 【数据库查询--计算机、电脑系列】--查询价格最高的打印机型号。
  17. 微信小程序---霍兰德职业兴趣测试、心里测评、性格测评
  18. SonarQube最全使用教程
  19. SOUI视频教程 官方论坛
  20. HDU-#5037 Frog(贪心)

热门文章

  1. Hexo全局添加APlayer音乐播放器
  2. Android-App的设计架构经验谈,系列篇
  3. M3U8文件简介及在线播放器
  4. matlab正弦余弦与圆的关系
  5. 11.LVS调度器详解
  6. ros机器人gazebo仿真
  7. 手机突然显示无服务器,手机一直无服务是什么原因
  8. C语言99乘法口诀函数,99乘法口诀妙用C语言输出
  9. 独家秘技||如何快速入门一个陌生知识领域?
  10. CTA入网认证业务办理