bbot 2.4.0.6039rc0__py3-none-any.whl → 2.4.0.6045rc0__py3-none-any.whl

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.

Potentially problematic release.


This version of bbot might be problematic. Click here for more details.

bbot/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # version placeholder (replaced by poetry-dynamic-versioning)
2
- __version__ = "v2.4.0.6039rc"
2
+ __version__ = "v2.4.0.6045rc"
3
3
 
4
4
  from .scanner import Scanner, Preset
@@ -60,7 +60,6 @@ class BBOTLogger:
60
60
  self._loggers = None
61
61
  self._log_handlers = None
62
62
  self._log_level = None
63
- self.root_logger = logging.getLogger()
64
63
  self.core_logger = logging.getLogger("bbot")
65
64
  self.core = core
66
65
 
@@ -83,14 +82,6 @@ class BBOTLogger:
83
82
  with suppress(Exception):
84
83
  self.queue_handler.close()
85
84
 
86
- # Clean root logger
87
- root_logger = logging.getLogger()
88
- for handler in list(root_logger.handlers):
89
- with suppress(Exception):
90
- root_logger.removeHandler(handler)
91
- with suppress(Exception):
92
- handler.close()
93
-
94
85
  # Clean all other loggers
95
86
  for logger in logging.Logger.manager.loggerDict.values():
96
87
  if hasattr(logger, "handlers"): # Logger, not PlaceHolder
@@ -111,8 +102,7 @@ class BBOTLogger:
111
102
  self.queue = logging_queue
112
103
  self.queue_handler = logging.handlers.QueueHandler(logging_queue)
113
104
 
114
- self.root_logger.addHandler(self.queue_handler)
115
-
105
+ self.core_logger.addHandler(self.queue_handler)
116
106
  self.core_logger.setLevel(log_level)
117
107
  # disable asyncio logging for child processes
118
108
  if not SHARED_INTERPRETER_STATE.is_main_process:
@@ -216,10 +206,12 @@ class BBOTLogger:
216
206
  error_and_exit(f"Failure creating or error writing to BBOT logs directory ({log_dir})")
217
207
 
218
208
  # Main log file (compressed)
219
- main_handler = GzipRotatingFileHandler(f"{log_dir}/bbot.log", when="d", interval=1, backupCount=14)
209
+ main_handler = GzipRotatingFileHandler(f"{log_dir}/bbot.log", maxBytes=1024 * 1024 * 100, backupCount=100)
220
210
 
221
211
  # Separate log file for debugging (compressed)
222
- debug_handler = GzipRotatingFileHandler(f"{log_dir}/bbot.debug.log", when="d", interval=1, backupCount=14)
212
+ debug_handler = GzipRotatingFileHandler(
213
+ f"{log_dir}/bbot.debug.log", maxBytes=1024 * 1024 * 100, backupCount=100
214
+ )
223
215
 
224
216
  # Log to stderr
225
217
  stderr_handler = logging.StreamHandler(sys.stderr)
bbot/logger.py CHANGED
@@ -1,3 +1,4 @@
1
+ import os
1
2
  import sys
2
3
  import logging.handlers
3
4
 
@@ -53,9 +54,44 @@ def log_to_stderr(msg, level="INFO", logname=True):
53
54
  print(msg, file=sys.stderr)
54
55
 
55
56
 
56
- # Create a compressed file handler for logs
57
- class GzipRotatingFileHandler(logging.handlers.TimedRotatingFileHandler):
58
- def _open(self):
57
+ class GzipRotatingFileHandler(logging.handlers.RotatingFileHandler):
58
+ """
59
+ A rotating file handler that compresses rotated files with gzip.
60
+ Checks file size only periodically to improve performance.
61
+ """
62
+
63
+ def __init__(self, *args, **kwargs):
64
+ super().__init__(*args, **kwargs)
65
+ self._msg_count = 0
66
+ self._check_interval = 1000 # Check size every 1000 messages
67
+
68
+ def rotation_filename(self, default_name):
69
+ """
70
+ Modify the rotated filename to include .gz extension
71
+ """
72
+ return default_name + ".gz"
73
+
74
+ def rotate(self, source, dest):
75
+ """
76
+ Compress the source file and move it to the destination.
77
+ """
59
78
  import gzip
