cloudcheck 8.4.0__cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl → 8.6.0__cp314-cp314t-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 (50) hide show
  1. cloudcheck/cloudcheck.cpython-314t-powerpc64le-linux-gnu.so +0 -0
  2. cloudcheck/helpers.py +39 -1
  3. cloudcheck/providers/__init__.py +51 -0
  4. cloudcheck/providers/akamai.py +2 -0
  5. cloudcheck/providers/alibaba.py +2 -0
  6. cloudcheck/providers/amazon.py +2 -0
  7. cloudcheck/providers/arvancloud.py +2 -0
  8. cloudcheck/providers/backblaze.py +2 -0
  9. cloudcheck/providers/base.py +41 -55
  10. cloudcheck/providers/cachefly.py +26 -0
  11. cloudcheck/providers/cisco.py +2 -0
  12. cloudcheck/providers/cloudflare.py +2 -0
  13. cloudcheck/providers/cloudfront.py +2 -0
  14. cloudcheck/providers/ddosguard.py +14 -0
  15. cloudcheck/providers/dell.py +2 -0
  16. cloudcheck/providers/digitalocean.py +2 -0
  17. cloudcheck/providers/dod.py +31 -0
  18. cloudcheck/providers/fastly.py +2 -0
  19. cloudcheck/providers/fbi.py +18 -0
  20. cloudcheck/providers/github.py +2 -0
  21. cloudcheck/providers/google.py +2 -0
  22. cloudcheck/providers/heroku.py +2 -0
  23. cloudcheck/providers/hetzner.py +2 -0
  24. cloudcheck/providers/hpe.py +2 -0
  25. cloudcheck/providers/huawei.py +2 -0
  26. cloudcheck/providers/ibm.py +2 -0
  27. cloudcheck/providers/imperva.py +4 -1
  28. cloudcheck/providers/kamatera.py +2 -0
  29. cloudcheck/providers/leaseweb.py +32 -0
  30. cloudcheck/providers/{azure.py → microsoft.py} +4 -2
  31. cloudcheck/providers/oracle.py +2 -0
  32. cloudcheck/providers/ovh.py +2 -0
  33. cloudcheck/providers/qrator.py +16 -0
  34. cloudcheck/providers/quiccloud.py +38 -0
  35. cloudcheck/providers/rackspace.py +2 -0
  36. cloudcheck/providers/ru_fso.py +13 -0
  37. cloudcheck/providers/salesforce.py +2 -0
  38. cloudcheck/providers/scaleway.py +2 -0
  39. cloudcheck/providers/stormwall.py +14 -0
  40. cloudcheck/providers/sucuri.py +14 -0
  41. cloudcheck/providers/tencent.py +2 -0
  42. cloudcheck/providers/uk_mod.py +16 -0
  43. cloudcheck/providers/wasabi.py +2 -0
  44. cloudcheck/providers/x4b.py +14 -0
  45. cloudcheck/providers/zoho.py +2 -0
  46. cloudcheck-8.6.0.dist-info/METADATA +177 -0
  47. cloudcheck-8.6.0.dist-info/RECORD +49 -0
  48. cloudcheck-8.4.0.dist-info/METADATA +0 -157
  49. cloudcheck-8.4.0.dist-info/RECORD +0 -36
  50. {cloudcheck-8.4.0.dist-info → cloudcheck-8.6.0.dist-info}/WHEEL +0 -0
cloudcheck/helpers.py CHANGED
@@ -1,7 +1,8 @@
1
1
  import ipaddress
2
2
  import os
3
3
  import requests
4
- from typing import List, Union
4
+ from pathlib import Path
5
+ from typing import List, Set, Union
5
6
 
6
7
 
