xbase-util 0.8.4__tar.gz → 0.8.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {xbase_util-0.8.4 → xbase_util-0.8.6}/PKG-INFO +1 -1
  2. {xbase_util-0.8.4 → xbase_util-0.8.6}/setup.py +1 -1
  3. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/common_util.py +17 -18
  4. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/pcap_util.py +7 -8
  5. xbase_util-0.8.6/xbase_util/test.py +15 -0
  6. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util.egg-info/PKG-INFO +1 -1
  7. xbase_util-0.8.4/xbase_util/test.py +0 -40
  8. {xbase_util-0.8.4 → xbase_util-0.8.6}/README.md +0 -0
  9. {xbase_util-0.8.4 → xbase_util-0.8.6}/setup.cfg +0 -0
  10. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/__init__.py +0 -0
  11. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/add_column_util.py +0 -0
  12. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/dangerous_util.py +0 -0
  13. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/__init__.py +0 -0
  14. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/bean/ConfigBean.py +0 -0
  15. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/bean/CurrentConfigBean.py +0 -0
  16. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/bean/FlowBean.py +0 -0
  17. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/bean/TaskTemplateBean.py +0 -0
  18. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/bean/__init__.py +0 -0
  19. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/dao/ConfigDao.py +0 -0
  20. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/dao/CurrentConfigDao.py +0 -0
  21. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/dao/FlowDao.py +0 -0
  22. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/dao/TaskTemplateDao.py +0 -0
  23. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/dao/__init__.py +0 -0
  24. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/db/initsqlite3.py +0 -0
  25. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/es_db_util.py +0 -0
  26. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/esreq.py +0 -0
  27. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/geo_util.py +0 -0
  28. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/handle_features_util.py +0 -0
  29. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/packet_util.py +0 -0
  30. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util/xbase_constant.py +0 -0
  31. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util.egg-info/SOURCES.txt +0 -0
  32. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util.egg-info/dependency_links.txt +0 -0
  33. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util.egg-info/not-zip-safe +0 -0
  34. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util.egg-info/top_level.txt +0 -0
  35. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util_assets/GeoLite2-City.mmdb +0 -0
  36. {xbase_util-0.8.4 → xbase_util-0.8.6}/xbase_util_assets/arkimeparse.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xbase_util
3
- Version: 0.8.4
3
+ Version: 0.8.6
4
4
  Summary: 网络安全基础工具
5
5
  Home-page: https://gitee.com/jimonik/xbase_util.git
6
6
  Author: xyt
@@ -3,7 +3,7 @@ from distutils.core import setup
3
3
  from setuptools import find_packages
4
4
 