60
79
 
61
- return gzip.open(f"{self.baseFilename}.gz", mode="at", encoding=self.encoding)
80
+ with open(source, "rb") as f_in:
81
+ with gzip.open(dest, "wb") as f_out:
82
+ f_out.writelines(f_in)
83
+ os.remove(source)
84
+
85
+ def emit(self, record):
86
+ """
87
+ Emit a record, checking for rollover only periodically using modulo.
88
+ """
89
+ self._msg_count += 1
90
+
91
+ # Only check for rollover periodically to save compute
92
+ if self._msg_count % self._check_interval == 0:
93
+ if self.shouldRollover(record):
94
+ self.doRollover()
95
+
96
+ # Continue with normal emit process
97
+ super().emit(record)
bbot/scanner/scanner.py CHANGED
@@ -1229,9 +1229,13 @@ class Scanner:
1229
1229
  def _log_handlers(self):
1230
1230
  if self.__log_handlers is None:
1231
1231
  self.helpers.mkdir(self.home)
1232
- main_handler = GzipRotatingFileHandler(str(self.home / "scan.log"), when="d", interval=1, backupCount=14)
1232
+ main_handler = GzipRotatingFileHandler(
1233
+ str(self.home / "scan.log"), maxBytes=1024 * 1024 * 100, backupCount=100
1234
+ )
1233
1235
  main_handler.addFilter(lambda x: x.levelno != logging.TRACE and x.levelno >= logging.VERBOSE)
1234
- debug_handler = GzipRotatingFileHandler(str(self.home / "debug.log"), when="d", interval=1, backupCount=14)
1236
+ debug_handler = GzipRotatingFileHandler(
1237
+ str(self.home / "debug.log"), maxBytes=1024 * 1024 * 100, backupCount=100
1238
+ )
1235
1239
  debug_handler.addFilter(lambda x: x.levelno >= logging.DEBUG)
1236
1240
  self.__log_handlers = [main_handler, debug_handler]
1237
1241
  return self.__log_handlers
@@ -50,25 +50,6 @@ def tempapkfile():
50
50
  return apk_file
51
51
 
52
52
 
53
- def read_gzipped_file(file_path):
54
- """
55
- Read and decompress a gzipped file, tolerating missing end markers.
56
-
57
- Args:
58
- file_path: Path to the gzipped file
59
-
60
- Returns:
61
- The decompressed content as a string
62
- """
63
- with open(file_path, "rb") as f:
64
- data = f.read()
65
- decompressor = zlib.decompressobj(
66
- 16 + zlib.MAX_WBITS
67
- ) # This is needed because the file doesn't have an end marker
68
- content = decompressor.decompress(data).decode("utf-8", errors="ignore")
69
- return content
70
-
71
-
72
53
  @pytest.fixture
73
54
  def clean_default_config(monkeypatch):
