first commit

This commit is contained in:
2025-12-05 16:06:05 +01:00
commit d3adfcf32d
39 changed files with 1458 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
#!/bin/python
from env import *
import requests
import json
# === Konfiguration ===
CONFIG_ID = "prod"
# Proxy Templates nur einen aktiv lassen
PROXY_TEMPLATE = "f4bf25a205a5"
# PROXY_TEMPLATE = "andere_template_id"
# === Header für alle Requests ===
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
def domain_to_id(domain):
return domain.replace(".", "-")
def domain_to_backend_id(domain):
return f"backend-{domain_to_id(domain)}"
def create_backend_service(name, ip):
entry_id = domain_to_backend_id(name)
url = f"https://jtlwaap.app.reblaze.io/api/v4.3/conf/{CONFIG_ID}/backend-services/{entry_id}"
print(f"\n📦 creating Backend Service for {name} → IP: {ip}")
payload = {
"back_hosts": [
{
"backup": False,
"down": False,
"fail_timeout": 10,
"host": ip,
"http_ports": [80],
"https_ports": [443],
"max_fails": 0,
"monitor_state": "",
"weight": 1
}
],
"description": f"JTL Shopserver {name}",
"http11": True,
"id": entry_id,
"least_conn": True,
"name": name,
"sticky": "none",
"sticky_cookie_name": "",
"transport_mode": "default"
}
print(payload)
response = requests.post(url, headers=HEADERS, data=json.dumps(payload)
)
if response.status_code == 201:
print(f"[✓] Backend Service '{name}' erfolgreich erstellt.")
else:
print(f"[✗] Fehler bei {name} ({ip}): {response.status_code}{response.text} {response.json()}")
def main():
#create_backend_service("shop022.jtl-hosting.de", "31.172.84.222")
#create_backend_service("shop056.jtl-hosting.de", "31.172.91.121")
#create_backend_service("shop000.jtl-hosting.de", "31.172.91.145")
#create_backend_service("shop051.jtl-hosting.de", "31.172.91.88")
create_backend_service("shop009.jtl-hosting.de", "31.172.84.33")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,92 @@
#!/bin/python
from env import *
import requests
import json
# === Konfiguration ===
CONFIG_ID = "prod"
# Proxy Templates nur einen aktiv lassen
PROXY_TEMPLATE = "f4bf25a205a5"
# PROXY_TEMPLATE = "andere_template_id"
# Security Policies nur einen aktiv lassen, diese dient als
# Vorlage für die neu erstellte Security Policy
SECURITY_POLICY = "secpol-shop022-jtl-hosting-de" # z.B. Shop022
# === Header für alle Requests ===
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
def domain_to_id(domain):
return domain.replace(".", "-")
def domain_to_secpol_id(domain):
return f"secpol-{domain_to_id(domain)}"
def domain_to_backend_id(domain):
return f"backend-{domain_to_id(domain)}"
def create_security_policy(domain):
# Zuerst die SECURITY_POLICY abrufen, diese wird als Vorlage genutzt
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/security-policies/{SECURITY_POLICY}"
response = requests.get(url, headers=HEADERS,)
if response.status_code == 200:
print(f"[✓] Abfrage von Security policy '{SECURITY_POLICY}' erfolgreich.")
else:
print(f"[✗] Fehler bei ({SECURITY_POLICY}): {response.status_code}{response.text}")
#print(response.text)
res=json.loads(response.text)
backendservice = domain_to_backend_id(domain)
# Neuen Backend-Service in allen Pfaden der Security Policy setzen
for mapitem in res['map']:
if (mapitem['id'] != "__site_level__"):
mapitem['backend_service'] = backendservice
#print (res['map'])
# Neuen Namen und ID setzen
entry_id = domain_to_secpol_id(domain)
res['id'] = entry_id
res['name'] = domain
'''
for key,value in res.items():
if ( key != "map" ):
print (key, value, "\n")
else:
print(key)
for items in value:
for key2, value2 in items.items():
print(key2, value2)
'''
# Nun die angepasste Security Policy als neue speichern
url = f"https://jtlwaap.app.reblaze.io/api/v4.3/conf/{CONFIG_ID}/security-policies/{entry_id}"
print(f"\n📦 creating Security Policy {entry_id}")
response = requests.post(url, headers=HEADERS, data=json.dumps(res))
if response.status_code == 201:
print(f"[✓] Security Policy '{entry_id}' erfolgreich erstellt.")
else:
print(f"[✗] Fehler bei {entry_id}: {response.status_code}{response.text} {response.json()}")
def main():
#create_security_policy('shop020.jtl-hosting.de')
#create_security_policy('shop022.jtl-hosting.de')
#create_security_policy('shop000.jtl-hosting.de')
#create_security_policy('shop051.jtl-hosting.de')
create_security_policy('shop009.jtl-hosting.de')
if __name__ == "__main__":
main()

66
03_create_sg_link11.py Executable file
View File

