xbase-util 0.7.2__tar.gz → 0.7.4__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {xbase_util-0.7.2 → xbase_util-0.7.4}/PKG-INFO +1 -1
- {xbase_util-0.7.2 → xbase_util-0.7.4}/setup.py +1 -1
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/packet_util.py +2 -33
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/segment.py +14 -7
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util.egg-info/PKG-INFO +1 -1
- {xbase_util-0.7.2 → xbase_util-0.7.4}/README.md +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/setup.cfg +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/__init__.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/add_column_util.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/dangerous_util.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/__init__.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/bean/ConfigBean.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/bean/CurrentConfigBean.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/bean/FlowBean.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/bean/TaskTemplateBean.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/bean/__init__.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/dao/ConfigDao.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/dao/CurrentConfigDao.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/dao/FlowDao.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/dao/TaskTemplateDao.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/dao/__init__.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/db/initsqlite3.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/es_db_util.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/esreq.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/geo_util.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/handle_features_util.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/pcap_util.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/xbase_constant.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util/xbase_util.py +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util.egg-info/SOURCES.txt +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util.egg-info/dependency_links.txt +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util.egg-info/not-zip-safe +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util.egg-info/top_level.txt +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util_assets/GeoLite2-City.mmdb +0 -0
- {xbase_util-0.7.2 → xbase_util-0.7.4}/xbase_util_assets/arkimeparse.js +0 -0
@@ -70,37 +70,6 @@ http_req_method = re.compile(r"(GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH) \/[^\s]*
|
|
70
70
|
http_req_path = re.compile(r"(?:GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH)\s+(\/[^\s]*)\s+HTTP\/\d\.\d")
|
71
71
|
res_status_code_pattern = re.compile(r"HTTP\/\d\.\d\s+(\d{3})\s+.*")
|
72
72
|
|
73
|
-
|
74
|
-
# def get_all_packets_by_reg(packets):
|
75
|
-
# http_Req_Raw = {}
|
76
|
-
# http_methods = ("POST /", "PUT /", "OPTIONS /", "DELETE /", "GET /")
|
77
|
-
# for packet in packets:
|
78
|
-
# if TCP in packet and Raw in packet:
|
79
|
-
# data = packet[Raw].load
|
80
|
-
# ack = packet[TCP].ack
|
81
|
-
# next_ack = packet[TCP].seq + len(data)
|
82
|
-
# if ack not in http_Req_Raw:
|
83
|
-
# http_Req_Raw[ack] = {"time": [float(packet.time)], "data": data, "next_ack": next_ack}
|
84
|
-
# else:
|
85
|
-
# http_Req_Raw[ack]["time"].append(float(packet.time))
|
86
|
-
# http_Req_Raw[ack]["data"] += data
|
87
|
-
# http_Req_Raw[ack]["next_ack"] = next_ack
|
88
|
-
# packet_list = [
|
89
|
-
# {
|
90
|
-
# 'req_data': item['data'],
|
91
|
-
# 'res_data': http_Req_Raw[item['next_ack']]['data'],
|
92
|
-
# 'req_text': filter_visible_chars(item['data']),
|
93
|
-
# 'res_text': filter_visible_chars(http_Req_Raw[item['next_ack']]['data']),
|
94
|
-
# 'req_time': item['time'],
|
95
|
-
# 'res_time': http_Req_Raw[item['next_ack']]['time']
|
96
|
-
# }
|
97
|
-
# for ack, item in http_Req_Raw.items()
|
98
|
-
# if item['next_ack'] in http_Req_Raw # 检查 next_ack 是否存在
|
99
|
-
# and any(method in filter_visible_chars(item['data']) for method in http_methods)
|
100
|
-
# ]
|
101
|
-
# return packet_list
|
102
|
-
|
103
|
-
|
104
73
|
def get_header_value(header_set, value):
|
105
74
|
result = [item for item in header_set if value in item]
|
106
75
|
if len(result) != 0:
|
@@ -139,9 +108,9 @@ def get_detail_by_package(publicField, req_header, req_body, res_header, res_bod
|
|
139
108
|
res_field['plain_body_src'] = ""
|
140
109
|
res_field['plain_body_dst'] = ""
|
141
110
|
if content_type_is_plain(req_header):
|
142
|
-
res_field['plain_body_src'] =
|
111
|
+
res_field['plain_body_src'] = req_body
|
143
112
|
if content_type_is_plain(res_header):
|
144
|
-
res_field['plain_body_dst'] =
|
113
|
+
res_field['plain_body_dst'] = res_body
|
145
114
|
|
146
115
|
http_server_version_res = http_version.findall(res_header)
|
147
116
|
res_field['http.serverVersion'] = http_server_version_res[0] if len(http_server_version_res) > 0 else ""
|
@@ -1,10 +1,15 @@
|
|
1
1
|
import copy
|
2
|
+
import gzip
|
2
3
|
import re
|
4
|
+
import zlib
|
5
|
+
from io import BytesIO
|
3
6
|
|
4
7
|
import numpy as np
|
5
8
|
from scapy.all import *
|
6
9
|
from scapy.layers.inet import TCP
|
7
10
|
|
11
|
+
from xbase_util.packet_util import filter_visible_chars
|
12
|
+
|
8
13
|
REQUEST_LINE_RE = re.compile(rb"^(GET|POST|PUT|DELETE|OPTIONS|HEAD|PATCH)\s[^\r\n]+\r\n", re.MULTILINE)
|
9
14
|
RESPONSE_LINE_RE = re.compile(rb"^HTTP/\d\.\d\s+\d{3}\s?[^\r\n]*", re.IGNORECASE)
|
10
15
|
|
@@ -50,7 +55,8 @@ def read_packets(packets):
|
|
50
55
|
tmp_packets.clear()
|
51
56
|
return packet_list
|
52
57
|
|
53
|
-
|
58
|
+
pattern_chuncked = re.compile(rb"Transfer-Encoding:\s*chunked", re.IGNORECASE)
|
59
|
+
pattern_gzip = re.compile(rb"Content-Encoding:\s*gzip", re.IGNORECASE)
|
54
60
|
def parse_req_or_res(data, pkts):
|
55
61
|
if data.find(b"\r\n\r\n") != -1:
|
56
62
|
res = data.split(b"\r\n\r\n", 1)
|
@@ -59,8 +65,6 @@ def parse_req_or_res(data, pkts):
|
|
59
65
|
else:
|
60
66
|
header = data
|
61
67
|
body = b''
|
62
|
-
pattern_chuncked = re.compile(rb"Transfer-Encoding:\s*chunked", re.IGNORECASE)
|
63
|
-
pattern_gzip = re.compile(rb"Content-Encoding:\s*gzip", re.IGNORECASE)
|
64
68
|
chuncked_pattern = pattern_chuncked.search(header)
|
65
69
|
gzip_pattern = pattern_gzip.search(header)
|
66
70
|
if chuncked_pattern and b'chunked' in chuncked_pattern.group():
|
@@ -99,15 +103,16 @@ def parse_req_or_res(data, pkts):
|
|
99
103
|
result_body = body
|
100
104
|
if gzip_pattern and b'gzip' in gzip_pattern.group():
|
101
105
|
try:
|
106
|
+
|
102
107
|
decompressed = gzip.decompress(result_body)
|
103
108
|
result_body_str = "\n".join(
|
104
|
-
[line.strip() for line in decompressed
|
109
|
+
[line.strip() for line in filter_visible_chars(decompressed).splitlines() if
|
105
110
|
line.strip() != ""])
|
106
111
|
except Exception as e:
|
107
|
-
result_body_str = result_body
|
112
|
+
result_body_str = filter_visible_chars(result_body)
|
108
113
|
else:
|
109
|
-
result_body_str = result_body
|
110
|
-
return header
|
114
|
+
result_body_str = filter_visible_chars(result_body)
|
115
|
+
return filter_visible_chars(header), result_body_str, [float(pkt.time) for pkt in pkts]
|
111
116
|
|
112
117
|
|
113
118
|
def get_all_packets_by_segment(packets):
|
@@ -126,6 +131,8 @@ def get_all_packets_by_segment(packets):
|
|
126
131
|
response = [item for item in response_packets if item['first_seq'] == ack]
|
127
132
|
# print(f"找到对应的响应:{len(response)}")
|
128
133
|
# print(f"请求:{request['data'].decode('utf-8', errors='replace')}")
|
134
|
+
# gzip.decompress(response[0]['data'].split(b'\r\n\r\n')[1])
|
135
|
+
# decompressed_data = zlib.decompress((response[0]['data'].split(b'\r\n\r\n')[1])[10:], wbits=zlib.MAX_WBITS | 16)
|
129
136
|
if len(response) > 0:
|
130
137
|
res_header, res_body, res_times = parse_req_or_res(response[0]['data'], response[0]['pkts'])
|
131
138
|
req_header, req_body, req_times = parse_req_or_res(request['data'], request['pkts'])
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|