74
55
  clean_config = OmegaConf.merge(
@@ -130,9 +130,9 @@ async def test_cli_scan(monkeypatch):
130
130
  assert ip_success and dns_success, "IP_ADDRESS and/or DNS_NAME are not present in output.txt"
131
131
 
132
132
  # Check for gzipped scan log file
133
- scan_log_gz = scan_home / "scan.log.gz"
134
- assert scan_log_gz.is_file(), "scan.log.gz not found"
135
- assert "[INFO]" in read_gzipped_file(scan_log_gz)
133
+ scan_log = scan_home / "scan.log"
134
+ assert scan_log.is_file(), "scan.log not found"
135
+ assert "[INFO]" in open(scan_log).read()
136
136
 
137
137
 
138
138
  @pytest.mark.asyncio
@@ -202,9 +202,9 @@ async def test_cli_args(monkeypatch, caplog, capsys, clean_default_config):
202
202
  assert "[SCAN]" in open(scan_dir / "output.txt").read()
203
203
 
204
204
  # Check for gzipped scan log file
205
- scan_log_gz = scan_dir / "scan.log.gz"
206
- assert scan_log_gz.is_file(), "scan.log.gz not found"
207
- assert "[INFO]" in read_gzipped_file(scan_log_gz)
205
+ scan_log = scan_dir / "scan.log"
206
+ assert scan_log.is_file(), "scan.log not found"
207
+ assert "[INFO]" in open(scan_log).read()
208
208
  shutil.rmtree(output_dir)
209
209
 
210
210
  # list module options
@@ -17,28 +17,28 @@ async def test_python_api():
17
17
  scan_home = scan2.helpers.scans_dir / "python_api_test"
18
18
  out_file = scan_home / "output.json"
19
19
  assert list(scan2.helpers.read_file(out_file))
20
- scan_log = scan_home / "scan.log.gz"
21
- debug_log = scan_home / "debug.log.gz"
20
+ scan_log = scan_home / "scan.log"
21
+ debug_log = scan_home / "debug.log"
22
22
  assert scan_log.is_file()
23
- assert "python_api_test" in read_gzipped_file(scan_log)
23
+ assert "python_api_test" in open(scan_log).read()
24
24
  assert debug_log.is_file()
25
- assert "python_api_test" in read_gzipped_file(debug_log)
25
+ assert "python_api_test" in open(debug_log).read()
26
26
 
27
27
  scan3 = Scanner("127.0.0.1", output_modules=["json"], scan_name="scan_logging_test")
28
28
  await scan3.async_start_without_generator()
29
29
 
30
- assert "scan_logging_test" not in read_gzipped_file(scan_log)
31
- assert "scan_logging_test" not in read_gzipped_file(debug_log)
30
+ assert "scan_logging_test" not in open(scan_log).read()
31
+ assert "scan_logging_test" not in open(debug_log).read()
32
32
 
33
33
  scan_home = scan3.helpers.scans_dir / "scan_logging_test"
34
34
  out_file = scan_home / "output.json"
35
35
  assert list(scan3.helpers.read_file(out_file))
36
- scan_log = scan_home / "scan.log.gz"
37
- debug_log = scan_home / "debug.log.gz"
36
+ scan_log = scan_home / "scan.log"
37
+ debug_log = scan_home / "debug.log"
38
38
  assert scan_log.is_file()
39
39
  assert debug_log.is_file()
40
- assert "scan_logging_test" in read_gzipped_file(scan_log)
41
- assert "scan_logging_test" in read_gzipped_file(debug_log)
40
+ assert "scan_logging_test" in open(scan_log).read()
41
+ assert "scan_logging_test" in open(debug_log).read()
42
42
 
43
43
  # make sure config loads properly
44
44
  bbot_home = "/tmp/.bbot_python_api_test"
@@ -1034,7 +1034,7 @@ class TestExcavateBadURLs(ModuleTestBase):
1034
1034
  module_test.set_expect_requests({"uri": "/"}, {"response_data": self.bad_url_data})
1035
1035
 
1036
1036
  def check(self, module_test, events):
1037
- debug_log_content = read_gzipped_file(module_test.scan.home / "debug.log.gz")
1037
+ debug_log_content = open(module_test.scan.home / "debug.log").read()
1038
1038
  # make sure our logging is working
1039
1039
  assert "Setting scan status to STARTING" in debug_log_content
1040
1040
  # make sure we don't have any URL validation errors
@@ -101,7 +101,7 @@ class TestNucleiTechnology(TestNucleiManual):
101
101
 
102
102
  def check(self, module_test, events):
103
103
  assert any(e.type == "TECHNOLOGY" and "apache" in e.data["technology"].lower() for e in events)
104
- assert "Using Interactsh Server" not in read_gzipped_file(module_test.scan.home / "debug.log.gz")
104
+ assert "Using Interactsh Server" not in open(module_test.scan.home / "debug.log").read()
105
105
 
106
106
 
107
107
  class TestNucleiBudget(TestNucleiManual):
@@ -140,7 +140,7 @@ class TestNucleiRetries(TestNucleiManual):
140
140
  module_test.set_expect_requests(expect_args=expect_args, respond_args=respond_args)
141
141
 
142
142
  def check(self, module_test, events):
143
- assert "-retries 0" in read_gzipped_file(module_test.scan.home / "debug.log.gz")
143
+ assert "-retries 0" in open(module_test.scan.home / "debug.log").read()
144
144
 
145
145
 
146
146
  class TestNucleiRetriesCustom(TestNucleiRetries):
@@ -150,7 +150,7 @@ class TestNucleiRetriesCustom(TestNucleiRetries):
150
150
  }