7
8
  def defrag_cidrs(
@@ -209,3 +210,40 @@ def request(url, include_api_key=False, browser_headers=False, **kwargs):
209
210
  headers["Authorization"] = f"Bearer {bbot_io_api_key}"
210
211
  kwargs["headers"] = headers
211
212
  return requests.get(url, **kwargs)
213
+
214
+
215
+ def parse_v2fly_domain_file(file_path: Path) -> Set[str]:
216
+ """Parse a domain list file and extract domains."""
217
+ print(f"Parsing {file_path}")
218
+ domains = set()
219
+ if not file_path.exists():
220
+ print(f"File {file_path} does not exist")
221
+ return domains
222
+
223
+ with open(file_path, "r", encoding="utf-8") as f:
224
+ for line in f:
225
+ line = line.strip()
226
+ # Handle inline comments by splitting on # and taking the first part
227
+ line = line.split("#")[0].strip()
228
+ if not line:
229
+ continue
230
+
231
+ if line.startswith("include:"):
232
+ include_file = line[8:]
233
+ include_path = file_path.parent / include_file
234
+ domains.update(parse_v2fly_domain_file(include_path))
235
+ continue
236
+
237
+ if line.startswith("domain:"):
238
+ domain = line[7:]
239
+ elif line.startswith("full:"):
240
+ domain = line[5:]
241
+ elif line.startswith("keyword:") or line.startswith("regexp:"):
242
+ continue
243
+ else:
244
+ domain = line
245
+
246
+ domain = domain.split("@")[0].strip()
247
+ if domain:
248
+ domains.add(domain.lower())
249
+ return domains
@@ -0,0 +1,51 @@
1
+ import importlib
2
+ from sys import stderr
3
+ from pathlib import Path
4
+ from typing import Dict, Type
5
+
6
+ from cloudcheck.providers.base import BaseProvider
7
+
8
+ # Dictionary to store loaded provider classes
9
+ _provider_classes: Dict[str, Type[BaseProvider]] = {}
10
+ _provider_instances: Dict[str, BaseProvider] = {}
11
+
12
+
13
+ def load_provider_classes() -> Dict[str, Type[BaseProvider]]:
14
+ """Dynamically load all cloud provider classes from the providers directory."""
15
+ global _provider_classes
16
+
17
+ if _provider_classes:
18
+ return _provider_classes
19
+
20
+ providers_path = Path(__file__).parent
21
+
22
+ for file in providers_path.glob("*.py"):
23
+ if file.stem in ("base", "__init__"):
24
+ continue
25
+
26
+ try:
27
+ import_path = f"cloudcheck.providers.{file.stem}"
28
+ module = importlib.import_module(import_path)
29
+
30
+ # Look for classes that inherit from BaseProvider
31
+ for attr_name in dir(module):
32
+ attr = getattr(module, attr_name)
33
+ if (
34
+ isinstance(attr, type)
35
+ and issubclass(attr, BaseProvider)
36
+ and attr != BaseProvider
37
+ ):
38
+ provider_name = attr.__name__
39
+ _provider_classes[provider_name] = attr
40
+
41
+ except Exception as e:
42
+ print(f"Failed to load provider from {file}: {e}", file=stderr)
43
+ raise
44
+
45
+ return _provider_classes
46
+
47
+
48
+ for provider_name, provider_class in load_provider_classes().items():
49
+ provider_instance = provider_class()
50
+ globals()[provider_name] = provider_instance
51
+ _provider_instances[provider_name] = provider_instance
@@ -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,11 +3,12 @@ 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
- from typing import Dict, List, Union, Set
8
+ from typing import Dict, List, Union
8
9
  from pydantic import BaseModel, field_validator, computed_field
9
10
 
10
- from ..helpers import defrag_cidrs, request
11
+ from ..helpers import defrag_cidrs, parse_v2fly_domain_file, request
11
12
 
12
13
 
13
14
  v2fly_repo_pulled = False
@@ -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]]:
@@ -215,7 +232,7 @@ class BaseProvider(BaseModel):
215
232
  repo_path, _success = self._ensure_v2fly_repo_cached()
216
233
  company_file = repo_path / "data" / self.v2fly_company
217
234
  try:
218
- domains = self._parse_v2fly_domain_file(company_file)
235
+ domains = parse_v2fly_domain_file(company_file)
219
236
  except Exception as e:
220
237
  errors.append(
221
238
  f"Failed to parse {self.v2fly_company} domains: {e}:\n{traceback.format_exc()}"
@@ -259,41 +276,10 @@ class BaseProvider(BaseModel):
259
276
  )
260
277
  return repo_dir, errors
261
278
 
262
- def _parse_v2fly_domain_file(self, file_path: Path) -> Set[str]:
263
- """Parse a domain list file and extract domains."""
264
- print(f"Parsing {file_path}")
265
- domains = set()
266
- if not file_path.exists():
267
- print(f"File {file_path} does not exist")
268
- return domains
269
-
270
- with open(file_path, "r", encoding="utf-8") as f:
271
- for line in f:
272
- line = line.strip()
273
- if not line or line.startswith("#"):
274
- continue
275
-
276
- if line.startswith("include:"):
277
- include_file = line[8:]
278
- include_path = file_path.parent / include_file
279
- domains.update(self._parse_v2fly_domain_file(include_path))
280
- continue
281
-
282
- if line.startswith("domain:"):
283
- domain = line[7:]
284
- elif line.startswith("full:"):
285
- domain = line[5:]
286
- elif line.startswith("keyword:") or line.startswith("regexp:"):
287
- continue
288
- else:
289
- domain = line
290
-
291
- domain = domain.split("@")[0].strip()
292
- if domain:
293
- domains.add(domain.lower())
294
- return domains
295
-
296
279
  def request(self, *args, **kwargs):
280
+ headers = kwargs.get("headers", {})
281
+ headers["x-rate-limit-blocking"] = "true"
282
+ kwargs["headers"] = headers
297
283
  return request(*args, **kwargs)
298
284
 
299
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",