list_roles.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # -*- coding: utf-8 -*-
  2. """list_roles.py — 拉取账号在指定区的实时角色列表(不进游戏)。
  3. 用法: .venv/bin/python list_roles.py --zone 14492170 [-u longwu988 -p Longwu1988]
  4. """
  5. import argparse
  6. import sys
  7. import requests as rq
  8. import urllib3
  9. urllib3.disable_warnings()
  10. HERE = __file__.rsplit("/", 1)[0]
  11. sys.path.insert(0, HERE)
  12. import login_996pc as L # noqa: E402
  13. import cq2_pure_enter as P # noqa: E402
  14. def main():
  15. ap = argparse.ArgumentParser()
  16. ap.add_argument("-u", "--user", default="longwu988")
  17. ap.add_argument("-p", "--password", default="Longwu1988")
  18. ap.add_argument("--zone", type=int, required=True)
  19. args = ap.parse_args()
  20. s = rq.Session()
  21. j, _ = L.do_login(s, args.user, args.password)
  22. assert j.get("code") == 200, j.get("msg")
  23. jwt = j["data"]["token"]
  24. uid = str(j["data"]["userInfo"]["id"])
  25. print(f"uid={uid}")
  26. P.enter_game(s, jwt, args.zone)
  27. for pt in (8041, 8021, 8061, 8001):
  28. try:
  29. import socket
  30. g = socket.create_connection(
  31. (P.GW_HOST.format(zone=args.zone), pt), timeout=10)
  32. g.close()
  33. except OSError:
  34. continue
  35. try:
  36. # login_gate 会打印角色列表行; 传一个不存在的名字避免创角副作用
  37. P.login_gate(args.zone, jwt, "__probe__", pt, uid)
  38. except SystemExit:
  39. continue
  40. except Exception:
  41. continue
  42. return
  43. print("[!] 所有端口失败")
  44. if __name__ == "__main__":
  45. main()