151
151
 
152
152
  def check(self, module_test, events):
153
- assert "-retries 1" in read_gzipped_file(module_test.scan.home / "debug.log.gz")
153
+ assert "-retries 1" in open(module_test.scan.home / "debug.log").read()
154
154
 
155
155
 
156
156
  class TestNucleiCustomHeaders(TestNucleiManual):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bbot
3
- Version: 2.4.0.6039rc0
3
+ Version: 2.4.0.6045rc0
4
4
  Summary: OSINT automation for hackers.
5
5
  License: GPL-3.0
6
6
  Keywords: python,cli,automation,osint,threat-intel,intelligence,neo4j,scanner,python-library,hacking,recursion,pentesting,recon,command-line-tool,bugbounty,subdomains,security-tools,subdomain-scanner,osint-framework,attack-surface,subdomain-enumeration,osint-tool
@@ -1,9 +1,9 @@
1
- bbot/__init__.py,sha256=8Iyi9KoPG-UlvIuUaNkxTklqX1kLvHsTp94WdCnlubE,130
1
+ bbot/__init__.py,sha256=xPf-rKAnwl0D5NspeWtY_xu1hNA44ElkkLbYUvctFWw,130
2
2
  bbot/cli.py,sha256=Jh8R_mSlitg6s4bFt5fqRzjMovxZAqtBPBa5A6pbedU,11883
3
3
  bbot/core/__init__.py,sha256=l255GJE_DvUnWvrRb0J5lG-iMztJ8zVvoweDOfegGtI,46
4
4
  bbot/core/config/__init__.py,sha256=zYNw2Me6tsEr8hOOkLb4BQ97GB7Kis2k--G81S8vofU,342
5
5
  bbot/core/config/files.py,sha256=zANvrTRLJQIOWSNkxd9MpWmf9cQFr0gRZLUxeIbTwQc,1412
6
- bbot/core/config/logger.py,sha256=sc_69k37YB98ngVnwa1P9jN0V9jDM0CuNPVNzWZzpm8,10537
6
+ bbot/core/config/logger.py,sha256=gf4SCDu_V5Gl5u8Z37_oRCF2AdpUlVuZ_TF3TsZeRO8,10252
7
7
  bbot/core/core.py,sha256=V0G3dKPN5xCbXOoFeBRkh-BZb6A3kSNA060De01LiTU,7065
8
8
  bbot/core/engine.py,sha256=9p7yoKMVvKGO0UCOkQK0D-9byvrcn2wFGDke6g_PY6c,29368
9
9
  bbot/core/event/__init__.py,sha256=8ut88ZUg0kbtWkOx2j3XzNr_3kTfgoM-3UdiWHFA_ag,56
@@ -50,7 +50,7 @@ bbot/core/shared_deps.py,sha256=mCMZeKSt46trzVqQDPGfXfEWg0Zw5YjiJx4BnsIRgHM,7640
50
50
  bbot/db/sql/models.py,sha256=SrUdDOBCICzXJBY29p0VvILhMQ1JCuh725bqvIYogX0,4884
51
51
  bbot/defaults.yml,sha256=XPaGfTKWFjKV-lLIJy-Qs7X0d-8X8EYM0QELEu8KjBw,6670
52
52
  bbot/errors.py,sha256=xwQcD26nU9oc7-o0kv5jmEDTInmi8_W8eKAgQZZxdVM,953
