|
|
@@ -1,9 +1,10 @@
|
|
|
# -*- coding: utf-8 -*-
|
|
|
import json
|
|
|
+import csv
|
|
|
import base64
|
|
|
import random
|
|
|
import socket
|
|
|
-
|
|
|
+from datetime import datetime, timezone, timedelta
|
|
|
|
|
|
def base64url_decode(base64_str):
|
|
|
size = len(base64_str) % 4
|
|
|
@@ -36,3 +37,67 @@ def get_ip_address(domain):
|
|
|
return socket.gethostbyname(domain)
|
|
|
except socket.gaierror as e:
|
|
|
print(f"无法解析域名 {domain}: {e}")
|
|
|
+
|
|
|
+def read_csv(filename='results.csv'):
|
|
|
+ data = []
|
|
|
+ try:
|
|
|
+ with open(filename, mode='r', encoding='utf-8') as csvfile:
|
|
|
+ reader = csv.DictReader(csvfile);
|
|
|
+ for row in reader:
|
|
|
+ data.append(row);
|
|
|
+ except IOError as e:
|
|
|
+ print(f"read_csv error occurred: {e}");
|
|
|
+ # print(data);
|
|
|
+ return data;
|
|
|
+
|
|
|
+def read_json(filename='results.json'):
|
|
|
+ data = None;
|
|
|
+ try:
|
|
|
+ with open(filename, 'r', encoding='utf-8') as file:
|
|
|
+ data = json.load(file);
|
|
|
+ except IOError as e:
|
|
|
+ print(f"read_json error occurred: {e}");
|
|
|
+ # print(data);
|
|
|
+ return data;
|
|
|
+
|
|
|
+def seconds_to_beijing_time(seconds):
|
|
|
+ utc_time = datetime.fromtimestamp(seconds, tz=timezone.utc);
|
|
|
+ beijing_time = utc_time.astimezone(timezone(timedelta(hours=8)));
|
|
|
+ formatted_time = beijing_time.strftime('%Y-%m-%d %H:%M:%S');
|
|
|
+ return formatted_time;
|
|
|
+
|
|
|
+def parse_set_cookie(cookies_str):
|
|
|
+ """
|
|
|
+ 解析HTTP响应头中的'Set-Cookie'字段,并返回一个cookie字典。
|
|
|
+ """
|
|
|
+ attrib_keys = ['Expires', 'Max-Age', 'Domain','Path','HttpOnly', 'SameSite'];
|
|
|
+ parts = cookies_str.split(';');
|
|
|
+ main_key = None;
|
|
|
+ ret_dict = {};
|
|
|
+ ret_data = [];
|
|
|
+ for pstr in parts:
|
|
|
+ pstr = pstr.strip();
|
|
|
+ a_key = None;
|
|
|
+ a_value = True;
|
|
|
+ if '=' in pstr:
|
|
|
+ a_key, a_value = pstr.split('=');
|
|
|
+ a_key = a_key.strip();
|
|
|
+ a_value = a_value.strip();
|
|
|
+ else:
|
|
|
+ a_key = pstr;
|
|
|
+ if a_key in attrib_keys:
|
|
|
+ ret_dict[main_key][a_key] = a_value;
|
|
|
+ else:
|
|
|
+ main_key = a_key;
|
|
|
+ attribs = {};
|
|
|
+ if ',' in main_key:
|
|
|
+ keys = main_key.split(',');
|
|
|
+ for k in keys:
|
|
|
+ k = k.strip();
|
|
|
+ if k in attrib_keys:
|
|
|
+ attribs[k] = True;
|
|
|
+ else:
|
|
|
+ main_key = k;
|
|
|
+ ret_dict[main_key] = {'name': main_key, 'value':a_value, 'attribs':attribs};
|
|
|
+ ret_data.append(ret_dict[main_key]);
|
|
|
+ return ret_data;
|