cloudcheck 8.4.3__cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl → 8.6.1__cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.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.
Files changed (49) hide show
  1. cloudcheck/cloudcheck.cpython-312-powerpc64le-linux-gnu.so +0 -0
  2. cloudcheck/providers/__init__.py +2 -2
  3. cloudcheck/providers/akamai.py +2 -0
  4. cloudcheck/providers/alibaba.py +2 -0
  5. cloudcheck/providers/amazon.py +2 -0
  6. cloudcheck/providers/arvancloud.py +2 -0
  7. cloudcheck/providers/backblaze.py +2 -0
  8. cloudcheck/providers/base.py +38 -18
  9. cloudcheck/providers/cachefly.py +26 -0
  10. cloudcheck/providers/cisco.py +2 -0
  11. cloudcheck/providers/cloudflare.py +2 -0
  12. cloudcheck/providers/cloudfront.py +2 -0
  13. cloudcheck/providers/ddosguard.py +14 -0
  14. cloudcheck/providers/dell.py +2 -0
  15. cloudcheck/providers/digitalocean.py +2 -0
  16. cloudcheck/providers/dod.py +31 -0
  17. cloudcheck/providers/fastly.py +2 -0
  18. cloudcheck/providers/fbi.py +18 -0
  19. cloudcheck/providers/github.py +2 -0
  20. cloudcheck/providers/google.py +2 -0
  21. cloudcheck/providers/heroku.py +2 -0
  22. cloudcheck/providers/hetzner.py +2 -0
  23. cloudcheck/providers/hpe.py +2 -0
  24. cloudcheck/providers/huawei.py +2 -0
  25. cloudcheck/providers/ibm.py +2 -0
  26. cloudcheck/providers/imperva.py +4 -1
  27. cloudcheck/providers/kamatera.py +2 -0
  28. cloudcheck/providers/leaseweb.py +32 -0
  29. cloudcheck/providers/{azure.py → microsoft.py} +4 -2
  30. cloudcheck/providers/oracle.py +2 -0
  31. cloudcheck/providers/ovh.py +2 -0
  32. cloudcheck/providers/qrator.py +16 -0
  33. cloudcheck/providers/quiccloud.py +38 -0
  34. cloudcheck/providers/rackspace.py +2 -0
  35. cloudcheck/providers/ru_fso.py +13 -0
  36. cloudcheck/providers/salesforce.py +2 -0
  37. cloudcheck/providers/scaleway.py +2 -0
  38. cloudcheck/providers/stormwall.py +14 -0
  39. cloudcheck/providers/sucuri.py +14 -0
  40. cloudcheck/providers/tencent.py +2 -0
  41. cloudcheck/providers/uk_mod.py +16 -0
  42. cloudcheck/providers/wasabi.py +2 -0
  43. cloudcheck/providers/x4b.py +14 -0
  44. cloudcheck/providers/zoho.py +2 -0
  45. cloudcheck-8.6.1.dist-info/METADATA +175 -0
  46. cloudcheck-8.6.1.dist-info/RECORD +49 -0
  47. cloudcheck-8.4.3.dist-info/METADATA +0 -157
  48. cloudcheck-8.4.3.dist-info/RECORD +0 -37
  49. {cloudcheck-8.4.3.dist-info → cloudcheck-8.6.1.dist-info}/WHEEL +0 -0
@@ -1,4 +1,5 @@
1
1
  import importlib
2
+ from sys import stderr
2
3
  from pathlib import Path
3
4
  from typing import Dict, Type
4
5
 
@@ -36,10 +37,9 @@ def load_provider_classes() -> Dict[str, Type[BaseProvider]]:
36
37
  ):
37
38
  provider_name = attr.__name__
38
39
  _provider_classes[provider_name] = attr
39
- print(f"Loaded provider class: {attr.__name__}")
40
40
 
41
41
  except Exception as e:
42
- print(f"Failed to load provider from {file}: {e}")
42
+ print(f"Failed to load provider from {file}: {e}", file=stderr)
43
43
  raise
44
44
 
45
45
  return _provider_classes
@@ -7,6 +7,8 @@ from typing import List
7
7
  class Akamai(BaseProvider):
8
8
  v2fly_company: str = "akamai"
9
9
  tags: List[str] = ["cloud"]
10
+ short_description: str = "Akamai"
11
+ long_description: str = "A content delivery network and cloud services provider that delivers web and internet security services."
10
12
  # {"org_id": "AKAMAI-ARIN", "org_name": "Akamai Technologies, Inc.", "country": "US", "asns": [12222,16625,16702,17204,17334,18680,18717,20189,22207,22452,23454,23455,26008,30675,31984,32787,33047,35993,35994,36029,36183,393234,393560]}
11
13
  # {"org_id": "ORG-AT1-RIPE", "org_name": "Akamai International B.V.", "country": "NL", "asns": [20940,21342,21357,21399,31107,31108,31109,31110,31377,33905,34164,34850,35204,39836,43639,48163,49249,49846,200005,213120]}
12
14
  # {"org_id": "ORG-ATI1-AP-APNIC", "org_name": "Akamai Technologies, Inc.", "country": "US", "asns": [23903,24319,45757,55409,55770,63949,133103]}
@@ -5,6 +5,8 @@ from typing import List
5
5
  class Alibaba(BaseProvider):
6
6
  v2fly_company: str = "alibaba"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "Alibaba Cloud"
9
+ long_description: str = "A Chinese cloud computing company and subsidiary of Alibaba Group, providing cloud services and infrastructure."
8
10
  # {"org_id": "ORG-ASEP1-AP-APNIC", "org_name": "Alibaba Cloud (Singapore) Private Limited", "country": "SG", "asns": [134963]}
