cloudcheck 8.4.3__cp312-cp312-musllinux_1_2_x86_64.whl → 8.7.2__cp312-cp312-musllinux_1_2_x86_64.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.
- cloudcheck/cloudcheck.cpython-312-x86_64-linux-musl.so +0 -0
- cloudcheck/helpers.py +5 -3
- cloudcheck/providers/__init__.py +2 -2
- cloudcheck/providers/akamai.py +2 -0
- cloudcheck/providers/alibaba.py +2 -0
- cloudcheck/providers/amazon.py +2 -0
- cloudcheck/providers/arvancloud.py +2 -0
- cloudcheck/providers/backblaze.py +2 -0
- cloudcheck/providers/baidu.py +17 -0
- cloudcheck/providers/base.py +69 -21
- cloudcheck/providers/cachefly.py +26 -0
- cloudcheck/providers/cdnetworks.py +14 -0
- cloudcheck/providers/cisco.py +2 -0
- cloudcheck/providers/cloudflare.py +2 -0
- cloudcheck/providers/cloudfront.py +2 -0
- cloudcheck/providers/ddosguard.py +14 -0
- cloudcheck/providers/dell.py +2 -0
- cloudcheck/providers/digitalocean.py +2 -0
- cloudcheck/providers/dod.py +31 -0
- cloudcheck/providers/fastly.py +2 -0
- cloudcheck/providers/fbi.py +18 -0
- cloudcheck/providers/gabia.py +12 -0
- cloudcheck/providers/gcore.py +27 -0
- cloudcheck/providers/github.py +2 -0
- cloudcheck/providers/gocache.py +17 -0
- cloudcheck/providers/google.py +2 -0
- cloudcheck/providers/heroku.py +2 -0
- cloudcheck/providers/hetzner.py +2 -0
- cloudcheck/providers/hostway.py +13 -0
- cloudcheck/providers/hpe.py +2 -0
- cloudcheck/providers/huawei.py +2 -0
- cloudcheck/providers/ibm.py +2 -0
- cloudcheck/providers/imperva.py +4 -1
- cloudcheck/providers/kamatera.py +2 -0
- cloudcheck/providers/kinx.py +14 -0
- cloudcheck/providers/ktcloud.py +14 -0
- cloudcheck/providers/leaseweb.py +32 -0
- cloudcheck/providers/lgtelecom.py +13 -0
- cloudcheck/providers/{azure.py → microsoft.py} +4 -2
- cloudcheck/providers/microsoft365.py +33 -0
- cloudcheck/providers/navercloud.py +15 -0
- cloudcheck/providers/nhncloud.py +15 -0
- cloudcheck/providers/oracle.py +2 -0
- cloudcheck/providers/ovh.py +2 -0
- cloudcheck/providers/qrator.py +16 -0
- cloudcheck/providers/quiccloud.py +38 -0
- cloudcheck/providers/rackspace.py +2 -0
- cloudcheck/providers/ru_fso.py +13 -0
- cloudcheck/providers/salesforce.py +2 -0
- cloudcheck/providers/scaleway.py +2 -0
- cloudcheck/providers/skbroadband.py +13 -0
- cloudcheck/providers/stormwall.py +14 -0
- cloudcheck/providers/sucuri.py +14 -0
- cloudcheck/providers/tencent.py +2 -0
- cloudcheck/providers/uk_mod.py +16 -0
- cloudcheck/providers/wasabi.py +2 -0
- cloudcheck/providers/x4b.py +14 -0
- cloudcheck/providers/yandex.py +107 -0
- cloudcheck/providers/zoho.py +2 -0
- cloudcheck/providers/zscaler.py +25 -0
- cloudcheck-8.7.2.dist-info/METADATA +252 -0
- cloudcheck-8.7.2.dist-info/RECORD +65 -0
- {cloudcheck-8.4.3.dist-info → cloudcheck-8.7.2.dist-info}/WHEEL +1 -1
- cloudcheck-8.4.3.dist-info/METADATA +0 -157
- cloudcheck-8.4.3.dist-info/RECORD +0 -38
|
Binary file
|
cloudcheck/helpers.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ipaddress
|
|
2
2
|
import os
|
|
3
|
-
import
|
|
3
|
+
import httpx
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import List, Set, Union
|
|
6
6
|
|
|
@@ -201,7 +201,7 @@ browser_base_headers = {
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
|
|
204
|
-
def request(url, include_api_key=False, browser_headers=False, **kwargs):
|
|
204
|
+
def request(url, include_api_key=False, browser_headers=False, timeout=60, **kwargs):
|
|
205
205
|
headers = kwargs.get("headers", {})
|
|
206
206
|
if browser_headers:
|
|
207
207
|
headers.update(browser_base_headers)
|
|
@@ -209,7 +209,9 @@ def request(url, include_api_key=False, browser_headers=False, **kwargs):
|
|
|
209
209
|
if include_api_key and bbot_io_api_key:
|
|
210
210
|
headers["Authorization"] = f"Bearer {bbot_io_api_key}"
|
|
211
211
|
kwargs["headers"] = headers
|
|
212
|
-
|
|
212
|
+
kwargs["timeout"] = timeout
|
|
213
|
+
kwargs.setdefault("follow_redirects", True)
|
|
214
|
+
return httpx.get(url, **kwargs)
|
|
213
215
|
|
|
214
216
|
|
|
215
217
|
def parse_v2fly_domain_file(file_path: Path) -> Set[str]:
|
cloudcheck/providers/__init__.py
CHANGED
|
@@ -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
|
cloudcheck/providers/akamai.py
CHANGED
|
@@ -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]}
|
cloudcheck/providers/alibaba.py
CHANGED
|
@@ -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",
|
cloudcheck/providers/amazon.py
CHANGED
|
@@ -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",
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from cloudcheck.providers.base import BaseProvider
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Baidu(BaseProvider):
|
|
6
|
+
v2fly_company: str = "baidu"
|
|
7
|
+
tags: List[str] = ["cdn"]
|
|
8
|
+
short_description: str = "Baidu Cloud Acceleration (百度云加速)"
|
|
9
|
+
long_description: str = "A Chinese content delivery network and cloud acceleration service provided by Baidu."
|
|
10
|
+
# {"org_id": "BUL-5-ARIN", "org_name": "Baidu USA LLC", "country": "US", "asns": [63288]}
|
|
11
|
+
# {"org_id": "ORG-BKL1-AP-APNIC", "org_name": "Baidu (Hong Kong) Limited", "country": "HK", "asns": [133746]}
|
|
12
|
+
# {"org_id": "ORG-BKL4-RIPE", "org_name": "Baidu (Hong Kong) Limited", "country": "HK", "asns": [199506]}
|
|
13
|
+
org_ids: List[str] = [
|
|
14
|
+
"BUL-5-ARIN",
|
|
15
|
+
"ORG-BKL1-AP-APNIC",
|
|
16
|
+
"ORG-BKL4-RIPE",
|
|
17
|
+
]
|
cloudcheck/providers/base.py
CHANGED
|
@@ -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"
|
|
@@ -77,14 +79,42 @@ class BaseProvider(BaseModel):
|
|
|
77
79
|
def update_domains(self):
|
|
78
80
|
# update dynamic domains
|
|
79
81
|
errors = []
|
|
82
|
+
domains = set()
|
|
83
|
+
|
|
84
|
+
# fetch any dynamically-updated lists of domains
|
|
85
|
+
try:
|
|
86
|
+
dynamic_domains = self.fetch_domains()
|
|
87
|
+
print(f"Got {len(dynamic_domains)} dynamic domains for {self.name}")
|
|
88
|
+
domains.update(dynamic_domains)
|
|
89
|
+
except Exception as e:
|
|
90
|
+
errors.append(
|
|
91
|
+
f"Failed to fetch dynamic domains for {self.name}: {e}:\n{traceback.format_exc()}"
|
|
92
|
+
)
|
|
93
|
+
|
|
80
94
|
if self.v2fly_company:
|
|
81
|
-
|
|
82
|
-
if
|
|
83
|
-
|
|
95
|
+
_domains, _errors = self.fetch_v2fly_domains()
|
|
96
|
+
if _domains:
|
|
97
|
+
domains.update(_domains)
|
|
84
98
|
else:
|
|
85
99
|
errors.append(
|
|
86
100
|
f"No v2fly domains were found for {self.name} (company name: {self.v2fly_company})"
|
|
87
101
|
)
|
|
102
|
+
errors.extend(_errors)
|
|
103
|
+
|
|
104
|
+
# finally, put in any manually-specified domains
|
|
105
|
+
print(f"Adding {len(self.domains)} manually-specified domains for {self.name}")
|
|
106
|
+
if self.domains:
|
|
107
|
+
domains.update(self.domains)
|
|
108
|
+
|
|
109
|
+
print(f"Total {len(domains)} domains for {self.name}")
|
|
110
|
+
|
|
111
|
+
try:
|
|
112
|
+
self.domains = self.validate_domains(domains)
|
|
113
|
+
except Exception as e:
|
|
114
|
+
errors.append(
|
|
115
|
+
f"Error validating domains for {self.name}: {e}:\n{traceback.format_exc()}"
|
|
116
|
+
)
|
|
117
|
+
|
|
88
118
|
return errors
|
|
89
119
|
|
|
90
120
|
def update_cidrs(self):
|
|
@@ -146,6 +176,20 @@ class BaseProvider(BaseModel):
|
|
|
146
176
|
|
|
147
177
|
return errors
|
|
148
178
|
|
|
179
|
+
def _fetch_org_id(self, org_id: str):
|
|
180
|
+
"""Fetch ASNs for a single org_id."""
|
|
181
|
+
print(f"Fetching cidrs for {org_id} from asndb")
|
|
182
|
+
try:
|
|
183
|
+
url = f"{self._asndb_url}/org/{org_id}"
|
|
184
|
+
print(f"Fetching {url}")
|
|
185
|
+
res = self.request(url, include_api_key=True)
|
|
186
|
+
print(f"{url} -> {res}: {res.text}")
|
|
187
|
+
j = res.json()
|
|
188
|
+
return j.get("asns", []), []
|
|
189
|
+
except Exception as e:
|
|
190
|
+
error = f"Failed to fetch cidrs for {org_id} from asndb: {e}:\n{traceback.format_exc()}"
|
|
191
|
+
return [], [error]
|
|
192
|
+
|
|
149
193
|
def fetch_org_ids(
|
|
150
194
|
self,
|
|
151
195
|
) -> List[Union[ipaddress.IPv4Network, ipaddress.IPv6Network]]:
|
|
@@ -154,25 +198,26 @@ class BaseProvider(BaseModel):
|
|
|
154
198
|
cidrs = set()
|
|
155
199
|
print(f"Fetching {len(self.org_ids)} org ids for {self.name}")
|
|
156
200
|
asns = set()
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
errors.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
for asn in
|
|
172
|
-
|
|
173
|
-
asn_cidrs, _errors =
|
|
201
|
+
|
|
202
|
+
# Parallelize org_id fetching
|
|
203
|
+
with ThreadPoolExecutor() as executor:
|
|
204
|
+
org_futures = {
|
|
205
|
+
executor.submit(self._fetch_org_id, org_id): org_id
|
|
206
|
+
for org_id in self.org_ids
|
|
207
|
+
}
|
|
208
|
+
for future in as_completed(org_futures):
|
|
209
|
+
_asns, _errors = future.result()
|
|
210
|
+
errors.extend(_errors)
|
|
211
|
+
asns.update(_asns)
|
|
212
|
+
|
|
213
|
+
# Parallelize ASN fetching
|
|
214
|
+
with ThreadPoolExecutor() as executor:
|
|
215
|
+
asn_futures = {executor.submit(self.fetch_asn, asn): asn for asn in asns}
|
|
216
|
+
for future in as_completed(asn_futures):
|
|
217
|
+
asn_cidrs, _errors = future.result()
|
|
174
218
|
errors.extend(_errors)
|
|
175
219
|
cidrs.update(asn_cidrs)
|
|
220
|
+
|
|
176
221
|
return cidrs, asns, errors
|
|
177
222
|
|
|
178
223
|
def fetch_asns(self) -> List[Union[ipaddress.IPv4Network, ipaddress.IPv6Network]]:
|
|
@@ -260,6 +305,9 @@ class BaseProvider(BaseModel):
|
|
|
260
305
|
return repo_dir, errors
|
|
261
306
|
|
|
262
307
|
def request(self, *args, **kwargs):
|
|
308
|
+
headers = kwargs.get("headers", {})
|
|
309
|
+
headers["x-rate-limit-blocking"] = "true"
|
|
310
|
+
kwargs["headers"] = headers
|
|
263
311
|
return request(*args, **kwargs)
|
|
264
312
|
|
|
265
313
|
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)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from cloudcheck.providers.base import BaseProvider
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Cdnetworks(BaseProvider):
|
|
6
|
+
tags: List[str] = ["cdn"]
|
|
7
|
+
short_description: str = "CDNetworks (씨디네트웍스)"
|
|
8
|
+
long_description: str = (
|
|
9
|
+
"A Korean content delivery network provider offering CDN and cloud services."
|
|
10
|
+
)
|
|
11
|
+
# {"org_id": "CDNET-ARIN", "org_name": "CDNetworks Inc.", "country": "US", "asns": [36408,40366]}
|
|
12
|
+
org_ids: List[str] = [
|
|
13
|
+
"CDNET-ARIN",
|
|
14
|
+
]
|
cloudcheck/providers/cisco.py
CHANGED
|
@@ -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
|
+
]
|
cloudcheck/providers/dell.py
CHANGED
|
@@ -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
|
+
]
|
cloudcheck/providers/fastly.py
CHANGED
|
@@ -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
|
+
]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from cloudcheck.providers.base import BaseProvider
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Gabia(BaseProvider):
|
|
6
|
+
tags: List[str] = ["cloud"]
|
|
7
|
+
short_description: str = "Gabia (가비아)"
|
|
8
|
+
long_description: str = "A Korean cloud hosting and infrastructure provider."
|
|
9
|
+
# {"org_id": "@aut-17589-APNIC", "org_name": null, "country": null, "asns": [17589]}
|
|
10
|
+
org_ids: List[str] = [
|
|
11
|
+
"@aut-17589-APNIC",
|
|
12
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from cloudcheck.providers.base import BaseProvider
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Gcore(BaseProvider):
|
|
6
|
+
tags: List[str] = ["cdn"]
|
|
7
|
+
short_description: str = "G-Core Labs"
|
|
8
|
+
long_description: str = "A content delivery network and cloud infrastructure provider offering CDN, cloud computing, and edge services."
|
|
9
|
+
# {"org_id": "ORG-GLS1-AP-APNIC", "org_name": "G-Core Labs S.A", "country": "LU", "asns": [59245]}
|
|
10
|
+
# {"org_id": "ORG-WIG6-RIPE", "org_name": "G-Core Labs S.A.", "country": "LU", "asns": [199524,202422,210559]}
|
|
11
|
+
org_ids: List[str] = [
|
|
12
|
+
"ORG-GLS1-AP-APNIC",
|
|
13
|
+
"ORG-WIG6-RIPE",
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
_ips_url = "https://api.gcore.com/cdn/public-ip-list"
|
|
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
|
+
response_json = response.json()
|
|
23
|
+
if isinstance(response_json, dict):
|
|
24
|
+
for key in "addresses", "addresses_v6":
|
|
25
|
+
for ip_range in response_json.get(key, []):
|
|
26
|
+
ranges.add(ip_range)
|
|
27
|
+
return list(ranges)
|
cloudcheck/providers/github.py
CHANGED
|
@@ -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",
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from cloudcheck.providers.base import BaseProvider
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Gocache(BaseProvider):
|
|
6
|
+
tags: List[str] = ["cdn"]
|
|
7
|
+
short_description: str = "GoCache"
|
|
8
|
+
long_description: str = "A Brazilian content delivery network provider offering CDN services."
|
|
9
|
+
|
|
10
|
+
_ips_url = "https://gocache.com.br/ips"
|
|
11
|
+
|
|
12
|
+
def fetch_cidrs(self):
|
|
13
|
+
response = self.request(self._ips_url)
|
|
14
|
+
ranges = set()
|
|
15
|
+
if getattr(response, "status_code", 0) == 200:
|
|
16
|
+
ranges.update(response.text.splitlines())
|
|
17
|
+
return list(ranges)
|
cloudcheck/providers/google.py
CHANGED
|
@@ -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]}
|
cloudcheck/providers/heroku.py
CHANGED
|
@@ -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."
|
cloudcheck/providers/hetzner.py
CHANGED
|
@@ -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",
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from cloudcheck.providers.base import BaseProvider
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Hostway(BaseProvider):
|
|
6
|
+
tags: List[str] = ["cloud"]
|
|
7
|
+
short_description: str = "Hostway (호스트웨이)"
|
|
8
|
+
long_description: str = "A Korean cloud hosting and infrastructure provider."
|
|
9
|
+
# {"org_id": "@aut-9952-APNIC", "org_name": null, "country": null, "asns": [9952]}
|
|
10
|
+
# {"asn":9952,"asn_name":"HOSTWAY-AS-KR","org_id":"@aut-9952-APNIC"}
|
|
11
|
+
org_ids: List[str] = [
|
|
12
|
+
"@aut-9952-APNIC",
|
|
13
|
+
]
|
cloudcheck/providers/hpe.py
CHANGED
|
@@ -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",
|
cloudcheck/providers/huawei.py
CHANGED
|
@@ -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]}
|
cloudcheck/providers/ibm.py
CHANGED
|
@@ -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]}
|
cloudcheck/providers/imperva.py
CHANGED
|
@@ -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"
|
cloudcheck/providers/kamatera.py
CHANGED
|
@@ -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,14 @@
|
|
|
1
|
+
from cloudcheck.providers.base import BaseProvider
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Kinx(BaseProvider):
|
|
6
|
+
tags: List[str] = ["cdn"]
|
|
7
|
+
short_description: str = "KINX (한국인터넷인프라)"
|
|
8
|
+
long_description: str = (
|
|
9
|
+
"A Korean content delivery network and cloud infrastructure provider."
|
|
10
|
+
)
|
|
11
|
+
# {"org_id": "@aut-9286-APNIC", "org_name": null, "country": null, "asns": [9286,9957,17604]}
|
|
12
|
+
org_ids: List[str] = [
|
|
13
|
+
"@aut-9286-APNIC",
|
|
14
|
+
]
|