@@ -0,0 +1,66 @@
#!/bin/python
from env import *
import requests
import json
# === Konfiguration ===
CONFIG_ID = "prod"
# Proxy Templates nur einen aktiv lassen
PROXY_TEMPLATE = "f4bf25a205a5"
# PROXY_TEMPLATE = "andere_template_id"
# === Header für alle Requests ===
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
def sanitize_entry_id(domain):
"""Erstellt eine gültige entry_id ohne Punkte, wie von der API gefordert."""
return domain.replace(".", "-")
def create_server_group(domain, security_policy):
entry_id = sanitize_entry_id(domain)
url = f"https://jtlwaap.app.reblaze.io/api/v4.3/conf/{CONFIG_ID}/server-groups/{entry_id}"
payload = {
"id": entry_id,
"challenge_cookie_domain": "$host",
"description": f"Automatisch erstellt fuer {domain}",
"mobile_application_group": "",
"name": domain,
"proxy_template": PROXY_TEMPLATE,
"routing_profile": "__default__",
"security_policy": security_policy,
"server_names": [
domain,
"www."+domain
],
"ssl_certificate": "placeholder",
"client_certificate": "",
"client_certificate_mode": "off",
}
# print(payload)
print(f"\n📦 Erstelle Gruppe für {domain} → ID: {entry_id}")
response = requests.post(url, headers=HEADERS, data=json.dumps(payload))
if response.status_code == 201:
print(f"[✓] Server-Gruppe '{entry_id}' erfolgreich erstellt.")
elif response.status_code == 409:
print(f"[i] Gruppe '{entry_id}' existiert bereits.")
else:
print(f"[✗] Fehler bei {domain} ({entry_id}): {response.status_code}{response.text}")
def main():
# === CSV-Datei einlesen ===
with open("serverliste_link11.csv", "r") as file:
for line in file:
domain = line.strip()
if domain:
create_server_group(domain, 'secpol-shop009-jtl-hosting-de')
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,127 @@
#!/bin/python
from env import *
import requests
import csv
import json
import time
# === KONFIGURATION ===
CONFIG_ID = "prod"
CSV_DATEI = "serverliste_link11.csv"
# Load Balancer Settings (eintragen oder automatisch abrufen)
PROVIDER = "link11"
REGION = "global"
LISTENER = "jtlwaap-lb-prod-443"
LISTENER_PORT = 443
BASE_URL = f"https://jtlwaap.app.reblaze.io/api/v4.3/conf/{CONFIG_ID}"
HEADERS_JSON = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
HEADERS_GET = {
"Authorization": f"Bearer {API_TOKEN}",
"Accept": "*/*"
}
def sanitize_entry_id(domain):
"""Erstellt eine gültige entry_id ohne Punkte, wie von der API gefordert."""
return domain.replace(".", "-")
def domain_to_cert_id(domain):
return f"jtlwaap-{sanitize_entry_id(domain)}"
def create_certificate(domain):
cert_id = domain_to_cert_id(domain)
url = f"{BASE_URL}/certificates/{cert_id}"
params = {
"domains": [
domain,
"www."+domain
]
}
payload = {
"id": cert_id,
"le_auto_renew": True,
"le_auto_replace": True,
"le_hash": "",
"provider_links": []
}
#return cert_id
response = requests.post(url, headers=HEADERS_JSON, params=params, data=json.dumps(payload))
if response.status_code == 201:
print(f"[✓] Zertifikat erstellt: {cert_id}")
return cert_id
elif response.status_code == 409:
print(f"[i] Zertifikat bereits vorhanden: {cert_id}")
return cert_id
else:
print(f"[✗] Fehler bei Zertifikat {cert_id}: {response.status_code}{response.text}")
return None
def update_server_group(domain, cert_id):
entry_id = sanitize_entry_id(domain)
url = f"{BASE_URL}/server-groups/{entry_id}"
# Servergruppe einlesen
response = requests.get(url, headers=HEADERS_JSON,)
target=json.loads(response.text)
# Neues Zertifikat einstellen
target['ssl_certificate'] = cert_id
# Servergruppe speichern
response = requests.put(url, headers=HEADERS_JSON, data=json.dumps(target))
if response.status_code == 200:
print(f"[✓] Servergruppe aktualisiert für {domain}")
else:
print(f"[✗] Fehler bei Servergruppe {domain}: {response.status_code}{response.text}")
def assign_to_load_balancer(domain, cert_id):
url = f"https://jtlwaap.app.reblaze.io/api/v4.3/conf/{CONFIG_ID}/load-balancers/{LISTENER}/certificates/{cert_id}"
params = {
"provider": PROVIDER,
"region": REGION,
"listener": LISTENER,
"listener-port": LISTENER_PORT
}
response = requests.put(url, headers=HEADERS_JSON, params=params)
if response.status_code == 200:
print(f"[✓] Zertifikat dem Load Balancer zugewiesen: {cert_id}")
else:
print(f"[✗] Fehler beim Load Balancer für {cert_id}: {response.status_code}{response.text}")
def verarbeite_domain(domain):
print(f"\n--- Bearbeite Domain: {domain} ---")
cert_id = create_certificate(domain)
if not cert_id:
return
time.sleep(2) # Wartezeit, falls Zertifikaterstellung async dauert
update_server_group(domain, cert_id)
#time.sleep(5)
assign_to_load_balancer(domain, cert_id)
def main():
try:
with open(CSV_DATEI, newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
domain = row[0].strip()
if domain:
verarbeite_domain(domain)
except Exception as e:
print(f"[!] Fehler beim Lesen der CSV: {e}")
if __name__ == "__main__":
main()

1
README.md Normal file
View File

@@ -0,0 +1 @@
Siehe https://jtl-software.atlassian.net/wiki/spaces/TH/pages/491683992/Link11+einrichten

54
certtest.py Executable file
View File

@@ -0,0 +1,54 @@
#!/bin/python
from env import *
import requests
import csv
import json
import time
# === KONFIGURATION ===
CONFIG_ID = "prod"
# Load Balancer Settings (eintragen oder automatisch abrufen)
PROVIDER = "link11"
REGION = "global"
LISTENER = "jtlwaap-lb-prod-443"
LISTENER_PORT = 443
HEADERS_JSON = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
HEADERS_GET = {
"Authorization": f"Bearer {API_TOKEN}",
"Accept": "*/*"
}
def sanitize_entry_id(domain):
"""Erstellt eine gültige entry_id ohne Punkte, wie von der API gefordert."""
return domain.replace(".", "-")
def domain_to_cert_id(domain):
return f"jtlwaap-{sanitize_entry_id(domain)}"
def assign_to_load_balancer(cert_id):
url = f"https://jtlwaap.app.reblaze.io/api/v4.3/conf/{CONFIG_ID}/load-balancers/{LISTENER}/certificates/{cert_id}"
params = {
"provider": PROVIDER,
"region": REGION,
"listener": LISTENER,
"listener-port": LISTENER_PORT
}
response = requests.put(url, headers=HEADERS_JSON, params=params)
if response.status_code == 200:
print(f"[✓] Zertifikat dem Load Balancer zugewiesen: {cert_id}")
else:
print(f"[✗] Fehler beim Load Balancer für {cert_id}: {response.status_code}{response.text}")
def main():
assign_to_load_balancer('jtlwaap-eb-autotest2-shop000-jtl-hosting-de')
if __name__ == "__main__":
main()

54
get_backend_services_link11.py Executable file
View File

@@ -0,0 +1,54 @@
#!/bin/python
import requests
import json
import pprint
# === Konfiguration ===
API_TOKEN = "dvGLKQzkJ4wvIXLExQj3jVlyalysTdy2Xp3QtcblI0gmDotnD_xywsyao9pU25y1"
CONFIG_ID = "prod"
# Proxy Templates nur einen aktiv lassen
PROXY_TEMPLATE = "f4bf25a205a5"
# PROXY_TEMPLATE = "andere_template_id"
# Security Policies nur einen aktiv lassen
SECURITY_POLICY = "16fbf6d51b17" # z.B. Shop022
# SECURITY_POLICY = "3f7a521c6570" # Shop023
# SECURITY_POLICY = "9cc8dd695d5c" # Shop024
# SECURITY_POLICY = "1f707fb18483" # Shop028
# === Header für alle Requests ===
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
def get_security_policy(policy):
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/backend-services"
response = requests.get(url, headers=HEADERS,)
if response.status_code == 200:
print(f"[✓] Abfrage von backend-services erfolgreich.")
else:
print(f"[✗] Fehler bei ({policy}): {response.status_code}{response.text}")
#print(response.text)
res=json.loads(response.text)
pprint.pp(res)
'''
for key,value in res.items():
if ( key != "items" ):
print (key, value, "\n")
else:
print(key)
for items in value:
for key2, value2 in items.items():
print(key2, value2)
'''
def main():
get_security_policy(SECURITY_POLICY)
# === CSV-Datei einlesen ===
if __name__ == "__main__":
main()

45
get_certificates_link11.py Executable file
View File

@@ -0,0 +1,45 @@
#!/bin/python
from env import *
import requests
import json
import pprint
# === Konfiguration ===
CONFIG_ID = "prod"
# Proxy Templates nur einen aktiv lassen
PROXY_TEMPLATE = "f4bf25a205a5"
# PROXY_TEMPLATE = "andere_template_id"
# Security Policies nur einen aktiv lassen
SECURITY_POLICY = "16fbf6d51b17" # z.B. Shop022
# SECURITY_POLICY = "3f7a521c6570" # Shop023
# SECURITY_POLICY = "9cc8dd695d5c" # Shop024
# SECURITY_POLICY = "1f707fb18483" # Shop028
# === Header für alle Requests ===
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
def get_server_groups():
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/certificates"
response = requests.get(url, headers=HEADERS,)
if response.status_code == 200:
print(f"[✓] Abfrage von server groups erfolgreich.")
else:
print(f"[✗] Fehler bei Abfrage von server groups): {response.status_code}{response.text}")
#print(response.text)
res=json.loads(response.text)
pprint.pp(res)
def main():
get_server_groups()
# === CSV-Datei einlesen ===
if __name__ == "__main__":
main()

55
get_load_balancers_link11.py Executable file
View File

@@ -0,0 +1,55 @@
#!/bin/python
from env import *
import requests
import json
import pprint
# === Konfiguration ===
CONFIG_ID = "prod"
# Proxy Templates nur einen aktiv lassen
PROXY_TEMPLATE = "f4bf25a205a5"
# PROXY_TEMPLATE = "andere_template_id"
# Security Policies nur einen aktiv lassen
SECURITY_POLICY = "16fbf6d51b17" # z.B. Shop022
# SECURITY_POLICY = "3f7a521c6570" # Shop023
# SECURITY_POLICY = "9cc8dd695d5c" # Shop024
# SECURITY_POLICY = "1f707fb18483" # Shop028
# === Header für alle Requests ===
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
def get_server_groups():
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/load-balancers"
response = requests.get(url, headers=HEADERS,)
if response.status_code == 200:
print(f"[✓] Abfrage von load balancers erfolgreich.")
else:
print(f"[✗] Fehler bei Abfrage von load balancers): {response.status_code}{response.text}")
#print(response.text)
res=json.loads(response.text)
'''
for key,value in res.items():
if ( key != "items" ):
print (key, value, "\n")
else:
for items in value: # Value enthält einen einzelnen Load Balancer
if ( key != "certificates" ):
print (value, "\n")
else:
print(key2, value2)
'''
pprint.pp(res)
def main():
get_server_groups()
# === CSV-Datei einlesen ===
if __name__ == "__main__":
main()

58
get_security_policy_link11.py Executable file
View File

@@ -0,0 +1,58 @@
#!/bin/python
from env import *
import requests
import json
import pprint
# === Konfiguration ===
CONFIG_ID = "prod"
# Proxy Templates nur einen aktiv lassen
PROXY_TEMPLATE = "f4bf25a205a5"
# PROXY_TEMPLATE = "andere_template_id"
# Security Policies nur einen aktiv lassen, dieses dient als Vorlage
SECURITY_POLICY = "secpol-shop022-jtl-hosting-de" # z.B. Shop022
# SECURITY_POLICY = "3f7a521c6570" # Shop023
# SECURITY_POLICY = "9cc8dd695d5c" # Shop024
# SECURITY_POLICY = "1f707fb18483" # Shop028
# Backend Services, nur einen aktiv lassen
BACKEND_SERVICE = "backend-shop022-jtl-hosting-de"
# === Header für alle Requests ===
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
def get_security_policy(policy):
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/security-policies/{policy}"
response = requests.get(url, headers=HEADERS,)
if response.status_code == 200:
print(f"[✓] Abfrage von Security policy '{policy}' erfolgreich.")
else:
print(f"[✗] Fehler bei ({policy}): {response.status_code}{response.text}")
#print(response.text)
res=json.loads(response.text)
pprint.pp(res)
'''
for key,value in res.items():
if ( key != "map" ):
print (key, value, "\n")
else:
print(key)
for items in value:
for key2, value2 in items.items():
print(key2, value2)
'''
def main():
get_security_policy(SECURITY_POLICY)
# === CSV-Datei einlesen ===
if __name__ == "__main__":
main()

57
get_server_groups_link11.py Executable file
View File

@@ -0,0 +1,57 @@
#!/bin/python
from env import *
import requests
import json
import pprint
# === Konfiguration ===
CONFIG_ID = "prod"
# Proxy Templates nur einen aktiv lassen
PROXY_TEMPLATE = "f4bf25a205a5"
# PROXY_TEMPLATE = "andere_template_id"
# Security Policies nur einen aktiv lassen
SECURITY_POLICY = "16fbf6d51b17" # z.B. Shop022
# SECURITY_POLICY = "3f7a521c6570" # Shop023
# SECURITY_POLICY = "9cc8dd695d5c" # Shop024
# SECURITY_POLICY = "1f707fb18483" # Shop028
# === Header für alle Requests ===
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
def get_server_groups():
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/server-groups"
response = requests.get(url, headers=HEADERS,)
if response.status_code == 200:
print(f"[✓] Abfrage von server groups erfolgreich.")
else:
print(f"[✗] Fehler bei Abfrage von server groups): {response.status_code}{response.text}")
#print(response.text)
res=json.loads(response.text)
pprint.pp(res)
'''
for key,value in res.items():
if ( key != "items" ):
print (key, value, "\n")
else:
print(key)
for items in value: # Value enthält eine einzelne Server Group
for key2, value2 in items.items():
if ( (key2 == "security_policy") and (value2 == "16fbf6d51b17") ):
value2 = "secpol-shop022-jtl-hosting-de"
print(key2, value2)
'''
def main():
get_server_groups()
# === CSV-Datei einlesen ===
if __name__ == "__main__":
main()

1
serverliste_link11.csv Normal file
View File

@@ -0,0 +1 @@
bida-industry.com
1 bida-industry.com

23
shop001.csv Normal file
View File

@@ -0,0 +1,23 @@
az-sportline.de
bait-tools.de
bellbie.de
bellstedt-shop.de
bluespoon.de
efe-multimedia.de
getek-gmbh.de
goodtrade-b2b.de
gruene-reparatur.de
heatpaxx.de
jawerk.de
kombitex-shop.com
motorteile-online.de
musicfactory.tv
nordkauf.de
savageprofi.de
schmidtohg.de
smartshop-global.com
stoffparadies-zauberfee.de
storesys.de
toci.de
trendykids.de
vacano-gmbh.de
1 az-sportline.de
2 bait-tools.de
3 bellbie.de
4 bellstedt-shop.de
5 bluespoon.de
6 efe-multimedia.de
7 getek-gmbh.de
8 goodtrade-b2b.de
9 gruene-reparatur.de
10 heatpaxx.de
11 jawerk.de
12 kombitex-shop.com
13 motorteile-online.de
14 musicfactory.tv
15 nordkauf.de
16 savageprofi.de
17 schmidtohg.de
18 smartshop-global.com
19 stoffparadies-zauberfee.de
20 storesys.de
21 toci.de
22 trendykids.de
23 vacano-gmbh.de

21
shop002.csv Normal file
View File

@@ -0,0 +1,21 @@
101golf.de
a-handels.de
antirutsch-shop.de
badazzcustoms-germany.shop
baustein-shop.net
cordoba-buch.de
diskuszucht-piwowarski-shop.de
duftmoment.de
fliesenhorizont.de
geoweinhaus.de
gp-metallum.de
hochdruck-shop.de
karl-jenter-shop.eu
landcruiser-parts.de
metalizer-records.de
mtw-tools.de
perfecto-futternapf.de
shop-behrend-sgt.de
teich-center.de
tueren-plus-fenster.de
zenris-group.de
1 101golf.de
2 a-handels.de
3 antirutsch-shop.de
4 badazzcustoms-germany.shop
5 baustein-shop.net
6 cordoba-buch.de
7 diskuszucht-piwowarski-shop.de
8 duftmoment.de
9 fliesenhorizont.de
10 geoweinhaus.de
11 gp-metallum.de
12 hochdruck-shop.de
13 karl-jenter-shop.eu
14 landcruiser-parts.de
15 metalizer-records.de
16 mtw-tools.de
17 perfecto-futternapf.de
18 shop-behrend-sgt.de
19 teich-center.de
20 tueren-plus-fenster.de
21 zenris-group.de

23
shop006.csv Normal file
View File

@@ -0,0 +1,23 @@
armyshop-hoenig.de
barracuda-online.de
bikeside.de
brennstoff-koblenz.de
display-order-shop.de
gebetsfaehnchen.de
goods-for-people.de
hosenmode.de
hund-natuerlich.de
lier24.com
marios-fliegendose.de
meinkiosk24.de
namenspatron.de
prisos.de
rearseatdeletes-420.com
scorpio-shop.de
selbermachen-versand.de
slimraven-shop.de
spiel-und-modellbau.com
sportfreund24.de
stefanies-stoffzauber.de
weserbootshop.de
widmann-automation.net
1 armyshop-hoenig.de
2 barracuda-online.de
3 bikeside.de
4 brennstoff-koblenz.de
5 display-order-shop.de
6 gebetsfaehnchen.de
7 goods-for-people.de
8 hosenmode.de
9 hund-natuerlich.de
10 lier24.com
11 marios-fliegendose.de
12 meinkiosk24.de
13 namenspatron.de
14 prisos.de
15 rearseatdeletes-420.com
16 scorpio-shop.de
17 selbermachen-versand.de
18 slimraven-shop.de
19 spiel-und-modellbau.com
20 sportfreund24.de
21 stefanies-stoffzauber.de
22 weserbootshop.de
23 widmann-automation.net

2
shop009.csv Normal file
View File

@@ -0,0 +1,2 @@
schuettec.de
bida-industry.de
1 schuettec.de
2 bida-industry.de

26
shop012.csv Normal file
View File

@@ -0,0 +1,26 @@
co-comp.de
coffeeshop-oberpfalz.de
dogs-and-more.at
donau-wald-kakteen.de
extrem-bad.de
galaxymed.de
handykaputt.de
hellas-foods.de
hs-sound.de
kfz-atd.de
lead-adventure.de
mattenwerk.eu
maulberger-shop.de
piercing-express.com
pinion-bikes.de
poseidon-angelsport.de
pure-corde-shop.com
pvcfittings.at
shop-fuelfriend.de
simplywine.at
spielgeist.de
sport-imperia.com
sys2sell.de
tcgwarehouse.de
the-crochet.at
tunemybike.de
1 co-comp.de
2 coffeeshop-oberpfalz.de
3 dogs-and-more.at
4 donau-wald-kakteen.de
5 extrem-bad.de
6 galaxymed.de
7 handykaputt.de
8 hellas-foods.de
9 hs-sound.de
10 kfz-atd.de
11 lead-adventure.de
12 mattenwerk.eu
13 maulberger-shop.de
14 piercing-express.com
15 pinion-bikes.de
16 poseidon-angelsport.de
17 pure-corde-shop.com
18 pvcfittings.at
19 shop-fuelfriend.de
20 simplywine.at
21 spielgeist.de
22 sport-imperia.com
23 sys2sell.de
24 tcgwarehouse.de
25 the-crochet.at
26 tunemybike.de

21
shop013.csv Normal file
View File

@@ -0,0 +1,21 @@
cice.de
corseartcarparts.de
dogfilous.com
dwstore.de
eurorein.de
feuerwerkshop-frankfurt.de
golfversand.de
hansepack24.com
jakobsweg-bewahrer.de
karthaeuser-muehle.shop
kennzeichenhalterung.de
kettenschmie.de
lohofol.com
mitbringsel.shop
napoliconnection-shop.de
onlineshop-kueche.de
qb-insects.de
sportkoch.at
wirkwarenhaus.de
xn--zhler-plattform-0kb.de
shop.catsonappletrees.de
1 cice.de
2 corseartcarparts.de
3 dogfilous.com
4 dwstore.de
5 eurorein.de
6 feuerwerkshop-frankfurt.de
7 golfversand.de
8 hansepack24.com
9 jakobsweg-bewahrer.de
10 karthaeuser-muehle.shop
11 kennzeichenhalterung.de
12 kettenschmie.de
13 lohofol.com
14 mitbringsel.shop
15 napoliconnection-shop.de
16 onlineshop-kueche.de
17 qb-insects.de
18 sportkoch.at
19 wirkwarenhaus.de
20 xn--zhler-plattform-0kb.de
21 shop.catsonappletrees.de

28
shop016.csv Normal file
View File

@@ -0,0 +1,28 @@
7-lights.de
ab-versand.de
abc-brandschutz.de
almhonig.at
bike-3.de
bike-quad-shop.de
biketools24.de
bionis-shop.de
bos-tec.com
cinestar-order.de
dancetowels.com
deinmalershop.de
dragasias-foods.com
haushalts-profis.de
kolibri-24.ch
peaa-shop.de
placeofvape.shop
ro-electronic.de
rosenauer-kg.de
saporino.de
spielzeugshop-berlin.de
steinkorb-gabione.de
tabletop-art.de
thermometerwelt.de
trades-best.de
wasgutestrinken.de
waterworld24.com
zauberfeder-shop.de
1 7-lights.de
2 ab-versand.de
3 abc-brandschutz.de
4 almhonig.at
5 bike-3.de
6 bike-quad-shop.de
7 biketools24.de
8 bionis-shop.de
9 bos-tec.com
10 cinestar-order.de
11 dancetowels.com
12 deinmalershop.de
13 dragasias-foods.com
14 haushalts-profis.de
15 kolibri-24.ch
16 peaa-shop.de
17 placeofvape.shop
18 ro-electronic.de
19 rosenauer-kg.de
20 saporino.de
21 spielzeugshop-berlin.de
22 steinkorb-gabione.de
23 tabletop-art.de
24 thermometerwelt.de
25 trades-best.de
26 wasgutestrinken.de
27 waterworld24.com
28 zauberfeder-shop.de

27
shop018.csv Normal file
View File

@@ -0,0 +1,27 @@
107-store.de
123autopflegeshop.de
akkijewelry.com
anmetec-shop.de
apiformes.de
baitshop.at
basix1.de
bayern-hof.shop
bonaval.shop
chiropraktik-shop.eu
color-your-nails.de
garnelfe.de
guertel-vmp.de
herzog-kita-tee.de
jahrmarktbonbon.de
labiteagnitevi.eu
lafiore24.de
levowear.de
limondo.shop
massage-gaertringen.de
mkk-pyrohandel.de
modellbahn-nord.at
mtarchery.com
pixiemania.net
regoh.de
tapeshop.eu
zuendstoff-feuerwerkstechnik.de
1 107-store.de
2 123autopflegeshop.de
3 akkijewelry.com
4 anmetec-shop.de
5 apiformes.de
6 baitshop.at
7 basix1.de
8 bayern-hof.shop
9 bonaval.shop
10 chiropraktik-shop.eu
11 color-your-nails.de
12 garnelfe.de
13 guertel-vmp.de
14 herzog-kita-tee.de
15 jahrmarktbonbon.de
16 labiteagnitevi.eu
17 lafiore24.de
18 levowear.de
19 limondo.shop
20 massage-gaertringen.de
21 mkk-pyrohandel.de
22 modellbahn-nord.at
23 mtarchery.com
24 pixiemania.net
25 regoh.de
26 tapeshop.eu
27 zuendstoff-feuerwerkstechnik.de

26
shop020.csv Normal file
View File

@@ -0,0 +1,26 @@
artlaender-angelzentrum.de
b2b-pv.de
cannabis-samen-steckling.de
coriko.de
dasa-tec.de
daystarone.de
diekleinewerft.de
fideo-online.de
foerg-flyfishing.de
hannes-hawaii-shop.de
hypoka-haustechnik24.de
kiddies-geschenkewelt.de
larpzeit-shop.de
leistenhammer.de
loveafair-weimar.de
ms-beschlaege.de
olivenholz-design.de
premium-kollektion.de
schnaeppchenkiste.live
schnupper-stuebchen.de
sevendustysisters.de
tierverliebt.shop
topsell24.com
traderbiene.de
ulfbo.com
weidewaechter.com
1 artlaender-angelzentrum.de
2 b2b-pv.de
3 cannabis-samen-steckling.de
4 coriko.de
5 dasa-tec.de
6 daystarone.de
7 diekleinewerft.de
8 fideo-online.de
9 foerg-flyfishing.de
10 hannes-hawaii-shop.de
11 hypoka-haustechnik24.de
12 kiddies-geschenkewelt.de
13 larpzeit-shop.de
14 leistenhammer.de
15 loveafair-weimar.de
16 ms-beschlaege.de
17 olivenholz-design.de
18 premium-kollektion.de
19 schnaeppchenkiste.live
20 schnupper-stuebchen.de
21 sevendustysisters.de
22 tierverliebt.shop
23 topsell24.com
24 traderbiene.de
25 ulfbo.com
26 weidewaechter.com

26
shop025.csv Normal file
View File

@@ -0,0 +1,26 @@
123jagd.de
alecso.de
b2b-sasagroup.de
babyvilla.de
bergstraesser-fitness-wellness.de
boillshop.com
buy21.de
cargoworkbench.com
cubiculum-shop.de
custom-junkies.com
das-falkenkind.de
deutsche-kunstblume-shop.de
dkunert.de
druckluft-welt.de
e-schnaeppchenkauf.de
fischzucht-koicenter.de
grownert.de
makoen.com
mas-sales.shop
megaprofi-business.com
musicfactorystore.de
shadesign.de
tackle-company.de
thundelec.at
ww-boule.de
yura-raeder.com
1 123jagd.de
2 alecso.de
3 b2b-sasagroup.de
4 babyvilla.de
5 bergstraesser-fitness-wellness.de
6 boillshop.com
7 buy21.de
8 cargoworkbench.com
9 cubiculum-shop.de
10 custom-junkies.com
11 das-falkenkind.de
12 deutsche-kunstblume-shop.de
13 dkunert.de
14 druckluft-welt.de
15 e-schnaeppchenkauf.de
16 fischzucht-koicenter.de
17 grownert.de
18 makoen.com
19 mas-sales.shop
20 megaprofi-business.com
21 musicfactorystore.de
22 shadesign.de
23 tackle-company.de
24 thundelec.at
25 ww-boule.de
26 yura-raeder.com

18
shop026.csv Normal file
View File

@@ -0,0 +1,18 @@
ascaris-kauartikel.de
b1-kuechenshop.de
corexxtrading.de
eliah-sahil.com
funundsport.de
gandeshop.de
go-modellbau.de
kingtechturbine.lu
martin-elektronik.de
mbw-electronic-online.de
olivenholzprodukte.de
orkansports.de
pulox.de
shop-asi.de
spiele-teufel.com
stillvaping24.de
strike.eu
teichhandel-24.de
1 ascaris-kauartikel.de
2 b1-kuechenshop.de
3 corexxtrading.de
4 eliah-sahil.com
5 funundsport.de
6 gandeshop.de
7 go-modellbau.de
8 kingtechturbine.lu
9 martin-elektronik.de
10 mbw-electronic-online.de
11 olivenholzprodukte.de
12 orkansports.de
13 pulox.de
14 shop-asi.de
15 spiele-teufel.com
16 stillvaping24.de
17 strike.eu
18 teichhandel-24.de

20
shop027.csv Normal file
View File

@@ -0,0 +1,20 @@
bike-prof.de
blazing-cards.de
bubblestore.de
cretanoil.de
de-tronik.de
doghouse24.de
flexible-computers.de
gartenbahnshop.de
haesa.de
hms-shop24.de
hucklebuck-finja.de
magierspiele.de
monisbastelkiste.de
schloss-beschlag.com
shisha-tankstelle.de
soel-shop.de
soul-distribution.com
spielwaren-laumann.de
wiesenknopf-kaninchenfutter.de
wolldealer24.de
1 bike-prof.de
2 blazing-cards.de
3 bubblestore.de
4 cretanoil.de
5 de-tronik.de
6 doghouse24.de
7 flexible-computers.de
8 gartenbahnshop.de
9 haesa.de
10 hms-shop24.de
11 hucklebuck-finja.de
12 magierspiele.de
13 monisbastelkiste.de
14 schloss-beschlag.com
15 shisha-tankstelle.de
16 soel-shop.de
17 soul-distribution.com
18 spielwaren-laumann.de
19 wiesenknopf-kaninchenfutter.de
20 wolldealer24.de

27
shop028.csv Normal file
View File

@@ -0,0 +1,27 @@
alpa-industrielack.de
angelcenter-voegler.de
badiwo.net
bio-balsam.de
bleigussformen-shop.de
brenox.de
business-ausstatter.de
dampfshopsteinfurt.de
ehawa-shop.de
ersatzteilzone.at
gartenundtierbedarf.de
hubini-shop.com
hundebettenmanufaktur.de
meine-kleine-eisenbahn.de
mt-automotive-parts.de
mtautoteile.de
reifenzubehoer-online.de
risto-shop.de
santo-tierfutter-zubehoer.de
schoenes-wohnen-24.de
sinneswerkfreiburg.de
solar-lange.shop
spar-paradies.eu
sport-shop-fischbach.de
theos-werkzeuge.eu
wolle-socken.de
uhlig-kakteen.de
1 alpa-industrielack.de
2 angelcenter-voegler.de
3 badiwo.net
4 bio-balsam.de
5 bleigussformen-shop.de
6 brenox.de
7 business-ausstatter.de
8 dampfshopsteinfurt.de
9 ehawa-shop.de
10 ersatzteilzone.at
11 gartenundtierbedarf.de
12 hubini-shop.com
13 hundebettenmanufaktur.de
14 meine-kleine-eisenbahn.de
15 mt-automotive-parts.de
16 mtautoteile.de
17 reifenzubehoer-online.de
18 risto-shop.de
19 santo-tierfutter-zubehoer.de
20 schoenes-wohnen-24.de
21 sinneswerkfreiburg.de
22 solar-lange.shop
23 spar-paradies.eu
24 sport-shop-fischbach.de
25 theos-werkzeuge.eu
26 wolle-socken.de
27 uhlig-kakteen.de

22
shop029.csv Normal file
View File

@@ -0,0 +1,22 @@
anke-s-dampferhafen.de
bauking-intercompany.de
bestreiniger.de
bodywin.de
cleansv-shop.de
delight.de
diesel-tanks.de
farben-fischer.shop
hilltronik.de
hutx.de
hypoka-haustechnik24.de
josef.shop
kameraclub.de
ktc-tec.de
kunsthandwerkstube.de
landmaschinenteile-thull.de
looney-toys.at
m-sale.de
schaedlingsstop.com
technic24.eu
teekontor-schott.de
theob2b.de
1 anke-s-dampferhafen.de
2 bauking-intercompany.de
3 bestreiniger.de
4 bodywin.de
5 cleansv-shop.de
6 delight.de
7 diesel-tanks.de
8 farben-fischer.shop
9 hilltronik.de
10 hutx.de
11 hypoka-haustechnik24.de
12 josef.shop
13 kameraclub.de
14 ktc-tec.de
15 kunsthandwerkstube.de
16 landmaschinenteile-thull.de
17 looney-toys.at
18 m-sale.de
19 schaedlingsstop.com
20 technic24.eu
21 teekontor-schott.de
22 theob2b.de

22
shop031.csv Normal file
View File

@@ -0,0 +1,22 @@
badosan.de
broshrimp.de
carocase.com
fgb-rescuetechnik.shop
hannoversballonladen.de
jackets-to-go.de
kaffee-wahler.com
korsettshop.at
kynoshop.de
lagercontainerxxl.at
my-smoker24.de
mykima.de
printeramerch.de
sdampferle-spiele.de
sieg-machines.de
society-beauty.de
sweet-sin.de
walzos.de
werkstattausruestung-service.de
westerwald-shop.de
wischersmotoshop.de
zeitgeist-shop.com
1 badosan.de
2 broshrimp.de
3 carocase.com
4 fgb-rescuetechnik.shop
5 hannoversballonladen.de
6 jackets-to-go.de
7 kaffee-wahler.com
8 korsettshop.at
9 kynoshop.de
10 lagercontainerxxl.at
11 my-smoker24.de
12 mykima.de
13 printeramerch.de
14 sdampferle-spiele.de
15 sieg-machines.de
16 society-beauty.de
17 sweet-sin.de
18 walzos.de
19 werkstattausruestung-service.de
20 westerwald-shop.de
21 wischersmotoshop.de
22 zeitgeist-shop.com

24
shop034.csv Normal file
View File

@@ -0,0 +1,24 @@
alpinsport-basis.de
bankrottstore.com
bedfordparts.de
boeco-gmbh.de
brennschneiden.de
deinsporthaus.de
fashion-unikat.de
gartenfiguren.de
gingerbeard3d.de
jjgmbh.de
klima-express-shop.de
lusitero.com
mein-schlafkomfort.de
mixdrink24.de
pferdeliebe.de
praemoo.com
rms-skituning.de
skani-shop.de
smthandel.de
superjuju.biz
terschluesen-shop.de
veloboutique.eu
xn--kanapee-mbel-djb.de
zwergig.de
1 alpinsport-basis.de
2 bankrottstore.com
3 bedfordparts.de
4 boeco-gmbh.de
5 brennschneiden.de
6 deinsporthaus.de
7 fashion-unikat.de
8 gartenfiguren.de
9 gingerbeard3d.de
10 jjgmbh.de
11 klima-express-shop.de
12 lusitero.com
13 mein-schlafkomfort.de
14 mixdrink24.de
15 pferdeliebe.de
16 praemoo.com
17 rms-skituning.de
18 skani-shop.de
19 smthandel.de
20 superjuju.biz
21 terschluesen-shop.de
22 veloboutique.eu
23 xn--kanapee-mbel-djb.de
24 zwergig.de

21
shop037.csv Normal file
View File

@@ -0,0 +1,21 @@
antikissimo.de
baubeschlag.shop
bikediscount.at
blublife.de
dcsportshop.de
fantic26.de
gotec-shop.com
interluxe.de
kartonkoenig-shop.de
kaufdochwasduwillst.de
ludwig-pfaff.de
mahafaly.de
myschmuckwelt.de
photolux-shopping.de
reitsport-hugenberg.de
strickkontor.de
tellurian-games.de
uhrig-autoteile.de
uwesbienenkorb.de
valhalla-nutritionstore.de
vffowbuchverkauf.de
1 antikissimo.de
2 baubeschlag.shop
3 bikediscount.at
4 blublife.de
5 dcsportshop.de
6 fantic26.de
7 gotec-shop.com
8 interluxe.de
9 kartonkoenig-shop.de
10 kaufdochwasduwillst.de
11 ludwig-pfaff.de
12 mahafaly.de
13 myschmuckwelt.de
14 photolux-shopping.de
15 reitsport-hugenberg.de
16 strickkontor.de
17 tellurian-games.de
18 uhrig-autoteile.de
19 uwesbienenkorb.de
20 valhalla-nutritionstore.de
21 vffowbuchverkauf.de

17
shop042.csv Normal file
View File

@@ -0,0 +1,17 @@
3dtec-ek.de
alsterduene.de
augsburger-angelcenter-shop.com
best-nutrition.de
fendt-ersatzteile24.de
futterpan.de
hussenkoenig.de
liquor-store.org
neumann-gewuerze.de
orangedecor.de
puremoda.de
tackle-master.de
tbf-shop.de
udopea.de
veganversand-lebensweise.eu
xxlgrosshandel.de
yodasdata.biz
1 3dtec-ek.de
2 alsterduene.de
3 augsburger-angelcenter-shop.com
4 best-nutrition.de
5 fendt-ersatzteile24.de
6 futterpan.de
7 hussenkoenig.de
8 liquor-store.org
9 neumann-gewuerze.de
10 orangedecor.de
11 puremoda.de
12 tackle-master.de
13 tbf-shop.de
14 udopea.de
15 veganversand-lebensweise.eu
16 xxlgrosshandel.de
17 yodasdata.biz

20
shop044.csv Normal file
View File

@@ -0,0 +1,20 @@
acrylcase.com
anhaengerteilespezi.de
anigaru.de
bauking-marketingportal.de
bavarian-nuts.de
bos-mounts.de
egesat.de
forellengrund-shop.de
garten-direkt24.de
kastaun-dach.shop
king-spa.de
kroeger-tiernahrung.com
manufaktur-lichtbogen.de
naturladen-feuchtwangen.de
siegelringe-hersteller.de
sturmbude.de
tirolmusikverlag.at
tomundpatty.de
zooherz.de
gastroline24.net
1 acrylcase.com
2 anhaengerteilespezi.de
3 anigaru.de
4 bauking-marketingportal.de
5 bavarian-nuts.de
6 bos-mounts.de
7 egesat.de
8 forellengrund-shop.de
9 garten-direkt24.de
10 kastaun-dach.shop
11 king-spa.de
12 kroeger-tiernahrung.com
13 manufaktur-lichtbogen.de
14 naturladen-feuchtwangen.de
15 siegelringe-hersteller.de
16 sturmbude.de
17 tirolmusikverlag.at
18 tomundpatty.de
19 zooherz.de
20 gastroline24.net

22
shop045.csv Normal file
View File

@@ -0,0 +1,22 @@
alittlebitmorecolor.de
all4water.de
bestpricegeek.de
bg-sicherheitstechnik.de
cse-technik.de
dein-schrotti.de
der-kartshop.de
espressoxxl.de
firefly-crew-shop.de
grad-betonzaeune.de
ihb-shop.de
junghaehnel.de
marken-waescheshop.de
medizinmannshop.de
modellbau-nds.de
ortho24.at
plastidip-sale.com
sg-schmuck.de
steresa-fishing.de
toni-clark-shop.com
vorteil-led.de
zok-regattahandel.de
1 alittlebitmorecolor.de
2 all4water.de
3 bestpricegeek.de
4 bg-sicherheitstechnik.de
5 cse-technik.de
6 dein-schrotti.de
7 der-kartshop.de
8 espressoxxl.de
9 firefly-crew-shop.de
10 grad-betonzaeune.de
11 ihb-shop.de
12 junghaehnel.de
13 marken-waescheshop.de
14 medizinmannshop.de
15 modellbau-nds.de
16 ortho24.at
17 plastidip-sale.com
18 sg-schmuck.de
19 steresa-fishing.de
20 toni-clark-shop.com
21 vorteil-led.de
22 zok-regattahandel.de

22
shop046.csv Normal file
View File

@@ -0,0 +1,22 @@
air-suspension-parts.de
allgaeu-triathlon-shop.de
cod-baits.de
egetel.de
elektrokon.de
gastro-shop-24.com
handysparkauf.de
hdt-wickelaufsatz.de
itemstar-shop.de
nordostseeteekontor.de
onemanseries.shop
peters-barf-service.com
phmusicshop.at
qbparts.com
raubfischreaktor.de
rostdoc.de
sanide24.de
sportvibrations.com
svsboerse.com
top-messtechnik.com
tselikas-greekdelights.de
whisky-corner-ruesselsheim.de
1 air-suspension-parts.de
2 allgaeu-triathlon-shop.de
3 cod-baits.de
4 egetel.de
5 elektrokon.de
6 gastro-shop-24.com
7 handysparkauf.de
8 hdt-wickelaufsatz.de
9 itemstar-shop.de
10 nordostseeteekontor.de
11 onemanseries.shop
12 peters-barf-service.com
13 phmusicshop.at
14 qbparts.com
15 raubfischreaktor.de
16 rostdoc.de
17 sanide24.de
18 sportvibrations.com
19 svsboerse.com
20 top-messtechnik.com
21 tselikas-greekdelights.de
22 whisky-corner-ruesselsheim.de

20
shop051.csv Normal file
View File

@@ -0,0 +1,20 @@
aqua-fu-tec.de
berndt-gloeckner.eu
dasstaubsaugercenter.de
eiscold.de
ersatzteilcenter.net
fahrersitze.de
gorilla-parts.de
guwi.de
jtl-beispiel.de
laudi-versand.de
lovelyness-shop.de
naehplatzl.at
onlinesurfshop.de
refurbshop24.de
repaircenter24.ch
rollladenrolltor.de
sac-online-world.de
schneider-consulting-elektronik.de
vapehaus24.de
zigarre-whisky.de
1 aqua-fu-tec.de
2 berndt-gloeckner.eu
3 dasstaubsaugercenter.de
4 eiscold.de
5 ersatzteilcenter.net
6 fahrersitze.de
7 gorilla-parts.de
8 guwi.de
9 jtl-beispiel.de
10 laudi-versand.de
11 lovelyness-shop.de
12 naehplatzl.at
13 onlinesurfshop.de
14 refurbshop24.de
15 repaircenter24.ch
16 rollladenrolltor.de
17 sac-online-world.de
18 schneider-consulting-elektronik.de
19 vapehaus24.de
20 zigarre-whisky.de

23
shop056.csv Normal file
View File

@@ -0,0 +1,23 @@
cardsparadise.com
drugcos.de
etonerkartusche.ch
filzwolle.de
florascent-apothecary.com
forellen-fischen.de
handwerksmontagen.at
harzplant-seeds.de
hd-online-shop.com
henningsallerlei.de
kleene-racker.de
lanz-kundendienst.de
marderfallen.de
panterapack.com
piercing-express.com
remotaparts.de
scootergarage.shop
toeller.shop
tragetaschen-onlineshop.de
tuerbeschlaege24.de
waschfreaks.de
worldofgourmet.de
wurstschmitz-shop.de
1 cardsparadise.com
2 drugcos.de
3 etonerkartusche.ch
4 filzwolle.de
5 florascent-apothecary.com
6 forellen-fischen.de
7 handwerksmontagen.at
8 harzplant-seeds.de
9 hd-online-shop.com
10 henningsallerlei.de
11 kleene-racker.de
12 lanz-kundendienst.de
13 marderfallen.de
14 panterapack.com
15 piercing-express.com
16 remotaparts.de
17 scootergarage.shop
18 toeller.shop
19 tragetaschen-onlineshop.de
20 tuerbeschlaege24.de
21 waschfreaks.de
22 worldofgourmet.de
23 wurstschmitz-shop.de

84
shop999.csv Normal file
View File

@@ -0,0 +1,84 @@
3shop-jg.shop999.jtl-hosting.de
5shop-fp.shop999.jtl-hosting.de
5shop-mh.shop999.jtl-hosting.de
abran.shop999.jtl-hosting.de
akshop.shop999.jtl-hosting.de
az-test.shop999.jtl-hosting.de
basicbey.shop999.jtl-hosting.de
bjoern.shop999.jtl-hosting.de
bonnkenobi.shop999.jtl-hosting.de
brancho.shop999.jtl-hosting.de
buildtest-rs.shop999.jtl-hosting.de
connect-fp.shop999.jtl-hosting.de
daktuell-test.shop999.jtl-hosting.de
danny.shop5.shop999.jtl-hosting.de
dauzis.shop999.jtl-hosting.de
dexshop.shop999.jtl-hosting.de
dh-master.shop999.jtl-hosting.de
dheil.shop999.jtl-hosting.de
dilaz-master.shop999.jtl-hosting.de
dilaz-test.shop999.jtl-hosting.de
dilaz2-test.shop999.jtl-hosting.de
dlattek.shop999.jtl-hosting.de
dw.shop999.jtl-hosting.de
eazysales.shop999.jtl-hosting.de
fhenn.shop999.jtl-hosting.de
gbuettner.shop999.jtl-hosting.de
hilkes-shop.shop999.jtl-hosting.de
ilona-2.shop999.jtl-hosting.de
ilona.shop999.jtl-hosting.de
jf43shop.shop999.jtl-hosting.de
jk-test.shop999.jtl-hosting.de
joeshop.shop999.jtl-hosting.de
jtl-hosting-emailtest.de
jtlshop-cschneider01.shop999.jtl-hosting.de
kh-test.shop999.jtl-hosting.de
lh-5.shop999.jtl-hosting.de
link11-testshop.shop999.jtl-hosting.de
master-lh.shop999.jtl-hosting.de
mimo02.shop999.de
mimo505.shop999.jtl-hosting.de
mko001.shop999.jtl-hosting.de
mvoelker2.shop999.jtl-hosting.de
mytestshop.shop999.jtl-hosting.de
ollishop.shop999.jtl-hosting.de
pc-test.shop999.jtl-hosting.de
pegasus-jtl.shop999.jtl-hosting.de
pf.shop999.jtl-hosting.de
pg-4.shop999.jtl-hosting.de
pg-5.shop999.jtl-hosting.de
pg-m.shop999.jtl-hosting.de
pierre.shop999.jtl-hosting.de
pk90e62065.shop999.jtl-hosting.de
ponsen-testshop.shop999.jtl-hosting.de
prime.shop999.jtl-hosting.de
probearbeiten.shop999.jtl-hosting.de
qalokalmaxsh1.shop999.jtl-hosting.de
qalokalmaxsh2.shop999.jtl-hosting.de
reuticon999.jtl-hosting.de
rk-1.shop999.jtl-hosting.de
rk-2.shop999.jtl-hosting.de
rk-3.shop999.jtl-hosting.de
robojul.shop999.jtl-hosting.de
shipping.shop999.jtl-hosting.de
shop4-jg.de.shop999.jtl-hosting.de
shop5-fm.shop999.jtl-hosting.de
shop5-mstickel.shop999.jtl-hosting.de
shop5-test-cr.shop999.jtl-hosting.de
shopowner.shop999.jtl-hosting.de
stapelshop.shop999.jtl-hosting.de
test-406-rs.shop999.jtl-hosting.de
test-500-rs.shop999.jtl-hosting.de
test-branch-rs.shop999.jtl-hosting.de
themaster.shop999.jtl-hosting.de
thoffmann.shop999.jtl-hosting.de
timniko.shop999.jtl-hosting.de
underground.shop999.jtl-hosting.de
update-delete-repeat.shop999.jtl-hosting.de
video.shop999.jtl-hosting.de
wchajan-1.shop999.jtl-hosting.de
webstollen.shop999.jtl-hosting.de
wps4.shop999.jtl-hosting.de
wps5.shop999.jtl-hosting.de
wpsm.shop999.jtl-hosting.de
zafira.shop999.jtl-hosting.de
1 3shop-jg.shop999.jtl-hosting.de
2 5shop-fp.shop999.jtl-hosting.de
3 5shop-mh.shop999.jtl-hosting.de
4 abran.shop999.jtl-hosting.de
5 akshop.shop999.jtl-hosting.de
6 az-test.shop999.jtl-hosting.de
7 basicbey.shop999.jtl-hosting.de
8 bjoern.shop999.jtl-hosting.de
9 bonnkenobi.shop999.jtl-hosting.de
10 brancho.shop999.jtl-hosting.de
11 buildtest-rs.shop999.jtl-hosting.de
12 connect-fp.shop999.jtl-hosting.de
13 daktuell-test.shop999.jtl-hosting.de
14 danny.shop5.shop999.jtl-hosting.de
15 dauzis.shop999.jtl-hosting.de
16 dexshop.shop999.jtl-hosting.de
17 dh-master.shop999.jtl-hosting.de
18 dheil.shop999.jtl-hosting.de
19 dilaz-master.shop999.jtl-hosting.de
20 dilaz-test.shop999.jtl-hosting.de
21 dilaz2-test.shop999.jtl-hosting.de
22 dlattek.shop999.jtl-hosting.de
23 dw.shop999.jtl-hosting.de
24 eazysales.shop999.jtl-hosting.de
25 fhenn.shop999.jtl-hosting.de
26 gbuettner.shop999.jtl-hosting.de
27 hilkes-shop.shop999.jtl-hosting.de
28 ilona-2.shop999.jtl-hosting.de
29 ilona.shop999.jtl-hosting.de
30 jf43shop.shop999.jtl-hosting.de
31 jk-test.shop999.jtl-hosting.de
32 joeshop.shop999.jtl-hosting.de
33 jtl-hosting-emailtest.de
34 jtlshop-cschneider01.shop999.jtl-hosting.de
35 kh-test.shop999.jtl-hosting.de
36 lh-5.shop999.jtl-hosting.de
37 link11-testshop.shop999.jtl-hosting.de
38 master-lh.shop999.jtl-hosting.de
39 mimo02.shop999.de
40 mimo505.shop999.jtl-hosting.de
41 mko001.shop999.jtl-hosting.de
42 mvoelker2.shop999.jtl-hosting.de
43 mytestshop.shop999.jtl-hosting.de
44 ollishop.shop999.jtl-hosting.de
45 pc-test.shop999.jtl-hosting.de
46 pegasus-jtl.shop999.jtl-hosting.de
47 pf.shop999.jtl-hosting.de
48 pg-4.shop999.jtl-hosting.de
49 pg-5.shop999.jtl-hosting.de
50 pg-m.shop999.jtl-hosting.de
51 pierre.shop999.jtl-hosting.de
52 pk90e62065.shop999.jtl-hosting.de
53 ponsen-testshop.shop999.jtl-hosting.de
54 prime.shop999.jtl-hosting.de
55 probearbeiten.shop999.jtl-hosting.de
56 qalokalmaxsh1.shop999.jtl-hosting.de
57 qalokalmaxsh2.shop999.jtl-hosting.de
58 reuticon999.jtl-hosting.de
59 rk-1.shop999.jtl-hosting.de
60 rk-2.shop999.jtl-hosting.de
61 rk-3.shop999.jtl-hosting.de
62 robojul.shop999.jtl-hosting.de
63 shipping.shop999.jtl-hosting.de
64 shop4-jg.de.shop999.jtl-hosting.de
65 shop5-fm.shop999.jtl-hosting.de
66 shop5-mstickel.shop999.jtl-hosting.de
67 shop5-test-cr.shop999.jtl-hosting.de
68 shopowner.shop999.jtl-hosting.de
69 stapelshop.shop999.jtl-hosting.de
70 test-406-rs.shop999.jtl-hosting.de
71 test-500-rs.shop999.jtl-hosting.de
72 test-branch-rs.shop999.jtl-hosting.de
73 themaster.shop999.jtl-hosting.de
74 thoffmann.shop999.jtl-hosting.de
75 timniko.shop999.jtl-hosting.de
76 underground.shop999.jtl-hosting.de
77 update-delete-repeat.shop999.jtl-hosting.de
78 video.shop999.jtl-hosting.de
79 wchajan-1.shop999.jtl-hosting.de
80 webstollen.shop999.jtl-hosting.de
81 wps4.shop999.jtl-hosting.de
82 wps5.shop999.jtl-hosting.de
83 wpsm.shop999.jtl-hosting.de
84 zafira.shop999.jtl-hosting.de

122
sync_security_policies_link11.py Executable file
View File

@@ -0,0 +1,122 @@
#!/bin/python
from env import *
import requests
import json
import pprint
# === Konfiguration ===
CONFIG_ID = "prod"
# Proxy Templates nur einen aktiv lassen
PROXY_TEMPLATE = "f4bf25a205a5"
# PROXY_TEMPLATE = "andere_template_id"
# Security Policies nur einen aktiv lassen, dieses dient als Vorlage
SECURITY_POLICY = "secpol-p414-jtl-hosting-de" # z.B. Shop022
# SECURITY_POLICY = "3f7a521c6570" # Shop023
# SECURITY_POLICY = "9cc8dd695d5c" # Shop024
# SECURITY_POLICY = "1f707fb18483" # Shop028
# Backend Services, nur einen aktiv lassen
# === Header für alle Requests ===
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
def domain_to_id(domain):
return domain.replace(".", "-")
def domain_to_secpol_id(domain):
return f"secpol-{domain_to_id(domain)}"
def domain_to_backend_id(domain):
return f"backend-{domain_to_id(domain)}"
def get_all_security_policies():
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/security-policies"
response = requests.get(url, headers=HEADERS,)
if response.status_code == 200:
print(f"[✓] Abfrage von Security policies erfolgreich.")
else:
print(f"[✗] Fehler bei ({policy}): {response.status_code}{response.text}")
return
res=json.loads(response.text)
#pprint.pp(res)
policies=[]
for item in res['items']:
policies+={item['id']}
#pprint.pp(policies)
return(policies)
def sync_security_policies(policy, destination):
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/security-policies/{policy}"
response = requests.get(url, headers=HEADERS,)
if response.status_code == 200:
print(f"[✓] Abfrage von Security policy '{policy}' erfolgreich.")
else:
print(f"[✗] Fehler bei ({policy}): {response.status_code}{response.text}")
return
#print(response.text)
# Hier ist die Source Security Policy
template=json.loads(response.text)
# Nun wird die Ziel-Security-Policy eingelesen
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/security-policies/{destination}"
response = requests.get(url, headers=HEADERS,)
if response.status_code == 200:
print(f"[✓] Abfrage von Security policy '{destination}' erfolgreich.")
else:
print(f"[✗] Fehler bei ({destination}): {response.status_code}{response.text}")
return
target=json.loads(response.text)
# die Pfad-Mappings werden auf die vom Template gesetzt, alles andere bleibt wie es war
target['map'] = template['map']
backendservice = domain_to_backend_id(target['name'])
# Neuen Backend-Service in allen Pfaden der Security Policy setzen
for mapitem in target['map']:
if (mapitem['id'] != "__site_level__"):
mapitem['backend_service'] = backendservice
#print(target)
# Speichern der Target Security Policy
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/security-policies/{destination}"
response = requests.put(url, headers=HEADERS,data=json.dumps(target))
if response.status_code == 200:
print(f"[✓] Security Policy '{destination}' erfolgreich gespeichert.")
else:
print(f"[✗] Fehler bei {destination}: {response.status_code}{response.text} {response.json()}")
def main():
#sync_security_policies(SECURITY_POLICY, 'secpol-shop051-jtl-hosting-de')
policies=get_all_security_policies()
print(f"The following security policies are synced to {SECURITY_POLICY}. Is this what you want?")
for policy in policies:
if ( policy != '__default__' ) and ( policy != SECURITY_POLICY ):
print(policy)
yesno = input("Enter yes or no:")
if ( yesno == "yes" ):
for policy in policies:
if ( policy != '__default__' ) and ( policy != SECURITY_POLICY ):
sync_security_policies(SECURITY_POLICY, policy)
# === CSV-Datei einlesen ===
if __name__ == "__main__":
main()

5
todelete.csv Normal file
View File

@@ -0,0 +1,5 @@
scorpio-shop.de
brauerei-meusel.de
meinhundshop.ch
scharfzahn-holzwerkzeuge.de
nicegameshop.com
1 scorpio-shop.de
2 brauerei-meusel.de
3 meinhundshop.ch
4 scharfzahn-holzwerkzeuge.de
5 nicegameshop.com

60
update_server_groups_link11.py Executable file
View File

@@ -0,0 +1,60 @@
#!/bin/python
from env import *
import requests
import json
# === Konfiguration ===
CONFIG_ID = "prod"
# Proxy Templates nur einen aktiv lassen
PROXY_TEMPLATE = "f4bf25a205a5"
# PROXY_TEMPLATE = "andere_template_id"
# Security Policies nur einen aktiv lassen
SECURITY_POLICY = "16fbf6d51b17" # z.B. Shop022
# SECURITY_POLICY = "3f7a521c6570" # Shop023
# SECURITY_POLICY = "9cc8dd695d5c" # Shop024
# SECURITY_POLICY = "1f707fb18483" # Shop028
# === Header für alle Requests ===
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
def get_server_groups():
url = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/server-groups"
response = requests.get(url, headers=HEADERS,)
if response.status_code == 200:
print(f"[✓] Abfrage von server groups erfolgreich.")
else:
print(f"[✗] Fehler bei Abfrage von server groups): {response.status_code}{response.text}")
#print(response.text)
res=json.loads(response.text)
for key,value in res.items():
if ( key != "items" ):
print (key, value, "\n")
else:
print(key)
for items in value: # Items enthält eine einzelne Server Group
for key2, value2 in items.items():
if ( (key2 == "security_policy") and (value2 == "16fbf6d51b17") ):
items['security_policy'] = "secpol-shop022-jtl-hosting-de"
url2 = f"https://jtlwaap.app.reblaze.io/api/v4.0/conf/{CONFIG_ID}/server-groups/{items['id']}"
#print(url2)
response = requests.put(url2, headers=HEADERS,data=json.dumps(items))
if response.status_code == 200:
print(f"[✓] Server group {items['id']} erfolgreich aktualisiert.")
else:
print(f"[✗] Fehler bei Aktualisierung von server group {items['id']}): {response.status_code}{response.text}")
print(key2, value2)
def main():
get_server_groups()
# === CSV-Datei einlesen ===
if __name__ == "__main__":
main()