53
- bbot/logger.py,sha256=1gsFlGpAJuKJvlHbM9rsFiMQdo3VMGsBIAjkqmAKW0A,1681
53
+ bbot/logger.py,sha256=wE-532v5FyKuSSoTdyW1xSfaOnLZB1axAJnB-uW2xrI,2745
54
54
  bbot/modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  bbot/modules/ajaxpro.py,sha256=daE1yQoCsSI5c4dh3YKwRSggTISNjWgrK7qTPidk7cU,3764
56
56
  bbot/modules/anubisdb.py,sha256=JCy2YCfa0e_VawpzNmcPXAosKUthmYGutireJ0gMDws,1916
@@ -235,12 +235,12 @@ bbot/scanner/preset/conditions.py,sha256=hFL9cSIWGEsv2TfM5UGurf0c91cyaM8egb5IngB
235
235
  bbot/scanner/preset/environ.py,sha256=9KbEOLWkUdoAf5Ez_2A1NNm6QduQElbnNnrPi6VDhZs,4731
236
236
  bbot/scanner/preset/path.py,sha256=Q29MO8cOEn690yW6bB08P72kbZ3C-H_TOEoXuwWnFM8,2274
237
237
  bbot/scanner/preset/preset.py,sha256=Xmh9mkO4c985sOG8BGRwujBUmO1jCpHRC_Sgq2fD_dY,40805
238
- bbot/scanner/scanner.py,sha256=f0vv0-hqbJhIjB7YpDbzZbYyIEpbqA_f3QMkICuyHOQ,54581
238
+ bbot/scanner/scanner.py,sha256=byW7kklP9BbTVlHyTZPZudFk-8uh8Vgq9KODriB5Cos,54655
239
239
  bbot/scanner/stats.py,sha256=re93sArKXZSiD0Owgqk2J3Kdvfm3RL4Y9Qy_VOcaVk8,3623
240
240
  bbot/scanner/target.py,sha256=icfcalZrFSP_LIQkH4MpQXuvrVmo-Xl83FCg7NlddX0,12133
241
241
  bbot/scripts/docs.py,sha256=ZLY9-O6OeEElzOUvTglO5EMkRv1s4aEuxJb2CthCVsI,10782
242
242
  bbot/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
243
- bbot/test/bbot_fixtures.py,sha256=rXiCE9L0L4Lfrn4A3YMgEiOE1yXwc4BUNv3hBhCTCG4,10557
243
+ bbot/test/bbot_fixtures.py,sha256=y6lxHR46qPDl3Rjy5DVai6roNQG8r7rZSobRcdWDdro,10007
244
244
  bbot/test/conftest.py,sha256=dQhpZ-DMkcc0ANiBPvO2Th-QNTecfvMHn0nryL-96i4,11796
245
245
  bbot/test/coverage.cfg,sha256=ko9RacAYsJxWJCL8aEuNtkAOtP9lexYiDbeFWe8Tp8Y,31
246
246
  bbot/test/fastapi_test.py,sha256=9OhOFRyagXTshMsnuzuKIcR4uzS6VW65m7h9KgB4jSA,381
@@ -252,7 +252,7 @@ bbot/test/test_step_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
252
252
  bbot/test/test_step_1/test__module__tests.py,sha256=uwuROxdXI52D-V9z3Q9VNslvBfaduj6MQS5tQ_UOqXA,1460
253
253
  bbot/test/test_step_1/test_bbot_fastapi.py,sha256=FNGvlax4lFZVd0T3HvV9SJh1lsngOX58GrUnJVzoy20,2531
254
254
  bbot/test/test_step_1/test_bloom_filter.py,sha256=Uy6qUZr4mSbD1VmU8Yq8u3ezqZziCjmZQiE844_FoX8,2143
255
- bbot/test/test_step_1/test_cli.py,sha256=jkTq-QReuVhp7H1iRq2Ap5Zq2TobVtf64deOi-SWZYA,27629
255
+ bbot/test/test_step_1/test_cli.py,sha256=Xpievf5wOJ5TZC2b8Ylb7eTTofWbiHo6dRSRg4MwKGc,27587
256
256
  bbot/test/test_step_1/test_command.py,sha256=5IeGV6TKB0xtFEsfsU_0mNrOmEdIQiQ3FHkUmsBNoOI,6485