5
5
  setup(name="xbase_util",
6
- version="0.8.4",
6
+ version="0.8.6",
7
7
  description="网络安全基础工具",
8
8
  long_description="包含提取,预测,训练的基础工具",
9
9
  author="xyt",
@@ -3,6 +3,7 @@ import json
3
3
  import logging
4
4
  import os
5
5
  import re
6
+ from collections import Counter
6
7
  from datetime import datetime
7
8
  from logging.handlers import TimedRotatingFileHandler
8
9
  from urllib.parse import urlparse, parse_qs
@@ -68,27 +69,25 @@ def parse_expression(expression):
68
69
  return None
69
70
 
70
71
 
71
- def get_cookie_end_with_semicolon_count(text_data):
72
- count = 0
73
- for text in text_data.replace("-", "_").lower().splitlines():
74
- item_text = text.replace("\n", "").replace("\t", "").replace(" ", "")
75
- if "cookie:" in item_text and f"{item_text}".endswith(";"):
76
- count = count + 1
77
- if count == 0:
78
- return -1
79
- return count
72
+ def get_cookie_end_with_semicolon_count(all_packets):
73
+ headers = [item['req_header'] + item['res_header'] for item in all_packets]
74
+ c = 0
75
+ for header in headers:
76
+ lines = [item for item in header.split('\r\n') if 'Cookie:' in item and item.strip().endswith(';')]
77
+ c += len(lines)
78
+ return c
80
79
 
81
80
 
82
- def get_ua_duplicate_count(text_data):
81
+ def get_ua_duplicate_count(all_packets):
82
+ headers = [item['req_header'] + item['res_header'] for item in all_packets]
83
83
  ua_list = []
84
- for text in text_data.replace("-", "_").lower().splitlines():
85
- item_text = text.replace("\n", "").replace("\t", "").replace(" ", "")
86
- if "user_agent:" in item_text and f"{item_text}".endswith(";"):
87
- ua_list.append(item_text.replace("user_agent:", ""))
88
- count = list(set(ua_list))
89
- if count == 0:
90
- return -1
91
- return sum(count)
84
+ for header in headers:
85
+ lines = [item for item in header.split('\r\n') if 'User-Agent:' in item]
86
+ ua_list.extend(lines)
87
+ counter = Counter(ua_list)
88
+ pairs = sum(count // 2 for count in counter.values())
89
+ print(pairs)
90
+ return pairs
92
91
 
93
92
 
94
93
  def get_res_status_code_list(all_packets):
@@ -366,8 +366,8 @@ def reassemble_tcp_pcap(p):
366
366
  info[key]['max'] = seq
367
367
  packets2.append(packet)
368
368
  if len(keys) == 1:
369
- key = f"{packets['pkt'][IP].dst}:{packets['pkt'][IP].dport}"
370
- ack = packets['pkt'][TCP].ack
369
+ key = f"{packets2[0]['pkt'][IP].dst}:{packets2[0]['pkt'][IP].dport}"
370
+ ack = packets2[0]['pkt'][TCP].ack
371
371
  info[key] = {
372
372
  "min": ack,
373
373
  "max": ack,
@@ -375,8 +375,7 @@ def reassemble_tcp_pcap(p):
375
375
  "wrapack": False,
376
376
  }
377
377
  keys.append(key)
378
- packets = packets2
379
- if len(packets) == 0:
378
+ if len(packets2) == 0:
380
379
  return []
381
380
  needwrap = False
382
381
  if info[keys[0]] and info[keys[0]]['max'] - info[keys[0]]['min'] > 0x7fffffff:
@@ -388,13 +387,13 @@ def reassemble_tcp_pcap(p):
388
387
  info[keys[0]]['wrapack'] = True
389
388
  needwrap = True
390
389
  if needwrap:
391
- for packet in packets:
390
+ for packet in packets2:
392
391
  key = f"{packet['ip']['addr1']}:{packet['tcp']['sport']}"
393
392
  if info[key]['wrapseq'] and packet['tcp']['seq'] < 0x7fffffff:
394
393
  packet['tcp']['seq'] += 0xffffffff
395
394
  if info[key]['wrapack'] and packet['tcp']['ack'] < 0x7fffffff:
396
395
  packet['tcp']['ack'] += 0xffffffff
397
- clientKey = f"{packets[0]['pkt'][IP].src}:{packets[0]['pkt'][IP].sport}"
396
+ clientKey = f"{packets2[0]['pkt'][IP].src}:{packets2[0]['pkt'][IP].sport}"
398
397
 
399
398
  def compare_packets(a, b):
400
399
  a_seq = a['pkt'][TCP].seq
@@ -413,14 +412,14 @@ def reassemble_tcp_pcap(p):
413
412
  return (a_seq + len(a_data) - 1) - b_ack
414
413
  return a_ack - (b_seq + len(b_data) - 1)
415
414
 
416
- packets.sort(key=cmp_to_key(compare_packets))
415
+ packets2.sort(key=cmp_to_key(compare_packets))
417
416
  # del packets[num_packets:]
418
417
  # Now divide up conversation
419
418
  clientSeq = 0
420
419
  hostSeq = 0
421
420
  previous = 0
422
421
  results = []
423
- for i, item in enumerate(packets):
422
+ for i, item in enumerate(packets2):
424
423
  sip = item['pkt'][IP].src
425
424
  sport = item['pkt'][IP].sport
426
425
  seq = item['pkt'][TCP].seq
@@ -0,0 +1,15 @@
1
+ from scapy.packet import Raw
2
+ from scapy.utils import rdpcap
3
+
4
+ from xbase_util.pcap_util import reassemble_tcp_pcap, reassemble_session_pcap
5
+
6
+ if __name__ == '__main__':
7
+ packets_scapy = reassemble_tcp_pcap(rdpcap("gzip2.pcap"))
8
+ skey = '10.28.7.16:54398'
9
+ streams = b""
10
+ for pkt in packets_scapy:
11
+ if Raw in pkt:
12
+ streams += pkt[Raw].load
13
+ text_data = streams.decode('ascii', errors='ignore')
14
+ all_packets = reassemble_session_pcap(packets_scapy, skey=skey)
15
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xbase-util
3
- Version: 0.8.4
3
+ Version: 0.8.6
4
4
  Summary: 网络安全基础工具
5
5
  Home-page: https://gitee.com/jimonik/xbase_util.git
6
6
  Author: xyt
@@ -1,40 +0,0 @@
1
- import re
2
-
3
- import numpy as np
4
- from scapy.packet import Raw
5
- from scapy.utils import rdpcap
6
-
7
- from xbase_util.common_util import get_res_status_code_list
8
- from xbase_util.pcap_util import reassemble_tcp_pcap, reassemble_session_pcap
9
- from xbase_util.xbase_constant import res_status_code_pattern
10
-
11
- if __name__ == '__main__':
12
- packets_scapy = reassemble_tcp_pcap(rdpcap("gzip2.pcap"))
13
- skey = '10.28.7.16:54398'
14
- streams = b""
15
- for pkt in packets_scapy:
16
- if Raw in pkt:
17
- streams += pkt[Raw].load
18
- text_data = streams.decode('ascii', errors='ignore')
19
- all_packets = reassemble_session_pcap(packets_scapy, skey=skey)
20
- if len(all_packets) != 0:
21
- all_req_size = [item['req_size'] for item in all_packets if item['key'] == skey]
22
- all_res_size = [item['res_size'] for item in all_packets if item['key'] != skey]
23
- num_1, num_2, num_3, num_4, num_5 = get_res_status_code_list(all_packets)
24
- # 获取请求头参数数量
25
- req_header_count_list = [req['req_header'].count(":") for req in all_packets]
26
- # 请求的时间间隔
27
- request_flattened_time = [item['req_time'] for item in all_packets]
28
- request_time_diffs = [request_flattened_time[i + 1] - request_flattened_time[i] for i in
29
- range(len(request_flattened_time) - 1)]
30
- request_mean_diff = round(np.nanmean(request_time_diffs), 5) or 0
31
- request_variance_diff = round(np.nanvar(request_time_diffs), 5) or 0
32
- # 响应的时间间隔
33
- response_flattened_time = [item['res_time'] for item in all_packets]
34
- response_time_diffs = [response_flattened_time[i + 1] - response_flattened_time[i] for i in
35
- range(len(response_flattened_time) - 1)]
36
- response_mean_diff = round(np.nanmean(response_time_diffs), 5) or 0
37
- response_variance_diff = round(np.nanvar(response_time_diffs), 5) or 0
38
-
39
- time_period = [(abs(item['res_time'] - item['req_time'])) for item in
40
- all_packets if item['res_time'] != 0 and item['req_time'] != 0]
File without changes
File without changes