9
11
  org_ids: List[str] = [
10
12
  "ORG-ASEP1-AP-APNIC",
@@ -4,6 +4,8 @@ from typing import List, Dict
4
4
 
5
5
  class Amazon(BaseProvider):
6
6
  v2fly_company: str = "amazon"
7
+ short_description: str = "Amazon Web Services"
8
+ long_description: str = "A comprehensive cloud computing platform provided by Amazon, offering infrastructure services, storage, and computing power."
7
9
  org_ids: List[str] = [
8
10
  "AMAZO-139-ARIN", # Amazon.com, Inc., US
9
11
  "AMAZO-141-ARIN", # Amazon Technologies, Inc., US
@@ -5,6 +5,8 @@ from typing import List
5
5
  class Arvancloud(BaseProvider):
6
6
  domains: List[str] = ["arvancloud.ir"]
7
7
  tags: List[str] = ["cdn"]
8
+ short_description: str = "Arvancloud"
9
+ long_description: str = "An Iranian cloud computing and content delivery network provider offering cloud infrastructure and CDN services."
8
10
  # {"org_id": "ORG-AGTL2-RIPE", "org_name": "ARVANCLOUD GLOBAL TECHNOLOGIES L.L.C", "country": "AE", "asns": [57568,208006,210296]}
9
11
  org_ids: List[str] = [
10
12
  "ORG-AGTL2-RIPE",
@@ -4,6 +4,8 @@ from typing import List
4
4
 
5
5
  class Backblaze(BaseProvider):
6
6
  tags: List[str] = ["cloud"]
7
+ short_description: str = "Backblaze"
8
+ long_description: str = "A cloud storage and backup service provider offering data backup and cloud storage solutions."
7
9
  # {"org_id": "BACKB-7-ARIN", "org_name": "Backblaze Inc", "country": "US", "asns": [40401,396865]}
8
10
  org_ids: List[str] = [
9
11
  "BACKB-7-ARIN",
@@ -3,6 +3,7 @@ import os
3
3
  import traceback
4
4
  import subprocess
5
5
  import time
6
+ from concurrent.futures import ThreadPoolExecutor, as_completed
6
7
  from pathlib import Path
7
8
  from typing import Dict, List, Union
8
9
  from pydantic import BaseModel, field_validator, computed_field
@@ -26,6 +27,8 @@ class BaseProvider(BaseModel):
26
27
  tags: List[str] = [] # Tags for the provider (e.g. "cdn", "waf", etc.)
27
28
  org_ids: List[str] = [] # ASN Organization IDs (e.g. GOGL-ARIN)
28
29
  v2fly_company: str = "" # Company name for v2fly domain fetching
30
+ short_description: str = "" # Short description of the provider
31
+ long_description: str = "" # Long description of the provider
29
32
 
30
33
  # these values are dynamic and set by the update() method
31
34
  last_updated: float = time.time()
@@ -60,7 +63,6 @@ class BaseProvider(BaseModel):
60
63
 
61
64
  def __init__(self, **data):
62
65
  super().__init__(**data)
63
- print(f"Initializing {self.name}")
64
66
  self._cidrs = []
65
67
  self._cache_dir = Path.home() / ".cache" / "cloudcheck"
66
68
  self._repo_url = "https://github.com/v2fly/domain-list-community.git"
@@ -146,6 +148,20 @@ class BaseProvider(BaseModel):
146
148
 
147
149
  return errors
148
150
 
151
+ def _fetch_org_id(self, org_id: str):
152
+ """Fetch ASNs for a single org_id."""
153
+ print(f"Fetching cidrs for {org_id} from asndb")
154
+ try:
155
+ url = f"{self._asndb_url}/org/{org_id}"
156
+ print(f"Fetching {url}")
157
+ res = self.request(url, include_api_key=True)
158
+ print(f"{url} -> {res}: {res.text}")
159
+ j = res.json()
160
+ return j.get("asns", []), []
161
+ except Exception as e:
162
+ error = f"Failed to fetch cidrs for {org_id} from asndb: {e}:\n{traceback.format_exc()}"
163
+ return [], [error]
164
+
149
165
  def fetch_org_ids(
150
166
  self,
151
167
  ) -> List[Union[ipaddress.IPv4Network, ipaddress.IPv6Network]]:
@@ -154,25 +170,26 @@ class BaseProvider(BaseModel):
154
170
  cidrs = set()
155
171
  print(f"Fetching {len(self.org_ids)} org ids for {self.name}")
156
172
  asns = set()
157
- for org_id in self.org_ids:
158
- print(f"Fetching cidrs for {org_id} from asndb")
159
- try:
160
- url = f"{self._asndb_url}/org/{org_id}"
161
- print(f"Fetching {url}")
162
- res = self.request(url, include_api_key=True)
163
- print(f"{url} -> {res}: {res.text}")
164
- j = res.json()
165
- except Exception as e:
166
- errors.append(
167
- f"Failed to fetch cidrs for {org_id} from asndb: {e}:\n{traceback.format_exc()}"
168
- )
169
- continue
170
- _asns = j.get("asns", [])
171
- for asn in _asns:
172
- asns.add(asn)
173
- asn_cidrs, _errors = self.fetch_asn(asn)
173
+
174
+ # Parallelize org_id fetching
175
+ with ThreadPoolExecutor() as executor:
176
+ org_futures = {
177
+ executor.submit(self._fetch_org_id, org_id): org_id
178
+ for org_id in self.org_ids
179
+ }
180
+ for future in as_completed(org_futures):
181
+ _asns, _errors = future.result()
182
+ errors.extend(_errors)
183
+ asns.update(_asns)
184
+
185
+ # Parallelize ASN fetching
186
+ with ThreadPoolExecutor() as executor:
187
+ asn_futures = {executor.submit(self.fetch_asn, asn): asn for asn in asns}
188
+ for future in as_completed(asn_futures):
189
+ asn_cidrs, _errors = future.result()
174
190
  errors.extend(_errors)
175
191
  cidrs.update(asn_cidrs)
192
+
176
193
  return cidrs, asns, errors
177
194
 
178
195
  def fetch_asns(self) -> List[Union[ipaddress.IPv4Network, ipaddress.IPv6Network]]:
@@ -260,6 +277,9 @@ class BaseProvider(BaseModel):
260
277
  return repo_dir, errors
261
278
 
262
279
  def request(self, *args, **kwargs):
280
+ headers = kwargs.get("headers", {})
281
+ headers["x-rate-limit-blocking"] = "true"
282
+ kwargs["headers"] = headers
263
283
  return request(*args, **kwargs)
264
284
 
265
285
  def __str__(self):
@@ -0,0 +1,26 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class Cachefly(BaseProvider):
6
+ tags: List[str] = ["cdn"]
7
+ short_description: str = "CacheFly"
8
+ long_description: str = (
9
+ "A content delivery network provider offering global CDN services."
10
+ )
11
+ # {"org_id": "CL-1923-ARIN", "org_name": "CacheFly", "country": "US", "asns": [30081]}
12
+ org_ids: List[str] = [
13
+ "CL-1923-ARIN",
14
+ ]
15
+
16
+ _ips_url = "https://cachefly.cachefly.net/ips/rproxy.txt"
17
+
18
+ def fetch_cidrs(self):
19
+ response = self.request(self._ips_url)
20
+ ranges = set()
21
+ if getattr(response, "status_code", 0) == 200:
22
+ for line in response.text.splitlines():
23
+ line = line.strip()
24
+ if line and not line.startswith("#"):
25
+ ranges.add(line)
26
+ return list(ranges)
@@ -5,6 +5,8 @@ from typing import List
5
5
  class Cisco(BaseProvider):
6
6
  v2fly_company: str = "cisco"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "Cisco"
9
+ long_description: str = "A multinational technology corporation that designs, manufactures, and sells networking hardware, software, and telecommunications equipment."
8
10
  # {"org_id": "CISCO-25-ARIN", "org_name": "Cisco Systems Inc.", "country": "US", "asns": [25949]}
9
11
  # {"org_id": "CISCO-32-ARIN", "org_name": "Cisco Systems, Inc.", "country": "US", "asns": [63096]}
10
12
  # {"org_id": "CISCOR-ARIN", "org_name": "CIS Corporation", "country": "US", "asns": [3792]}
@@ -5,6 +5,8 @@ from typing import List, Dict
5
5
  class Cloudflare(BaseProvider):
6
6
  v2fly_company: str = "cloudflare"
7
7
  tags: List[str] = ["cdn"]
8
+ short_description: str = "Cloudflare"
9
+ long_description: str = "A web infrastructure and security company providing content delivery network services, DDoS mitigation, and web security solutions."
8
10
  # {"org_id": "CLOUD14-ARIN", "org_name": "Cloudflare, Inc.", "country": "US", "asns": [13335,14789,394536,395747,400095]}
9
11
  # {"org_id": "ORG-CHKL1-AP-APNIC", "org_name": "Cloudflare Hong Kong, LLC", "country": "US", "asns": [133877]}
10
12
  # {"org_id": "ORG-CI4-AP-APNIC", "org_name": "Cloudflare, Inc.", "country": "US", "asns": [132892]}
@@ -4,6 +4,8 @@ from typing import List
4
4
 
5
5
  class Cloudfront(BaseProvider):
6
6
  tags: List[str] = ["cdn"]
7
+ short_description: str = "Amazon CloudFront"
8
+ long_description: str = "A content delivery network service provided by Amazon Web Services that delivers data, videos, applications, and APIs to customers globally."
7
9
 
8
10
  _ips_url = "https://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips"
9
11
 
@@ -0,0 +1,14 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class DDoSGuard(BaseProvider):
6
+ tags: List[str] = ["cdn"]
7
+ short_description: str = "DDoS Guard"
8
+ long_description: str = (
9
+ "A DDoS protection and content delivery network service provider."
10
+ )
11
+ # {"org_id": "ORG-DL236-RIPE", "org_name": "DDOS-GUARD LTD", "country": "RU", "asns": [44556,49612,57724]}
12
+ org_ids: List[str] = [
13
+ "ORG-DL236-RIPE",
14
+ ]
@@ -5,6 +5,8 @@ from typing import List
5
5
  class Dell(BaseProvider):
6
6
  v2fly_company: str = "dell"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "Dell"
9
+ long_description: str = "A multinational technology company that develops, sells, repairs, and supports computers and related products and services."
8
10
  # {"org_id": "DCC-25-ARIN", "org_name": "Dell, Inc.", "country": "US", "asns": [3612,3613,3614,3615,7977,12257,14876,17187,23144,30614,46507,46977,53878,54701,64208]}
9
11
  org_ids: List[str] = [
10
12
  "DCC-25-ARIN",
@@ -6,6 +6,8 @@ from typing import List, Dict
6
6
  class DigitalOcean(BaseProvider):
7
7
  v2fly_company: str = "digitalocean"
8
8
  tags: List[str] = ["cloud"]
9
+ short_description: str = "DigitalOcean"
10
+ long_description: str = "A cloud infrastructure provider offering virtual private servers, managed databases, and other cloud services for developers and businesses."
9
11
  # {"org_id": "DO-13-ARIN", "org_name": "DigitalOcean, LLC", "country": "US", "asns": [14061,46652,62567,393406,394362]}
10
12
  org_ids: List[str] = [
11
13
  "DO-13-ARIN",
@@ -0,0 +1,31 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class DoD(BaseProvider):
6
+ """Department of Defense"""
7
+
8
+ tags: List[str] = ["gov"]
9
+ short_description: str = "Department of Defense"
10
+ long_description: str = "A U.S. government agency responsible for coordinating and supervising all agencies and functions of the government directly related to national security and the United States Armed Forces."
11
+ org_ids: List[str] = [
12
+ "USDDD-ARIN",
13
+ ]
14
+ domains: List[str] = ["defense.gov", "war.gov", "mil"]
15
+
16
+ # https://en.wikipedia.org/wiki/List_of_assigned_/8_IPv4_address_blocks
17
+ cidrs: List[str] = [
18
+ "6.0.0.0/8", # Army Information Systems Center
19
+ "7.0.0.0/8", # DoD Network Information Center
20
+ "11.0.0.0/8", # DoD Intel Information Systems
21
+ "21.0.0.0/8", # DDN-RVN
22
+ "22.0.0.0/8", # Defense Information Systems Agency
23
+ "26.0.0.0/8", # Defense Information Systems Agency
24
+ "28.0.0.0/8", # DSI-North
25
+ "29.0.0.0/8", # Defense Information Systems Agency
26
+ "30.0.0.0/8", # Defense Information Systems Agency
27
+ "33.0.0.0/8", # DLA Systems Automation Center
28
+ "55.0.0.0/8", # DoD Network Information Center
29
+ "214.0.0.0/8", # DoD Network Information Center
30
+ "215.0.0.0/8", # DoD Network Information Center
31
+ ]
@@ -5,6 +5,8 @@ from typing import List
5
5
  class Fastly(BaseProvider):
6
6
  v2fly_company: str = "fastly"
7
7
  tags: List[str] = ["cdn"]
8
+ short_description: str = "Fastly"
9
+ long_description: str = "A content delivery network and edge cloud platform that provides edge computing, security, and performance services."
8
10
  # {"org_id": "SKYCA-3-ARIN", "org_name": "Fastly, Inc.", "country": "US", "asns": [895,54113,394192]}
9
11
  org_ids: List[str] = [
10
12
  "SKYCA-3-ARIN",
@@ -0,0 +1,18 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class FBI(BaseProvider):
6
+ """Federal Bureau of Investigation"""
7
+
8
+ tags: List[str] = ["gov"]
9
+ short_description: str = "Federal Bureau of Investigation"
10
+ long_description: str = "A U.S. government agency that serves as the domestic intelligence and security service, responsible for investigating federal crimes and protecting national security."
11
+ org_ids: List[str] = [
12
+ "FCJIS-ARIN", # Federal Criminal Justice Information Services
13
+ ]
14
+ domains: List[str] = [
15
+ "fbi.gov",
16
+ "fbijobs.gov",
17
+ "ic3.gov",
18
+ ]
@@ -6,6 +6,8 @@ from typing import List
6
6
  class GitHub(BaseProvider):
7
7
  v2fly_company: str = "github"
8
8
  tags: List[str] = ["cdn"]
9
+ short_description: str = "GitHub"
10
+ long_description: str = "A web-based platform for version control and collaboration using Git, providing hosting for software development and code repositories."
9
11
  # {"org_id": "GITHU-ARIN", "org_name": "GitHub, Inc.", "country": "US", "asns": [36459]}
10
12
  org_ids: List[str] = [
11
13
  "GITHU-ARIN",
@@ -6,6 +6,8 @@ class Google(BaseProvider):
6
6
  v2fly_company: str = "google"
7
7
  # domains = ["googleapis.cn", "googleapis.com", "cloud.google.com", "gcp.gvt2.com", "appspot.com", "firebaseio.com", "google"]
8
8
  tags: List[str] = ["cloud"]
9
+ short_description: str = "Google Cloud"
10
+ long_description: str = "A suite of cloud computing services provided by Google, including infrastructure, platform, and software services for businesses and developers."
9
11
  # {"org_id": "GAL-53-ARIN", "org_name": "Google Access LLC", "country": "US", "asns": [32381]}
10
12
  # {"org_id": "GF-ARIN", "org_name": "Google Fiber Inc.", "country": "US", "asns": [6432,16591,19448]}
11
13
  # {"org_id": "GL-946-ARIN", "org_name": "Google LLC", "country": "US", "asns": [33715]}
@@ -5,3 +5,5 @@ from typing import List
5
5
  class Heroku(BaseProvider):
6
6
  v2fly_company: str = "heroku"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "Heroku"
9
+ long_description: str = "A cloud platform as a service that enables developers to build, run, and operate applications entirely in the cloud."
@@ -5,6 +5,8 @@ from typing import List, Dict
5
5
  class Hetzner(BaseProvider):
6
6
  v2fly_company: str = "hetzner"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "Hetzner"
9
+ long_description: str = "A German cloud hosting provider offering dedicated servers, cloud instances, and storage solutions."
8
10
  # {"org_id": "ORG-HOA1-RIPE", "org_name": "Hetzner Online GmbH", "country": "DE", "asns": [24940,212317,213230,215859]}
9
11
  org_ids: List[str] = [
10
12
  "ORG-HOA1-RIPE",
@@ -6,6 +6,8 @@ class HPE(BaseProvider):
6
6
  # Hewlett Packard Enterprise Development, L.P.
7
7
  v2fly_company: str = "hpe"
8
8
  tags: List[str] = ["cloud"]
9
+ short_description: str = "Hewlett Packard Enterprise"
10
+ long_description: str = "A multinational enterprise information technology company that provides servers, storage, networking, and cloud services."
9
11
  # {"org_id": "HPE-15-ARIN", "org_name": "HEWLETT PACKARD ENTERPRISE COMPANY", "country": "US", "asns": [157,1033,1034,13481,20096,22149,25867,27510,40617,395714,395992,396063,397363,397957,398199,399185,399610,400054,400624,400737,400763]}
10
12
  org_ids: List[str] = [
11
13
  "HPE-15-ARIN",
@@ -5,6 +5,8 @@ from typing import List
5
5
  class Huawei(BaseProvider):
6
6
  v2fly_company: str = "huawei"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "Huawei"
9
+ long_description: str = "A Chinese multinational technology corporation that designs, develops, and sells telecommunications equipment, consumer electronics, and cloud services."
8
10
  # {"org_id": "ORG-HIPL2-AP-APNIC", "org_name": "HUAWEI INTERNATIONAL PTE. LTD.", "country": "SG", "asns": [131444,136907,141180,149167,151610]}
9
11
  # {"org_id": "ORG-HT57-RIPE", "org_name": "HUAWEI TECHNOLOGIES(UK)CO.,LTD", "country": "GB", "asns": [206798]}
10
12
  # {"org_id": "ORG-HT61-RIPE", "org_name": "Huawei Tech(UAE)FZ-LLC", "country": "AE", "asns": [206204]}
@@ -5,6 +5,8 @@ from typing import List
5
5
  class IBM(BaseProvider):
6
6
  v2fly_company: str = "ibm"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "IBM"
9
+ long_description: str = "A multinational technology corporation that provides hardware, software, cloud computing, and consulting services."
8
10
  # {"org_id": "AWDIC-ARIN", "org_name": "Advanced Workstations Division, IBM Corporation", "country": "US", "asns": [706]}
9
11
  # {"org_id": "IAD-7-ARIN", "org_name": "IBM AS/400 Division", "country": "US", "asns": [10337]}
10
12
  # {"org_id": "IBM-1-ARIN", "org_name": "IBM", "country": "US", "asns": [763,10676,12237,15293,17390,18703,19152,19604,19898,22722,23145,23257,26543,27477,27530,29834,393850,395473]}
@@ -3,12 +3,15 @@ from typing import List
3
3
 
4
4
 
5
5
  class Imperva(BaseProvider):
6
- v2fly_company: str = ""
7
6
  domains: List[str] = ["imperva.com"]
8
7
  tags: List[str] = ["waf"]
8
+ short_description: str = "Imperva"
9
+ long_description: str = "A cybersecurity company that provides web application firewall, DDoS protection, and data security solutions."
9
10
  # {"org_id": "IMPER-62-ARIN", "org_name": "IMPERVA INC", "country": "US", "asns": [62571]}
11
+ # {"org_id": "INCAP-5-ARIN", "org_name": "Incapsula Inc", "country": "US", "asns": [14960,19551]}
10
12
  org_ids: List[str] = [
11
13
  "IMPER-62-ARIN",
14
+ "INCAP-5-ARIN",
12
15
  ]
13
16
 
14
17
  _ips_url = "https://my.imperva.com/api/integration/v1/ips"
@@ -4,6 +4,8 @@ from typing import List
4
4
 
5
5
  class Kamatera(BaseProvider):
6
6
  tags: List[str] = ["cloud"]
7
+ short_description: str = "Kamatera"
8
+ long_description: str = "A cloud infrastructure provider offering virtual private servers, cloud servers, and managed cloud services."
7
9
  # {"org_id": "KAMAT-ARIN", "org_name": "Kamatera, Inc.", "country": "US", "asns": [36007,54913,396948,396949]}
8
10
  # {"org_id": "ORG-KI35-RIPE", "org_name": "Kamatera Inc", "country": "US", "asns": [41436,204548,210329,215728]}
9
11
  # {"org_id": "ORG-KI4-AP-APNIC", "org_name": "Kamatera, Inc.", "country": "US", "asns": [64022]}
@@ -0,0 +1,32 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class Leaseweb(BaseProvider):
6
+ tags: List[str] = ["cloud"]
7
+ short_description: str = "Leaseweb"
8
+ long_description: str = "A global hosting and cloud infrastructure provider offering dedicated servers, cloud hosting, and CDN services."
9
+ # {"org_id": "LC-1193-ARIN", "org_name": "Leaseweb Canada Inc.", "country": "CA", "asns": [32613,32804,40699]}
10
+ # {"org_id": "LU-76-ARIN", "org_name": "Leaseweb USA, Inc.", "country": "US", "asns": [7203]}
11
+ # {"org_id": "LU-ARIN", "org_name": "Leaseweb USA, Inc.", "country": "US", "asns": [15003,19148,25847,27411,30633,393886,394380,395954,396190,396362]}
12
+ # {"org_id": "ORG-FB8-RIPE", "org_name": "LeaseWeb Network B.V.", "country": "NL", "asns": [16265,38930,60626,202134,203774,203928]}
13
+ # {"org_id": "ORG-LAPL4-AP-APNIC", "org_name": "LEASEWEB AUSTRALIA PTY LIMITED", "country": "AU", "asns": [136988]}
14
+ # {"org_id": "ORG-LAPP1-AP-APNIC", "org_name": "LEASEWEB SINGAPORE PTE. LTD.", "country": "SG", "asns": [59253]}
15
+ # {"org_id": "ORG-LHKL5-AP-APNIC", "org_name": "LEASEWEB HONG KONG LIMITED", "country": "HK", "asns": [133752]}
16
+ # {"org_id": "ORG-LJK1-AP-APNIC", "org_name": "Leaseweb Japan K.K.", "country": "JP", "asns": [134351]}
17
+ # {"org_id": "ORG-LUL9-RIPE", "org_name": "Leaseweb UK Limited", "country": "GB", "asns": [205544]}
18
+ # {"org_id": "ORG-NA8-RIPE", "org_name": "Leaseweb Deutschland GmbH", "country": "DE", "asns": [28753]}
19
+ # {"org_id": "ORG-OB3-RIPE", "org_name": "LeaseWeb Netherlands B.V.", "country": "NL", "asns": [60781]}
20
+ org_ids: List[str] = [
21
+ "LC-1193-ARIN",
22
+ "LU-76-ARIN",
23
+ "LU-ARIN",
24
+ "ORG-FB8-RIPE",
25
+ "ORG-LAPL4-AP-APNIC",
26
+ "ORG-LAPP1-AP-APNIC",
27
+ "ORG-LHKL5-AP-APNIC",
28
+ "ORG-LJK1-AP-APNIC",
29
+ "ORG-LUL9-RIPE",
30
+ "ORG-NA8-RIPE",
31
+ "ORG-OB3-RIPE",
32
+ ]
@@ -2,9 +2,11 @@ from cloudcheck.providers.base import BaseProvider
2
2
  from typing import List, Dict
3
3
 
4
4
 
5
- class Azure(BaseProvider):
6
- v2fly_company: str = "azure"
5
+ class Microsoft(BaseProvider):
6
+ v2fly_company: str = "microsoft"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "Microsoft"
9
+ long_description: str = "A multinational technology corporation that develops, manufactures, licenses, supports and sells computer software, consumer electronics and personal computers. Known for products like Windows, Office, Azure cloud services, and Xbox."
8
10
  # {"org_id": "MSFT-ARIN", "org_name": "Microsoft Corporation", "country": "US", "asns": [3598,5761,6182,6194,6291,6584,8068,8069,8070,8071,8072,8073,8074,8075,12076,13399,13811,14719,14783,17144,17345,20046,22692,23468,25796,26222,30135,30520,30575,31792,32476,36006,40066,46182,54396,63245,63314,395496,395524,395851,396463,397096,397466,397996,398575,398656,398657,398658,398659,398660,398661,398961,400572,400573,400574,400575,400576,400577,400578,400579,400580,400581,400582,400884]}
9
11
  # {"org_id": "ORG-MA42-RIPE", "org_name": "Microsoft Limited", "country": "GB", "asns": [35106]}
10
12
  # {"org_id": "ORG-MDMG3-RIPE", "org_name": "Microsoft Deutschland MCIO GmbH", "country": "DE", "asns": [200517]}
@@ -5,6 +5,8 @@ from typing import List
5
5
  class Oracle(BaseProvider):
6
6
  v2fly_company: str = "oracle"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "Oracle"
9
+ long_description: str = "A multinational technology corporation that provides database software, cloud engineering systems, and enterprise software products."
8
10
  # {"org_id": "ORACLE-4-ARIN", "org_name": "Oracle Corporation", "country": "US", "asns": [90,1630,3457,4184,4191,4192,6142,7160,10884,11049,11479,11506,11625,11887,13832,14506,14544,14919,15135,15179,18837,18916,20037,20054,22435,29976,31898,31925,33517,36282,40921,46403,46558,54253,63295,393218,393314,393676,393773,395010,395738,399966,401341]}
9
11
  # {"org_id": "ORACLE-4-Z-ARIN", "org_name": "Oracle Corporation", "country": "US", "asns": [792,793,794,1215,1216,1217,1218,1219]}
10
12
  # {"org_id": "ORG-OAI2-RIPE", "org_name": "Oracle America Inc.", "country": "US", "asns": [34135]}
@@ -4,6 +4,8 @@ from typing import List
4
4
 
5
5
  class OVH(BaseProvider):
6
6
  tags: List[str] = ["cloud"]
7
+ short_description: str = "OVHcloud"
8
+ long_description: str = "A French cloud computing company that provides web hosting, dedicated servers, and cloud infrastructure services."
7
9
  # {"org_id": "ORG-OS3-RIPE", "org_name": "OVH SAS", "country": "FR", "asns": [16276,35540]}
8
10
  org_ids: List[str] = [
9
11
  "ORG-OS3-RIPE",
@@ -0,0 +1,16 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class Qrator(BaseProvider):
6
+ tags: List[str] = ["cdn"]
7
+ short_description: str = "Qrator"
8
+ long_description: str = (
9
+ "A DDoS protection and content delivery network service provider."
10
+ )
11
+ # {"org_id": "ORG-QLCS1-RIPE", "org_name": "Qrator Labs CZ s.r.o.", "country": "CZ", "asns": [200449,209671]}
12
+ # {"org_id": "ORG-QTF1-RIPE", "org_name": "Qrator Technologies FZ-LLC", "country": "AE", "asns": [211112]}
13
+ org_ids: List[str] = [
14
+ "ORG-QLCS1-RIPE",
15
+ "ORG-QTF1-RIPE",
16
+ ]
@@ -0,0 +1,38 @@
1
+ import ipaddress
2
+ from cloudcheck.providers.base import BaseProvider
3
+ from typing import List
4
+
5
+
6
+ class Quiccloud(BaseProvider):
7
+ v2fly_company: str = ""
8
+ tags: List[str] = ["cdn"]
9
+ short_description: str = "Quic.cloud"
10
+ long_description: str = (
11
+ "A content delivery network and edge computing platform providing CDN services."
12
+ )
13
+ # {"org_id": "QC-329-ARIN", "org_name": "QUIC CLOUD INC.", "country": "US", "asns": [26116]}
14
+ org_ids: List[str] = [
15
+ "QC-329-ARIN",
16
+ ]
17
+
18
+ _ips_url = "https://quic.cloud/ips"
19
+
20
+ def fetch_cidrs(self):
21
+ response = self.request(self._ips_url)
22
+ ranges = set()
23
+ if getattr(response, "status_code", 0) == 200:
24
+ text = response.text
25
+ # Strip HTML tags
26
+ text = (
27
+ text.replace("<br>", " ").replace("<br/>", " ").replace("<br />", " ")
28
+ )
29
+ # Split by whitespace
30
+ for token in text.split():
31
+ token = token.strip()
32
+ if token:
33
+ try:
34
+ ipaddress.ip_network(token, strict=False)
35
+ ranges.add(token)
36
+ except ValueError:
37
+ pass
38
+ return list(ranges)
@@ -4,6 +4,8 @@ from typing import List
4
4
 
5
5
  class Rackspace(BaseProvider):
6
6
  tags: List[str] = ["cloud"]
7
+ short_description: str = "Rackspace"
8
+ long_description: str = "A managed cloud computing company that provides hosting, cloud services, and managed infrastructure solutions."
7
9
  # {"org_id": "ORG-BEN1-RIPE", "org_name": "D-hosting die Rackspace & Connectivity GmbH", "country": "DE", "asns": [44716]}
8
10
  # {"org_id": "ORG-RA33-RIPE", "org_name": "Rackspace Ltd.", "country": "GB", "asns": [15395,39921,44009]}
9
11
  # {"org_id": "ORG-RGG2-RIPE", "org_name": "Rackspace Germany GmbH", "country": "DE", "asns": [213735,213740]}
@@ -0,0 +1,13 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class RUFSO(BaseProvider):
6
+ """Russian Federal Security Service"""
7
+
8
+ tags: List[str] = ["gov"]
9
+ short_description: str = "Russian Federal Security Service"
10
+ long_description: str = "A Russian federal executive body responsible for counterintelligence, internal and border security, counterterrorism, and surveillance."
11
+ org_ids: List[str] = [
12
+ "ORG-TFGS1-RIPE",
13
+ ]
@@ -5,6 +5,8 @@ from typing import List
5
5
  class Salesforce(BaseProvider):
6
6
  v2fly_company: str = "salesforce"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "Salesforce"
9
+ long_description: str = "A cloud-based software company that provides customer relationship management services and enterprise cloud computing solutions."
8
10
  # {"org_id": "ORG-SI12-AP-APNIC", "org_name": "SalesForce.com, Inc.", "country": "US", "asns": [45422,133869,133942]}
9
11
  # {"org_id": "SALES-44-ARIN", "org_name": "Salesforce, Inc.", "country": "US", "asns": [393517,396417]}
10
12
  # {"org_id": "SALESF-3-ARIN", "org_name": "Salesforce.com, Inc.", "country": "US", "asns": [14340,22606,32542,32870,394808]}
@@ -4,6 +4,8 @@ from typing import List
4
4
 
5
5
  class Scaleway(BaseProvider):
6
6
  tags: List[str] = ["cloud"]
7
+ short_description: str = "Scaleway"
8
+ long_description: str = "A French cloud computing company that provides virtual private servers, bare metal servers, and cloud infrastructure services."
7
9
  # {"org_id": "ORG-TT1-RIPE", "org_name": "SCALEWAY S.A.S.", "country": "FR", "asns": [12876,29447,202023]}
8
10
  # {"org_id": "SUC-48-ARIN", "org_name": "SCALEWAY US CORPORATION", "country": "US", "asns": [54265]}
9
11
  org_ids: List[str] = [
@@ -0,0 +1,14 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class Stormwall(BaseProvider):
6
+ tags: List[str] = ["cdn"]
7
+ short_description: str = "StormWall"
8
+ long_description: str = (
9
+ "A DDoS protection and web application firewall service provider."
10
+ )
11
+ # {"org_id": "ORG-SS933-RIPE", "org_name": "StormWall s.r.o.", "country": "SK", "asns": [51558,59796]}
12
+ org_ids: List[str] = [
13
+ "ORG-SS933-RIPE",
14
+ ]
@@ -0,0 +1,14 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class Sucuri(BaseProvider):
6
+ tags: List[str] = ["waf"]
7
+ short_description: str = "Sucuri"
8
+ long_description: str = (
9
+ "A website security and web application firewall service provider."
10
+ )
11
+ # {"org_id": "SUCUR-2-ARIN", "org_name": "Sucuri", "country": "US", "asns": [30148]}
12
+ org_ids: List[str] = [
13
+ "SUCUR-2-ARIN",
14
+ ]
@@ -5,6 +5,8 @@ from typing import List
5
5
  class Tencent(BaseProvider):
6
6
  v2fly_company: str = "tencent"
7
7
  tags: List[str] = ["cloud"]
8
+ short_description: str = "Tencent Cloud"
9
+ long_description: str = "A Chinese cloud computing service provider and subsidiary of Tencent, offering cloud infrastructure and platform services."
8
10
  # {"org_id": "ORG-STCS1-AP-APNIC", "org_name": "Shenzhen Tencent Computer Systems Company Limited", "country": "CN", "asns": [132203,132591]}
9
11
  # {"org_id": "ORG-TCCC1-AP-APNIC", "org_name": "Tencent Cloud Computing (Beijing) Co., Ltd", "country": "CN", "asns": [133478]}
10
12
  # {"org_id": "ORG-TCL14-AP-APNIC", "org_name": "Tencent (Thailand) Company Limited", "country": "TH", "asns": [137876]}
@@ -0,0 +1,16 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class UKMoD(BaseProvider):
6
+ """United Kingdom Ministry of Defense"""
7
+
8
+ tags: List[str] = ["gov"]
9
+ short_description: str = "United Kingdom Ministry of Defence"
10
+ long_description: str = "A U.K. government department responsible for implementing the defence policy of the United Kingdom and managing the British Armed Forces."
11
+ org_ids: List[str] = [
12
+ "ORG-DMOD1-RIPE",
13
+ ]
14
+ domains: List[str] = [
15
+ "gov.uk",
16
+ ]
@@ -4,6 +4,8 @@ from typing import List
4
4
 
5
5
  class Wasabi(BaseProvider):
6
6
  tags: List[str] = ["cloud"]
7
+ short_description: str = "Wasabi"
8
+ long_description: str = "A cloud storage provider offering hot cloud storage services with high performance and low cost."
7
9
  # {"org_id": "BLUEA-2-ARIN", "org_name": "Wasabi Technologies, Inc.", "country": "US", "asns": [395717]}
8
10
  # {"org_id": "ORG-WTI2-AP-APNIC", "org_name": "Wasabi Technologies Inc.", "country": "US", "asns": [140642]}
9
11
  org_ids: List[str] = [
@@ -0,0 +1,14 @@
1
+ from cloudcheck.providers.base import BaseProvider
2
+ from typing import List
3
+
4
+
5
+ class X4b(BaseProvider):
6
+ tags: List[str] = ["cdn"]
7
+ short_description: str = "X4B"
8
+ long_description: str = (
9
+ "A DDoS protection and content delivery network service provider."
10
+ )
11
+ # {"org_id": "ORG-XA1-AP-APNIC", "org_name": "X4B", "country": "AU", "asns": [136165]}
12
+ org_ids: List[str] = [
13
+ "ORG-XA1-AP-APNIC",
14
+ ]
@@ -4,6 +4,8 @@ from typing import List
4
4
 
5
5
  class Zoho(BaseProvider):
6
6
  v2fly_company: str = "zoho"
7
+ short_description: str = "Zoho"
8
+ long_description: str = "An Indian software company that provides cloud-based business software and productivity tools including CRM, email, and office suites."
7
9
  # {"org_id": "ORG-ZCB1-RIPE", "org_name": "ZOHO Corporation B.V", "country": "NL", "asns": [205111]}
8
10
  # {"org_id": "ORG-ZCPL1-AP-APNIC", "org_name": "ZOHO Corporation Private Limited", "country": "IN", "asns": [56201]}
9
11
  # {"org_id": "ORG-ZCPL2-AP-APNIC", "org_name": "Zoho Corporation PTY LTD", "country": "AU", "asns": [139006]}
@@ -0,0 +1,175 @@
1
+ Metadata-Version: 2.4
2
+ Name: cloudcheck
3
+ Version: 8.6.1
4
+ Summary: Detailed database of cloud providers. Instantly look up a domain or IP address
5
+ Requires-Python: >=3.9
6
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
7
+
8
+ # CloudCheck
9
+
10
+ [![Python Version](https://img.shields.io/badge/python-3.9+-blue)](https://www.python.org)
11
+ [![PyPI](https://img.shields.io/pypi/v/cloudcheck)](https://pypi.org/project/cloudcheck/)
12
+ [![Rust Version](https://img.shields.io/badge/rust-1.70+-orange)](https://www.rust-lang.org)
13
+ [![Crates.io](https://img.shields.io/crates/v/cloudcheck?color=orange)](https://crates.io/crates/cloudcheck)
14
+ [![License](https://img.shields.io/badge/license-GPLv3-blue.svg)](https://github.com/blacklanternsecurity/cloudcheck/blob/stable/LICENSE)
15
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
16
+ [![Rust Tests](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/rust-tests.yml/badge.svg?branch=stable)](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/rust-tests.yml)
17
+ [![Python Tests](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/python-tests.yml/badge.svg?branch=stable)](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/python-tests.yml)
18
+ [![Pipeline Tests](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/pipeline-tests.yml/badge.svg?branch=stable)](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/pipeline-tests.yml)
19
+
20
+ ### UPDATE 12-2025: Now supports government agencies (DoD, FBI, UK MoD, RU FSO)!
21
+
22
+ ### UPDATE 12-2025: Now rewritten in Rust!
23
+
24
+ CloudCheck is a simple Rust tool to check whether an IP address or hostname belongs to a cloud provider. It includes:
25
+
26
+ - A Rust CLI
27
+ - A Rust library
28
+ - Python bindings
29
+
30
+ ## Cloud Provider Signatures
31
+
32
+ The latest cloud provider signatures are available in [`cloud_providers_v2.json`](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloud_providers_v2.json), which is updated daily via CI/CD. Domains associated with each cloud provider are fetched dynamically from the [v2fly community repository](https://github.com/v2fly/domain-list-community), and CIDRs are fetched from [ASNDB](https://asndb.api.bbot.io/).
33
+
34
+ Used by [BBOT](https://github.com/blacklanternsecurity/bbot) and [BBOT Server](https://github.com/blacklanternsecurity/bbot-server).
35
+
36
+ ## CLI Usage
37
+
38
+ ```bash
39
+ # installation
40
+ cargo install cloudcheck
41
+
42
+ # usage
43
+ cloudcheck 8.8.8.8
44
+ # output:
45
+ {
46
+ "name": "Google",
47
+ "tags": [
48
+ "cloud"
49
+ ]
50
+ }
51
+
52
+ cloudcheck asdf.amazon.com
53
+ # output:
54
+ {
55
+ "name": "Amazon",
56
+ "tags": [
57
+ "cloud"
58
+ ]
59
+ }
60
+ ```
61
+
62
+ ## Python Library Usage
63
+
64
+ ```bash
65
+ # installation
66
+ pip install cloudcheck
67
+ ```
68
+
69
+ ```python
70
+ import asyncio
71
+ from cloudcheck import CloudCheck
72
+
73
+ async def main():
74
+ cloudcheck = CloudCheck()
75
+ results = await cloudcheck.lookup("8.8.8.8")
76
+ print(results) # [{'name': 'Google', 'tags': ['cloud']}]
77
+
78
+ asyncio.run(main())
79
+ ```
80
+
81
+ ## Rust Library Usage
82
+
83
+ ```toml
84
+ # Add to Cargo.toml
85
+ [dependencies]
86
+ cloudcheck = "8.0"
87
+ tokio = { version = "1", features = ["full"] }
88
+ ```
89
+
90
+ ```rust
91
+ use cloudcheck::CloudCheck;
92
+
93
+ #[tokio::main]
94
+ async fn main() {
95
+ let cloudcheck = CloudCheck::new();
96
+ let results = cloudcheck.lookup("8.8.8.8").await.unwrap();
97
+ println!("{:?}", results); // [CloudProvider { name: "Google", tags: ["cloud"] }]
98
+ }
99
+ ```
100
+
101
+ ## Update the JSON database
102
+
103
+ ```bash
104
+ export BBOT_IO_API_KEY=<your-api-key>
105
+
106
+ uv sync
107
+ uv run cloudcheck_update/cli.py
108
+ ```
109
+
110
+ ## Adding a new cloud provider
111
+
112
+ When adding a new cloud provider:
113
+
114
+ 1. Create a new file in the `cloudcheck/providers` directory and name it whatever you want, e.g. `amazon.py`.
115
+ 2. Inside that file, create a new class that inherits from `BaseProvider`.
116
+ 3. Inside that class, fill out any of the following attributes that are relevant to your provider:
117
+ - `v2fly_company`: The company name for v2fly domain fetching. This will dynamically fetch domains from the v2fly community repository, whose purpose is to keep track of domain ownership across different companies.
118
+ - `org_ids`: A list of organization IDs from ASNDB. These are always preferable to hard-coded ASNs or CIDRs, since they are updated daily from live sources. Big companies like Amazon typically have one organization ID per Regional Internet Registries (ARIN, RIPE, APNIC, LACNIC, AFRINIC), and within that organization ID, they may have multiple ASNs.
119
+ - `asns`: A list of ASNs, e.g. `[12345, 67890]`
120
+ - `cidrs`: A list of CIDRs, e.g. `["1.2.3.4/32", "5.6.7.8/32"]` (it's always preferred to use `org_ids` or if necessary `asns` over manually-specified CIDRs)
121
+ - `domains`: A list of domains, e.g. `["amazon.com", "amazon.co.uk"]` (it's always preferred to use `v2fly_company` instead of hard-coding domains)
122
+ - `tags`: A list of tags for the provider. These are used in BBOT to tag IPs, DNS names etc. that match this provider. Examples: `cloud`, `cdn`, `waf`, etc.
123
+ - `regexes`: A dictionary of regexes for the provider. These are used in BBOT to extract / validate cloud resources like storage buckets. Currently valid regexes are:
124
+ - `STORAGE_BUCKET_NAME`: A regex for the name of a storage bucket (useful when brute-forcing bucket names, as you can discard invalid bucket names early).
125
+ - `STORAGE_BUCKET_HOSTNAME`: A regex for the hostname of a storage bucket
126
+
127
+ In addition to the above attributes, if you have a custom source of CIDRs or domains, you can override the `fetch_cidrs()` or `fetch_domains()` methods (which by default return an empty list) to go fetch your custom TXT/JSON file, etc.
128
+
129
+ <!--PROVIDERTABLE-->
130
+ ## Cloud Providers (41)
131
+
132
+ | Name | Description | Tags | Domains | Subnets |
133
+ |------|-------------|------|---------|----------|
134
+ | Akamai | A content delivery network and cloud services provider that delivers web and internet security services. | cloud | 81 | 6376 |
135
+ | Alibaba Cloud | A Chinese cloud computing company and subsidiary of Alibaba Group, providing cloud services and infrastructure. | cloud | 394 | 81 |
136
+ | Amazon Web Services | A comprehensive cloud computing platform provided by Amazon, offering infrastructure services, storage, and computing power. | cloud | 231 | 14090 |
137
+ | Arvancloud | An Iranian cloud computing and content delivery network provider offering cloud infrastructure and CDN services. | cdn | 1 | 20 |
138
+ | Backblaze | A cloud storage and backup service provider offering data backup and cloud storage solutions. | cloud | 2 | 26 |
139
+ | CacheFly | A content delivery network provider offering global CDN services. | cdn | 0 | 23 |
140
+ | Cisco | A multinational technology corporation that designs, manufactures, and sells networking hardware, software, and telecommunications equipment. | cloud | 121 | 629 |
141
+ | Cloudflare | A web infrastructure and security company providing content delivery network services, DDoS mitigation, and web security solutions. | cdn | 60 | 2674 |
142
+ | Amazon CloudFront | A content delivery network service provided by Amazon Web Services that delivers data, videos, applications, and APIs to customers globally. | cdn | 0 | 172 |
143
+ | DDoS Guard | A DDoS protection and content delivery network service provider. | cdn | 0 | 19 |
144
+ | Dell | A multinational technology company that develops, sells, repairs, and supports computers and related products and services. | cloud | 236 | 104 |
145
+ | DigitalOcean | A cloud infrastructure provider offering virtual private servers, managed databases, and other cloud services for developers and businesses. | cloud | 4 | 265 |
146
+ | Department of Defense | A U.S. government agency responsible for coordinating and supervising all agencies and functions of the government directly related to national security and the United States Armed Forces. | gov | 3 | 9226 |
147
+ | Federal Bureau of Investigation | A U.S. government agency that serves as the domestic intelligence and security service, responsible for investigating federal crimes and protecting national security. | gov | 3 | 21 |
148
+ | Fastly | A content delivery network and edge cloud platform that provides edge computing, security, and performance services. | cdn | 8 | 1026 |
149
+ | GitHub | A web-based platform for version control and collaboration using Git, providing hosting for software development and code repositories. | cdn | 33 | 4277 |
150
+ | Google Cloud | A suite of cloud computing services provided by Google, including infrastructure, platform, and software services for businesses and developers. | cloud | 1095 | 1863 |
151
+ | Hewlett Packard Enterprise | A multinational enterprise information technology company that provides servers, storage, networking, and cloud services. | cloud | 16 | 38 |
152
+ | Heroku | A cloud platform as a service that enables developers to build, run, and operate applications entirely in the cloud. | cloud | 12 | 0 |
153
+ | Hetzner | A German cloud hosting provider offering dedicated servers, cloud instances, and storage solutions. | cloud | 14 | 126 |
154
+ | Huawei | A Chinese multinational technology corporation that designs, develops, and sells telecommunications equipment, consumer electronics, and cloud services. | cloud | 338 | 270 |
155
+ | IBM | A multinational technology corporation that provides hardware, software, cloud computing, and consulting services. | cloud | 20 | 394 |
156
+ | Imperva | A cybersecurity company that provides web application firewall, DDoS protection, and data security solutions. | waf | 1 | 23 |
157
+ | Kamatera | A cloud infrastructure provider offering virtual private servers, cloud servers, and managed cloud services. | cloud | 1 | 163 |
158
+ | Leaseweb | A global hosting and cloud infrastructure provider offering dedicated servers, cloud hosting, and CDN services. | cloud | 0 | 1487 |
159
+ | Microsoft | A multinational technology corporation that develops, manufactures, licenses, supports and sells computer software, consumer electronics and personal computers. Known for products like Windows, Office, Azure cloud services, and Xbox. | cloud | 689 | 2452 |
160
+ | OVHcloud | A French cloud computing company that provides web hosting, dedicated servers, and cloud infrastructure services. | cloud | 3 | 517 |
161
+ | Oracle | A multinational technology corporation that provides database software, cloud engineering systems, and enterprise software products. | cloud | 18 | 2329 |
162
+ | Qrator | A DDoS protection and content delivery network service provider. | cdn | 0 | 19 |
163
+ | Quic.cloud | A content delivery network and edge computing platform providing CDN services. | cdn | 0 | 151 |
164
+ | Russian Federal Security Service | A Russian federal executive body responsible for counterintelligence, internal and border security, counterterrorism, and surveillance. | gov | 0 | 17 |
165
+ | Rackspace | A managed cloud computing company that provides hosting, cloud services, and managed infrastructure solutions. | cloud | 1 | 199 |
166
+ | Salesforce | A cloud-based software company that provides customer relationship management services and enterprise cloud computing solutions. | cloud | 39 | 48 |
167
+ | Scaleway | A French cloud computing company that provides virtual private servers, bare metal servers, and cloud infrastructure services. | cloud | 1 | 40 |
168
+ | StormWall | A DDoS protection and web application firewall service provider. | cdn | 0 | 20 |
169
+ | Sucuri | A website security and web application firewall service provider. | waf | 0 | 16 |
170
+ | Tencent Cloud | A Chinese cloud computing service provider and subsidiary of Tencent, offering cloud infrastructure and platform services. | cloud | 580 | 368 |
171
+ | United Kingdom Ministry of Defence | A U.K. government department responsible for implementing the defence policy of the United Kingdom and managing the British Armed Forces. | gov | 1 | 0 |
172
+ | Wasabi | A cloud storage provider offering hot cloud storage services with high performance and low cost. | cloud | 1 | 20 |
173
+ | X4B | A DDoS protection and content delivery network service provider. | cdn | 0 | 3 |
174
+ | Zoho | An Indian software company that provides cloud-based business software and productivity tools including CRM, email, and office suites. | cloud | 13 | 91 |
175
+ <!--ENDPROVIDERTABLE-->
@@ -0,0 +1,49 @@
1
+ cloudcheck-8.6.1.dist-info/METADATA,sha256=aG_IZP-BGxR_mANtf7j_jJC_l9ObGTfOSFPi6Nr5XQ0,12153
2
+ cloudcheck-8.6.1.dist-info/WHEEL,sha256=r3Re1LyxSX0vTMvaekQJYIADPZ3YvOvqupg0m4KOsyk,149
3
+ cloudcheck/__init__.py,sha256=Bhl6yAlOs8SFIL9Qw-EX8QGeHWeKfo7_IyXOeAefMgU,61
4
+ cloudcheck/cloudcheck.cpython-312-powerpc64le-linux-gnu.so,sha256=y9op91QdrYtM7so5HzstjJjL5uR0yX8TOUezwYJZ3sg,11237128
5
+ cloudcheck/helpers.py,sha256=WQElEwBVpClsdDPXtA8ru-z4g2xubw1-0MpIvslSHvU,7635
6
+ cloudcheck/providers/__init__.py,sha256=CeokJETwsKYZUlArE723UTPtize7OJ799YLPcyIv3z0,1651
7
+ cloudcheck/providers/akamai.py,sha256=Czph3Sfo0uq6YCMDpi6WVZf9qJV3bZcmLenonrxnVMk,1822
8
+ cloudcheck/providers/alibaba.py,sha256=kN_HgkfmeVZGMxo-bOHthObdokWx-R-0K7OFmQ4iSII,554
9
+ cloudcheck/providers/amazon.py,sha256=5r8psEU4PJPa7PpPFi2B2X5MWAD1Bdi9jOyybElaYOc,1845
10
+ cloudcheck/providers/arvancloud.py,sha256=PeFy02lcOdWE8fWv3eq11al3e0ZaQ6FPSQffPWqL_eI,851
11
+ cloudcheck/providers/backblaze.py,sha256=xX6kxi2oLj-VCtMGQkbXRU7bYkT-wYkE-M-_c6BqReA,527
12
+ cloudcheck/providers/base.py,sha256=-AEaV3AU4Nqsvj_UKGDaP0TWn6gOKD2P5S0oAgwGWEc,10292
13
+ cloudcheck/providers/cachefly.py,sha256=YCq4EyUOiMpkdi_d16I8398Il3JI-FTtDv1g3LcWHVE,860
14
+ cloudcheck/providers/cisco.py,sha256=IaJIpyor35pq0TZP2S0tMVBF3yjJ-nebwNak-nVhXQ0,2434
15
+ cloudcheck/providers/cloudflare.py,sha256=G0fxIIGB_sz8Dzg8G4XFU3HjRZl0kpekL37Gf8AUBgE,1984
16
+ cloudcheck/providers/cloudfront.py,sha256=4_4D8GJPtATaNZyYxTIGVSGwSuC8OJLiNHy1e2NA9yk,804
17
+ cloudcheck/providers/ddosguard.py,sha256=xwM1ayJkUeD7SZnbS6Iwa9Ud6U64i_D0lpzcv7VypJA,461
18
+ cloudcheck/providers/dell.py,sha256=FjfrvUSFeZpIaYLipKVU9Pd_aFBBFw-1hNaAkpGS2RY,584
19
+ cloudcheck/providers/digitalocean.py,sha256=lZsSB2lXr0ggw_exdPb9PLazhcgs-Q2nh6tvmZ1PqCY,1271
20
+ cloudcheck/providers/dod.py,sha256=WTA1AGNBVFfJ7TousuUtpl5R-b-lKT9CI7oJZX54q7g,1358
21
+ cloudcheck/providers/fastly.py,sha256=0SZBmthVvh11Jdkc9xZgHQ6XMTPoPxFm1niK3HDHyeY,881
22
+ cloudcheck/providers/fbi.py,sha256=SFWfi9Ll9vQYlEpZX7uGXO6GrZZJWYmehiZ1IXKMrr0,633
23
+ cloudcheck/providers/github.py,sha256=h-ESNNl1tQXSO8q_HswME4x8h-Qu9O-h7d4Z7FpyUOI,1036
24
+ cloudcheck/providers/google.py,sha256=KkkQEFwXN8xTxy4h7t1O8JNBcVIJx6UXMYw4n-ZU21Q,3427
25
+ cloudcheck/providers/heroku.py,sha256=0bRaIP44hWOwEqlHJ9U_vf8I0sAYTy5DRl0gKgg-HIY,356
26
+ cloudcheck/providers/hetzner.py,sha256=MT-d0ylPVcqeHZOBMrO69SF7zaHvYj7MuRaiOhs_U24,810
27
+ cloudcheck/providers/hpe.py,sha256=aiZQK2KzHpG00AFHp6InYVxnRxNYfmcAu_TnRPFqNBo,726
28
+ cloudcheck/providers/huawei.py,sha256=w8996PLDGATXwEZUTGdvygyNAPG4d4lLbgW6WRmzR8M,1024
29
+ cloudcheck/providers/ibm.py,sha256=WqSe6G5KinmUDrUkJRUehcrd_diFexcNKmDsvt2vN-k,3776
30
+ cloudcheck/providers/imperva.py,sha256=oQWCCYJ_A7d2aSl2zjyJkmZtq2N4BGTTfsSW2LD-1xk,1008
31
+ cloudcheck/providers/kamatera.py,sha256=QfjvU3vkQW10BBYtk2kOOZKQ0K7r6Oa5o6e2GKt2Ee8,816
32
+ cloudcheck/providers/leaseweb.py,sha256=aNMq2Z0JkQBJSs7_YGZPsiJShjEmkGxgMVaKZjkBmII,1921
33
+ cloudcheck/providers/microsoft.py,sha256=MHxeRtUs43aIVUECnsFTZdwcbZ55NG4DlfC-KERmqDI,2302
34
+ cloudcheck/providers/oracle.py,sha256=1O0_phByV3t_0cfZsD4mdl5_RlYHbaIlQUtCNX5tKgI,1921
35
+ cloudcheck/providers/ovh.py,sha256=i-GM5bDhHzxHabCoqkmZyp4OSHkSUwdBCmsHLJWULcU,562
36
+ cloudcheck/providers/qrator.py,sha256=5Pnt7oIiRXXgUlJKn2IeBH_sz2JHpIso5Xe5IZ5P6xo,593
37
+ cloudcheck/providers/quiccloud.py,sha256=emSrLrUg_2jiyktVYQ80fdHelZcfk-3-zb4m9V4XhEs,1248
38
+ cloudcheck/providers/rackspace.py,sha256=je_1Ds25Hd70hbsbJP_Ex56n1cX1_3fGPazW_2LWSPY,1174
39
+ cloudcheck/providers/ru_fso.py,sha256=Uok9sD4EeWiBZbaTSKB5EGgAM9byWc0d4GSt_UBvk-g,467
40
+ cloudcheck/providers/salesforce.py,sha256=N-BOrUpIyf62zsMGaK2J-WsLFYyT9MO6uCclP02Snjw,851
41
+ cloudcheck/providers/scaleway.py,sha256=EmS-MobNspdoqHsZQvxgl6j__yXXj7elKet44WcuTx4,689
42
+ cloudcheck/providers/stormwall.py,sha256=PyUsMxJeK0lJMjD-OwA3-N5LBWxuZaNjVKqAislVl3E,456
43
+ cloudcheck/providers/sucuri.py,sha256=LTGNb9f5esF617JnXuT3SyoT0lEAzdK55W8nXwCi_vA,431
44
+ cloudcheck/providers/tencent.py,sha256=2-_JLF2mmraTRKydIqufkcbY8cSmQUglrXbOh8G4yAo,896
45
+ cloudcheck/providers/uk_mod.py,sha256=UEoeQmDiw2tJfOtCEe-e6TWkdCUpUa-rouNZkp0GDSY,524
46
+ cloudcheck/providers/wasabi.py,sha256=MJ1c46qauijwJR8Q1pxk2D4QZ1MXaYR4QHA7tNmGn6U,665
47
+ cloudcheck/providers/x4b.py,sha256=btHtR8QMpAlN9qbK6w6yOTMxeRNIswovmH-VesYxNSI,430
48
+ cloudcheck/providers/zoho.py,sha256=bo_bhd1OP3n_66abQmjIexYiuNQFAQe8VHyJONyv5so,1498
49
+ cloudcheck-8.6.1.dist-info/RECORD,,
@@ -1,157 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: cloudcheck
3
- Version: 8.4.3
4
- Summary: Detailed database of cloud providers. Instantly look up a domain or IP address
5
- Requires-Python: >=3.9
6
- Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
7
-
8
- # CloudCheck
9
-
10
- [![Python Version](https://img.shields.io/badge/python-3.9+-blue)](https://www.python.org)
11
- [![PyPI](https://img.shields.io/pypi/v/cloudcheck)](https://pypi.org/project/cloudcheck/)
12
- [![Rust Version](https://img.shields.io/badge/rust-1.70+-orange)](https://www.rust-lang.org)
13
- [![Crates.io](https://img.shields.io/crates/v/cloudcheck?color=orange)](https://crates.io/crates/cloudcheck)
14
- [![License](https://img.shields.io/badge/license-GPLv3-blue.svg)](https://github.com/blacklanternsecurity/cloudcheck/blob/stable/LICENSE)
15
- [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
16
- [![Rust Tests](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/rust-tests.yml/badge.svg?branch=stable)](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/rust-tests.yml)
17
- [![Python Tests](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/python-tests.yml/badge.svg?branch=stable)](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/python-tests.yml)
18
- [![Pipeline Tests](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/pipeline-tests.yml/badge.svg?branch=stable)](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/pipeline-tests.yml)
19
-
20
- ### UPDATE: Now rewritten in Rust, with [34 supported cloud providers](#supported-cloud-providers)!
21
-
22
- CloudCheck is a simple Rust tool to check whether an IP address or hostname belongs to a cloud provider. It includes:
23
-
24
- - A Rust CLI
25
- - A Rust library
26
- - Python bindings
27
-
28
- ## Cloud Provider Signatures
29
-
30
- The latest cloud provider signatures are available in [`cloud_providers_v2.json`](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloud_providers_v2.json), which is updated daily via CI/CD. Domains associated with each cloud provider are fetched dynamically from the [v2fly community repository](https://github.com/v2fly/domain-list-community), and CIDRs are fetched from [ASNDB](https://asndb.api.bbot.io/).
31
-
32
- Used by [BBOT](https://github.com/blacklanternsecurity/bbot) and [BBOT Server](https://github.com/blacklanternsecurity/bbot-server).
33
-
34
- ## CLI Usage
35
-
36
- ```bash
37
- # installation
38
- cargo install cloudcheck
39
-
40
- # usage
41
- cloudcheck 8.8.8.8
42
- # output:
43
- {
44
- "name": "Google",
45
- "tags": [
46
- "cloud"
47
- ]
48
- }
49
-
50
- cloudcheck asdf.amazon.com
51
- # output:
52
- {
53
- "name": "Amazon",
54
- "tags": [
55
- "cloud"
56
- ]
57
- }
58
- ```
59
-
60
- ## Python Library Usage
61
-
62
- ```bash
63
- # installation
64
- pip install cloudcheck
65
- ```
66
-
67
- ```python
68
- import asyncio
69
- from cloudcheck import CloudCheck
70
-
71
- async def main():
72
- cloudcheck = CloudCheck()
73
- results = await cloudcheck.lookup("8.8.8.8")
74
- print(results) # [{'name': 'Google', 'tags': ['cloud']}]
75
-
76
- asyncio.run(main())
77
- ```
78
-
79
- ## Rust Library Usage
80
-
81
- ```toml
82
- # Add to Cargo.toml
83
- [dependencies]
84
- cloudcheck = "8.0"
85
- tokio = { version = "1", features = ["full"] }
86
- ```
87
-
88
- ```rust
89
- use cloudcheck::CloudCheck;
90
-
91
- #[tokio::main]
92
- async fn main() {
93
- let cloudcheck = CloudCheck::new();
94
- let results = cloudcheck.lookup("8.8.8.8").await.unwrap();
95
- println!("{:?}", results); // [CloudProvider { name: "Google", tags: ["cloud"] }]
96
- }
97
- ```
98
-
99
- ## Update the JSON database
100
-
101
- ```bash
102
- export BBOT_IO_API_KEY=<your-api-key>
103
-
104
- uv sync
105
- uv run cloudcheck_update/cli.py
106
- ```
107
-
108
- ## Adding a new cloud provider
109
-
110
- When adding a new cloud provider:
111
-
112
- 1. Create a new file in the `cloudcheck/providers` directory and name it whatever you want, e.g. `amazon.py`.
113
- 2. Inside that file, create a new class that inherits from `BaseProvider`.
114
- 3. Inside that class, fill out any of the following attributes that are relevant to your provider:
115
- - `v2fly_company`: The company name for v2fly domain fetching. This will dynamically fetch domains from the v2fly community repository, whose purpose is to keep track of domain ownership across different companies.
116
- - `org_ids`: A list of organization IDs from ASNDB. These are always preferable to hard-coded ASNs or CIDRs, since they are updated daily from live sources. Big companies like Amazon typically have one organization ID per Regional Internet Registries (ARIN, RIPE, APNIC, LACNIC, AFRINIC), and within that organization ID, they may have multiple ASNs.
117
- - `asns`: A list of ASNs, e.g. `[12345, 67890]`
118
- - `cidrs`: A list of CIDRs, e.g. `["1.2.3.4/32", "5.6.7.8/32"]` (it's always preferred to use `org_ids` or if necessary `asns` over manually-specified CIDRs)
119
- - `domains`: A list of domains, e.g. `["amazon.com", "amazon.co.uk"]` (it's always preferred to use `v2fly_company` instead of hard-coding domains)
120
- - `tags`: A list of tags for the provider. These are used in BBOT to tag IPs, DNS names etc. that match this provider. Examples: `cloud`, `cdn`, `waf`, etc.
121
- - `regexes`: A dictionary of regexes for the provider. These are used in BBOT to extract / validate cloud resources like storage buckets. Currently valid regexes are:
122
- - `STORAGE_BUCKET_NAME`: A regex for the name of a storage bucket (useful when brute-forcing bucket names, as you can discard invalid bucket names early).
123
- - `STORAGE_BUCKET_HOSTNAME`: A regex for the hostname of a storage bucket
124
-
125
- In addition to the above attributes, if you have a custom source of CIDRs or domains, you can override the `fetch_cidrs()` or `fetch_domains()` methods (which by default return an empty list) to go fetch your custom TXT/JSON file, etc.
126
-
127
- ## Supported cloud providers
128
- - Akamai ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/akamai.py))
129
- - Alibaba ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/alibaba.py))
130
- - Amazon ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/amazon.py))
131
- - Arvancloud ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/arvancloud.py))
132
- - Azure ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/azure.py))
133
- - Backblaze ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/backblaze.py))
134
- - Cisco ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/cisco.py))
135
- - Cloudflare ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/cloudflare.py))
136
- - Cloudfront ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/cloudfront.py))
137
- - Dell ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/dell.py))
138
- - DigitalOcean ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/digitalocean.py))
139
- - Fastly ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/fastly.py))
140
- - GitHub ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/github.py))
141
- - Google ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/google.py))
142
- - Heroku ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/heroku.py))
143
- - Hetzner ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/hetzner.py))
144
- - HPE ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/hpe.py))
145
- - Huawei ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/huawei.py))
146
- - IBM ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/ibm.py))
147
- - Imperva ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/imperva.py))
148
- - Kamatera ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/kamatera.py))
149
- - Oracle Cloud ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/oracle.py))
150
- - OVH ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/ovh.py))
151
- - Rackspace ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/rackspace.py))
152
- - Salesforce ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/salesforce.py))
153
- - Scaleway ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/scaleway.py))
154
- - Tencent ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/tencent.py))
155
- - Wasabi ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/wasabi.py))
156
- - Zoho ([source](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloudcheck/providers/zoho.py))
157
-
@@ -1,37 +0,0 @@
1
- cloudcheck-8.4.3.dist-info/METADATA,sha256=i6TjeTO7xOgom5MM2rxMDtVwvjt4mlBXePSJRV7xkXA,9051
2
- cloudcheck-8.4.3.dist-info/WHEEL,sha256=r3Re1LyxSX0vTMvaekQJYIADPZ3YvOvqupg0m4KOsyk,149
3
- cloudcheck/__init__.py,sha256=Bhl6yAlOs8SFIL9Qw-EX8QGeHWeKfo7_IyXOeAefMgU,61
4
- cloudcheck/cloudcheck.cpython-312-powerpc64le-linux-gnu.so,sha256=aoslN92N_tSEBLinIg8-eIBP_ru708eouAVmwDAc4Zc,11163112
5
- cloudcheck/helpers.py,sha256=WQElEwBVpClsdDPXtA8ru-z4g2xubw1-0MpIvslSHvU,7635
6
- cloudcheck/providers/__init__.py,sha256=rcROp4mie54ZqAOOALUKvRSjA4CA0XISizD6nK6q0H0,1684
7
- cloudcheck/providers/akamai.py,sha256=nKpQLf6QGO6tqOP4J8T_HKpEGNAP4c43qHzSEnocrCg,1649
8
- cloudcheck/providers/alibaba.py,sha256=Mssuy9g2YOmqeOlBgvRZoUUHaIfXn-IdWkQLNkc5Fyg,367
9
- cloudcheck/providers/amazon.py,sha256=8ZdphfLD6fDL37u0jOtvJE9kK74Dah2589ike3AZ0T0,1639
10
- cloudcheck/providers/arvancloud.py,sha256=-yuJRHUhfmB8gTMdbHxfssl4V5jYqX7Qt_iYcWmWtLk,666
11
- cloudcheck/providers/azure.py,sha256=l6Q3lIDogWCh1m4HQuMvuynRsLiLMs6Kv2UfDhdv81U,1989
12
- cloudcheck/providers/backblaze.py,sha256=XmTmhMFM9f2U2VymF0n0qk_-NDXKSwnqLZNCyzf8Fbg,362
13
- cloudcheck/providers/base.py,sha256=cGxjwjE2Raz9L5QPDRdaSdzx84G2Wl5cysGl9qR6PhI,9450
14
- cloudcheck/providers/cisco.py,sha256=Ets6jYmoW7g7ZgxjpudOfSsrVoaPprNOOK-COPsF3Uc,2225
15
- cloudcheck/providers/cloudflare.py,sha256=3mxP5BBKFzUeHJUaMMjwKR06BIPY2vwX-X5lhkqnXMA,1780
16
- cloudcheck/providers/cloudfront.py,sha256=w-EBAU8wdNySNL1AiuHt-mFKBGOrH3lhj6ScrmWl1dk,584
17
- cloudcheck/providers/dell.py,sha256=gtp2R3_stFemSHzMMUIplUwTs40xArI_j9NDynUOq8k,394
18
- cloudcheck/providers/digitalocean.py,sha256=1xvzzL0RJqXHzcvGD139jeYRftmlUQAE50_g16jBGeI,1056
19
- cloudcheck/providers/fastly.py,sha256=IL5QRV0J27fz0uUEsBeaMXMQ_HYtaGIvhtaWNygLCuQ,696
20
- cloudcheck/providers/github.py,sha256=DdljaQEj_aZMHhOSb6rEwsKI3SxwGR0bRUFUo-NTKq4,832
21
- cloudcheck/providers/google.py,sha256=pt_TeEJg1uM0vTyECzecM-h5kF0qBrf1FfNVSX8Z_t0,3208
22
- cloudcheck/providers/heroku.py,sha256=X4wLbrF_8879KABpkUID6JcSQWOhK1_-SZOK-oKn36Y,171
23
- cloudcheck/providers/hetzner.py,sha256=rcQ5rCi6XBX5BDAGPZckEcLP17UkZYcy96hoCVkgzf0,641
24
- cloudcheck/providers/hpe.py,sha256=NvvbaKA1P1_QlYfx-CggPunSQKrBCODlcVTANkdY7sI,516
25
- cloudcheck/providers/huawei.py,sha256=ARD35uTwbKCmsbKNnkW1H0Qr4cm-AhTWG05Wf6r15zI,803
26
- cloudcheck/providers/ibm.py,sha256=xc-h0YgkMchL3Jp2KY57czL8OYZaCADLCIO70hZEcOI,3596
27
- cloudcheck/providers/imperva.py,sha256=_XTihuUbOPB0LkcKSsl3EGqKVQAzJaNZysI7MNYa2jg,731
28
- cloudcheck/providers/kamatera.py,sha256=oVqD2AV96uJ3njwQxFnLOftEtbzKsC5x8IIiqnbomeA,637
29
- cloudcheck/providers/oracle.py,sha256=-950XmemaM-PZuWuttQoYmHDbLm1rF69TD_nGYNoVtw,1720
30
- cloudcheck/providers/ovh.py,sha256=QVEDJ6q75pDnSz_8ohk0UHp3mESb3OqcYCxD9sdR64U,378
31
- cloudcheck/providers/rackspace.py,sha256=mcURK22jLoZbUqT8pXoB1jdJfSskbPeIEOgI3SkyBLI,992
32
- cloudcheck/providers/salesforce.py,sha256=HBxLPHl_X6Fddfb0_xtJgQH7yVxYiaDSsbB0V8ZBT1A,650
33
- cloudcheck/providers/scaleway.py,sha256=iFN1p7K2EkCJanzLlYLmoyNBpnFnHg3EC3gEr9YLO7c,492
34
- cloudcheck/providers/tencent.py,sha256=RMIW1gEwmIKv6fC0EHMtPe6pLxLijEWayAudlrD8oPY,698
35
- cloudcheck/providers/wasabi.py,sha256=MT_n6KSpJpc1otKArvWfBzvJ-YEdHWx2yWsD6SZahu0,500
36
- cloudcheck/providers/zoho.py,sha256=Mz9I_bSp69A43Bw5-GJd_xRTXEt4BVHEF6ofXWD4_wo,1297
37
- cloudcheck-8.4.3.dist-info/RECORD,,