257
257
  bbot/test/test_step_1/test_config.py,sha256=Q38hygpke2GDcv8OguVZuiSOnfDJxEMrRy20dN5Qsn0,887
258
258
  bbot/test/test_step_1/test_depsinstaller.py,sha256=zr9f-wJDotD1ZvKXGEuDRWzFYMAYBI6209mI_PWPtTQ,703
@@ -266,7 +266,7 @@ bbot/test/test_step_1/test_manager_deduplication.py,sha256=hZQpDXzg6zvzxFolVOcJu
266
266
  bbot/test/test_step_1/test_manager_scope_accuracy.py,sha256=JV1bQHt9EIM0GmGS4T4Brz_L2lfcwTxtNC06cfv7r64,79763
267
267
  bbot/test/test_step_1/test_modules_basic.py,sha256=ELpGlsthSq8HaxB5My8-ESVHqMxqdL5Of0STMIyaWzA,20001
268
268
  bbot/test/test_step_1/test_presets.py,sha256=hCyIWu7YHzEJ_mPD66Ms1J1xE_2PXKnYsIUULWTUPhA,40974
269
- bbot/test/test_step_1/test_python_api.py,sha256=eV_CfZCJ1SFsaSMxeGpTsq9HRhQ66Xmxj8znPj7T3Qk,5551
269
+ bbot/test/test_step_1/test_python_api.py,sha256=GM5Kp2AAFl92ozo1kL6axsM87F8Gdq2_mWQvRnbXW_0,5503
270
270
  bbot/test/test_step_1/test_regexes.py,sha256=BMlaXY_5eybgbgz8MCZbXNrXsovbYK_mNPd_4AH6mSc,14353
271
271
  bbot/test/test_step_1/test_scan.py,sha256=g1oB1TGXzOIm3Rvy-HCE6xDg_IJ-mOuTfqlRjI4wWnI,8872
272
272
  bbot/test/test_step_1/test_scope.py,sha256=S2nssENKJKCvgXUMyU8MFQmXHeUIz0C_sbWGkdYti2A,3063
@@ -326,7 +326,7 @@ bbot/test/test_step_2/module_tests/test_module_dockerhub.py,sha256=9T8CFcFP32MOp
326
326
  bbot/test/test_step_2/module_tests/test_module_dotnetnuke.py,sha256=ps2u_yeDXSkhALGqtg574C5-YvyueRJMjEIoSoTRThc,8064
327
327
  bbot/test/test_step_2/module_tests/test_module_emailformat.py,sha256=cKxBPnEQ4AiRKV_-hSYEE6756ypst3hi6MN0L5RTukY,461
328
328
  bbot/test/test_step_2/module_tests/test_module_emails.py,sha256=bZjtO8N3GG2_g6SUEYprAFLcsi7SlwNPJJ0nODfrWYU,944
329
- bbot/test/test_step_2/module_tests/test_module_excavate.py,sha256=XSoni9t59u2foYH1Wz_krC-k0Wj7E4YJzD82OLYv3w4,43653
329
+ bbot/test/test_step_2/module_tests/test_module_excavate.py,sha256=0Am_BWUQfnayUym-ZHTXAPWtGfQophhZYCl1aMB_wpM,43644
330
330
  bbot/test/test_step_2/module_tests/test_module_extractous.py,sha256=PuTE5rkEIFPwU9lhCYpTgNSkrVjcXm8PClbfOkfRS84,17973
331
331
  bbot/test/test_step_2/module_tests/test_module_ffuf.py,sha256=z8ihAM1WYss7QGXIjbi67cekg8iOemDjaM8YR9_qSEs,4100
332
332
  bbot/test/test_step_2/module_tests/test_module_ffuf_shortnames.py,sha256=aq8ycPMJmFJJO6mqM2EaFZoKBEpm6Umfz05OMMwxu4Q,8354
