| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # -*- coding: utf-8 -*-
- """list_roles.py — 拉取账号在指定区的实时角色列表(不进游戏)。
- 用法: .venv/bin/python list_roles.py --zone 14492170 [-u longwu988 -p Longwu1988]
- """
- import argparse
- import sys
- import requests as rq
- import urllib3
- urllib3.disable_warnings()
- HERE = __file__.rsplit("/", 1)[0]
- sys.path.insert(0, HERE)
- import login_996pc as L # noqa: E402
- import cq2_pure_enter as P # noqa: E402
- def main():
- ap = argparse.ArgumentParser()
- ap.add_argument("-u", "--user", default="longwu988")
- ap.add_argument("-p", "--password", default="Longwu1988")
- ap.add_argument("--zone", type=int, required=True)
- args = ap.parse_args()
- s = rq.Session()
- j, _ = L.do_login(s, args.user, args.password)
- assert j.get("code") == 200, j.get("msg")
- jwt = j["data"]["token"]
- uid = str(j["data"]["userInfo"]["id"])
- print(f"uid={uid}")
- P.enter_game(s, jwt, args.zone)
- for pt in (8041, 8021, 8061, 8001):
- try:
- import socket
- g = socket.create_connection(
- (P.GW_HOST.format(zone=args.zone), pt), timeout=10)
- g.close()
- except OSError:
- continue
- try:
- # login_gate 会打印角色列表行; 传一个不存在的名字避免创角副作用
- P.login_gate(args.zone, jwt, "__probe__", pt, uid)
- except SystemExit:
- continue
- except Exception:
- continue
- return
- print("[!] 所有端口失败")
- if __name__ == "__main__":
- main()
|