main.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. """Entry point to call various API actions."""
  2. import sys
  3. from auth_session import login, set_sess_key
  4. from log_util import get_logger
  5. from acl_actions import get_acl_rules, add_acl_rule, edit_acl_rule, del_acl_rule
  6. import json
  7. from advanced_acl import get_all_test_ips, add_ip, del_ip
  8. from analysis_connections import monitor_lanip
  9. import gui
  10. from protector import ProtectorRunner
  11. def main():
  12. logger = get_logger("main")
  13. logger.info("开始 main()")
  14. # If --debug passed, allocate a console so logs and prints show up.
  15. # Default behavior: start GUI. If user passes --nogui, run headless flow.
  16. if "--debug" in sys.argv:
  17. # allocate a fresh console on Windows
  18. try:
  19. import ctypes
  20. ctypes.windll.kernel32.AllocConsole()
  21. # reopen std streams to the new console
  22. import sys as _sys
  23. _sys.stdout = open("CONOUT$", "w", encoding="utf-8", buffering=1)
  24. _sys.stderr = open("CONOUT$", "w", encoding="utf-8", buffering=1)
  25. except Exception:
  26. # best-effort: continue if console allocation fails
  27. pass
  28. # Default: launch GUI unless explicitly requested not to
  29. if "--nogui" not in sys.argv:
  30. pr = ProtectorRunner()
  31. gui.run_gui(protector_runner=pr)
  32. pr.stop()
  33. return
  34. try:
  35. resp, sess_cookie = login()
  36. except FileNotFoundError as e:
  37. logger.error(f"配置错误: {e}")
  38. return
  39. except Exception as e:
  40. logger.exception(f"请求或其他错误: {e}")
  41. return
  42. logger.info(f"已调用: login() | 参数: 默认 payload | 状态: {resp.status_code}")
  43. if sess_cookie:
  44. logger.info(f"返回的 sess_key: {sess_cookie}")
  45. # 保存为全局会话状态,供其他接口调用时使用
  46. set_sess_key(sess_cookie)
  47. print(f"sess_key: {sess_cookie}")
  48. # # 集成测试:演示高级接口的使用流程
  49. # test_ip = "1.5.6.7"
  50. # # 1) 列出当前集合
  51. # try:
  52. # ips = get_all_test_ips()
  53. # logger.info(f"当前 Test_* IP 数量: {len(ips)}")
  54. # print(f"当前 Test_* IP 数量: {len(ips)}")
  55. # except Exception as e:
  56. # logger.exception(f"获取 Test IP 列表失败: {e}")
  57. # print(f"获取 Test IP 列表失败: {e}")
  58. # # 2) 添加测试 IP
  59. # try:
  60. # res = add_ip(test_ip)
  61. # logger.info(f"add_ip({test_ip}) -> {res}")
  62. # print(f"add_ip -> {res}")
  63. # except Exception as e:
  64. # logger.exception(f"添加测试 IP 失败: {e}")
  65. # print(f"添加测试 IP 失败: {e}")
  66. # # 3) 再次列出以验证添加
  67. # try:
  68. # ips_after = get_all_test_ips()
  69. # logger.info(f"添加后 Test_* IP 数量: {len(ips_after)}")
  70. # print(f"添加后 Test_* IP 数量: {len(ips_after)}")
  71. # except Exception as e:
  72. # logger.exception(f"获取添加后列表失败: {e}")
  73. # print(f"获取添加后列表失败: {e}")
  74. # # 4) 删除测试 IP
  75. # try:
  76. # res_del = del_ip(test_ip)
  77. # logger.info(f"del_ip({test_ip}) -> {res_del}")
  78. # print(f"del_ip -> {res_del}")
  79. # except Exception as e:
  80. # logger.exception(f"删除测试 IP 失败: {e}")
  81. # print(f"删除测试 IP 失败: {e}")
  82. # # 5) 最终验证
  83. # try:
  84. # ips_final = get_all_test_ips()
  85. # logger.info(f"最终 Test_* IP 数量: {len(ips_final)}")
  86. # print(f"最终 Test_* IP 数量: {len(ips_final)}")
  87. # except Exception as e:
  88. # logger.exception(f"获取最终列表失败: {e}")
  89. # print(f"获取最终列表失败: {e}")
  90. # 旧的低级测试保留(按需)
  91. # 测试ACL接口
  92. # try:
  93. # acl_resp, acl_data = get_acl_rules()
  94. # logger.info(f"已调用: get_acl_rules() | 状态: {acl_resp.status_code}")
  95. # if acl_data:
  96. # logger.info(f"ACL规则总数: {acl_data.get('Data', {}).get('total', '未知')}")
  97. # print(f"ACL规则总数: {acl_data.get('Data', {}).get('total', '未知')}")
  98. # else:
  99. # logger.warning("未获取到ACL数据")
  100. # print("未获取到ACL数据")
  101. # except Exception as e:
  102. # logger.exception(f"测试ACL接口失败: {e}")
  103. # print(f"测试ACL接口失败: {e}")
  104. # # 测试添加ACL规则
  105. # try:
  106. # add_resp, add_data = add_acl_rule(dst_addr="1.2.3.4,2.4.5.6", comment="remark_kkkkkk")
  107. # logger.info(f"已调用: add_acl_rule() | 状态: {add_resp.status_code}")
  108. # if add_data:
  109. # row_id = add_data.get('RowId')
  110. # logger.info(f"新增ACL规则ID: {row_id}")
  111. # print(f"新增ACL规则ID: {row_id}")
  112. # else:
  113. # logger.warning("未获取到添加结果")
  114. # print("未获取到添加结果")
  115. # except Exception as e:
  116. # logger.exception(f"测试添加ACL规则失败: {e}")
  117. # print(f"测试添加ACL规则失败: {e}")
  118. # # 测试编辑ACL规则
  119. # try:
  120. # edit_resp, edit_data = edit_acl_rule(rule_id=14, dst_addr="1.2.3.4", comment="remark_kkkkkk")
  121. # logger.info(f"已调用: edit_acl_rule() | 状态: {edit_resp.status_code}")
  122. # if edit_data:
  123. # logger.info("ACL规则编辑成功")
  124. # print("ACL规则编辑成功")
  125. # else:
  126. # logger.warning("未获取到编辑结果")
  127. # print("未获取到编辑结果")
  128. # except Exception as e:
  129. # logger.exception(f"测试编辑ACL规则失败: {e}")
  130. # print(f"测试编辑ACL规则失败: {e}")
  131. # # 测试删除ACL规则
  132. # try:
  133. # del_resp, del_data = del_acl_rule(rule_id=14)
  134. # logger.info(f"已调用: del_acl_rule() | 状态: {del_resp.status_code}")
  135. # if del_data:
  136. # logger.info("ACL规则删除成功")
  137. # print("ACL规则删除成功")
  138. # else:
  139. # logger.warning("未获取到删除结果")
  140. # print("未获取到删除结果")
  141. # except Exception as e:
  142. # logger.exception(f"测试删除ACL规则失败: {e}")
  143. # print(f"测试删除ACL规则失败: {e}")
  144. # 6) 演示 monitor_lanip 接口
  145. try:
  146. conn_ip = "10.8.7.2"
  147. resp_conn, data_conn = monitor_lanip(conn_ip)
  148. logger.info(f"已调用: monitor_lanip({conn_ip}) | 状态: {resp_conn.status_code}")
  149. if data_conn:
  150. print(json.dumps(data_conn, ensure_ascii=False, indent=2))
  151. else:
  152. print(resp_conn.text)
  153. except Exception as e:
  154. logger.exception(f"测试 monitor_lanip 失败: {e}")
  155. print(f"测试 monitor_lanip 失败: {e}")
  156. else:
  157. logger.warning("未在响应中找到 sess_key")
  158. print("未在响应中找到 sess_key")
  159. if __name__ == "__main__":
  160. main()