@@ -362,7 +362,7 @@ bbot/test/test_step_2/module_tests/test_module_neo4j.py,sha256=pUUaqxBsF6s11dEDh
362
362
  bbot/test/test_step_2/module_tests/test_module_newsletters.py,sha256=uf5t2oRqxhNToPjEfkY9vMdOUzrSocvx8w5itS6HUaM,2295
363
363
  bbot/test/test_step_2/module_tests/test_module_nmap_xml.py,sha256=KbUAjhARvtERv7Jx666n2hkuLOmK8Zah8RpLZqNyAuE,3548
364
364
  bbot/test/test_step_2/module_tests/test_module_ntlm.py,sha256=tPUrsOnq8iV0l_qiD_4xkqp0-o_T2uI1e-yH22oNveA,1132
365
- bbot/test/test_step_2/module_tests/test_module_nuclei.py,sha256=vL-JAUTsOgL6MPiSN-Ie6bA_wuwzrcWEibUK5BQ0aRg,7032
365
+ bbot/test/test_step_2/module_tests/test_module_nuclei.py,sha256=2hJXnr40AO5o5xeapxX-YToNxdkSmlQ4JkSorsMkbxw,7005
366
366
  bbot/test/test_step_2/module_tests/test_module_oauth.py,sha256=pN1o0DmcwGCa985FrIhUuX1jIGriDjaxMzWozuv8pR0,9481
367
367
  bbot/test/test_step_2/module_tests/test_module_otx.py,sha256=-fHX5zNnke21lOQUnTfAj1KIoQXuLLYO_QunDRGkj8o,1159
368
368
  bbot/test/test_step_2/module_tests/test_module_paramminer_cookies.py,sha256=wFGJjP1LvD04BTX822uNH30VRKr7b7DnFNjiBN1uJx0,2375
@@ -427,8 +427,8 @@ bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt,sha256=ZSIVebs7ptMvHx
427
427
  bbot/wordlists/top_open_ports_nmap.txt,sha256=LmdFYkfapSxn1pVuQC2LkOIY2hMLgG-Xts7DVtYzweM,42727
428
428
  bbot/wordlists/valid_url_schemes.txt,sha256=0B_VAr9Dv7aYhwi6JSBDU-3M76vNtzN0qEC_RNLo7HE,3310
429
429
  bbot/wordlists/wordninja_dns.txt.gz,sha256=DYHvvfW0TvzrVwyprqODAk4tGOxv5ezNmCPSdPuDUnQ,570241
430
- bbot-2.4.0.6039rc0.dist-info/LICENSE,sha256=GzeCzK17hhQQDNow0_r0L8OfLpeTKQjFQwBQU7ZUymg,32473
431
- bbot-2.4.0.6039rc0.dist-info/METADATA,sha256=yN-eHAYRFMwC-ip1BokrumRwxa3cBASApSmyYW9Ssd4,18218
432
- bbot-2.4.0.6039rc0.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
433
- bbot-2.4.0.6039rc0.dist-info/entry_points.txt,sha256=cWjvcU_lLrzzJgjcjF7yeGuRA_eDS8pQ-kmPUAyOBfo,38
434
- bbot-2.4.0.6039rc0.dist-info/RECORD,,
430
+ bbot-2.4.0.6045rc0.dist-info/LICENSE,sha256=GzeCzK17hhQQDNow0_r0L8OfLpeTKQjFQwBQU7ZUymg,32473
431
+ bbot-2.4.0.6045rc0.dist-info/METADATA,sha256=BQXHAYxRJdD5QKORiD4XdcnLePcTiF7OS1TExsf5C9w,18218
432
+ bbot-2.4.0.6045rc0.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
433
+ bbot-2.4.0.6045rc0.dist-info/entry_points.txt,sha256=cWjvcU_lLrzzJgjcjF7yeGuRA_eDS8pQ-kmPUAyOBfo,38
434
+ bbot-2.4.0.6045rc0.dist-info/RECORD,,