Bu script, ağ bağlantısı testlerini gerçekleştirirken “takılı kalma” (hang) durumunu önlemek için her adıma katı zaman sınırları (Timeout) uygular. Eğer bir işlem (özellikle PowerShell) 30 saniye içinde yanıt vermezse, script o işlemi otomatik olarak sonlandırır ve “Zaman Aşımı” hatası raporlar.
Aşağıdaki kodu
Comodo/Xcitium Panel > ITSM > Remote Monitoring and Management > Procedures kısmında yeni bir Presedür / Procedure Script oluştur deyip uygun yere yapıştırın.
Sorularınızı yorum kısmında sorabilirsiniz.
—————– KOD ————–
# -*- coding: utf-8 -*-
“””
====================================================================================================
SCRIPT KÜNYESİ: TANI VE HATA AYIKLAMA ARACI v2 (TIMEOUT KORUMALI)
====================================================================================================
SCRIPT ADI: Network Diagnostic Tool v2 (with Timeout)
YAZAR/TARİH: H. Kaan ATASOY (atasoyhk@gmail.com) / 05.12.2025
HEDEF SİSTEM: Windows 10 / 11
PYTHON SÜRÜMÜ: Python 2.7 / 3.x Uyumlu
AÇIKLAMA:
Bu script, ağ bağlantısı testlerini gerçekleştirirken “takılı kalma” (hang) durumunu
önlemek için her adıma katı zaman sınırları (Timeout) uygular.
Eğer bir işlem (özellikle PowerShell) 30 saniye içinde yanıt vermezse, script o işlemi
otomatik olarak sonlandırır ve “Zaman Aşımı” hatası raporlar.
TESTLER:
1. DNS ÇÖZÜMLEME
2. SOCKET BAĞLANTISI (5 Saniye Timeout)
3. POWERSHELL İNDİRME TESTİ (30 Saniye Timeout – Korumalı)
====================================================================================================
“””
import os
import sys
import socket
import subprocess
import time
# — AYARLAR —
Target_Host = “emscomo.tempobpo.net”
Target_Url = “https://siteadi.com/dosyaadiniz.msi”
Temp_File = “C:\\Windows\\Temp\\debug_test_file.msi”
# Çıktıların anında panele düşmesi için flush yapıyoruz
def log(msg):
print(msg)
sys.stdout.flush()
log(“-” * 60)
log(“DIAGNOSTIC TEST v2 BASLIYOR (TIMEOUT KORUMALI)”)
log(“-” * 60)
# — TEST 1: DNS COZUMLEME —
log(“\n[TEST 1] DNS Cozumleme Kontrolu ({0})…”.format(Target_Host))
try:
ip_address = socket.gethostbyname(Target_Host)
log(“[OK] DNS Basarili. Cozumlenen IP: ” + ip_address)
except Exception as e:
log(“[FAIL] DNS Hatasi! Bilgisayar sunucu ismini cozemiyor.”)
log(“Hata Detayi: ” + str(e))
# — TEST 2: PORT ERISIMI (SOCKET) —
log(“\n[TEST 2] Sunucuya Port Erisimi (443/HTTPS)…”)
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5) # 5 saniye icinde cevap gelmezse kes
result = s.connect_ex((Target_Host, 443))
if result == 0:
log(“[OK] Sunucuya 443 portundan erisim VAR.”)
else:
log(“[FAIL] Port Erisim Hatasi! Kod: ” + str(result))
log(“NOT: Bu kod 10060 ise ‘Zaman Asimi’, 10061 ise ‘Reddedildi’ demektir.”)
s.close()
except Exception as e:
log(“[FAIL] Socket Baglanti Hatasi: ” + str(e))
# — TEST 3: POWERSHELL İNDİRME TESTİ (TIMEOUTLU) —
log(“\n[TEST 3] PowerShell Indirme Denemesi (Maksimum 30 Saniye)…”)
# PowerShell komutu
ps_script = “””
try {
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
$client = New-Object System.Net.WebClient;
$url = ‘””” + Target_Url + “””‘;
$dest = ‘””” + Temp_File + “””‘;
Write-Host “Indirme deneniyor…”;
$client.DownloadFile($url, $dest);
Write-Host “SUCCESS: Indirme basarili.”;
}
catch {
Write-Host “PS_ERROR: ” $_.Exception.Message;
}
“””
try:
cmd = ‘powershell -Command “{0}”‘.format(ps_script.replace(‘\n’, ‘ ‘))
# İşlemi başlatıyoruz ama sonucunu beklemiyoruz (henüz)
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# — ZAMANLAYICI DÖNGÜSÜ —
timeout_seconds = 30
start_time = time.time()
is_timeout = True
while (time.time() – start_time) < timeout_seconds:
if proc.poll() is not None:
# İşlem 30 saniyeden önce bitti, harika.
is_timeout = False
break
time.sleep(1) # 1 saniye bekle ve tekrar kontrol et
if is_timeout:
# Süre doldu ama işlem bitmedi -> ZORLA ÖLDÜR
log(“[!!!] ZAMAN ASIMI: PowerShell 30 saniyedir cevap vermiyor.”)
log(“[!!!] TESHIS: Guvenlik duvari (Firewall) paketleri ‘DROP’ ediyor.”)
# Process’i oldur
try:
# Windows taskkill komutuyla işlemi sonlandır
subprocess.call([‘taskkill’, ‘/F’, ‘/T’, ‘/PID’, str(proc.pid)])
except:
pass
else:
# Zamanında bitti, çıktıları oku
out, err = proc.communicate()
log(“— PowerShell Ciktisi —“)
log(out)
if err:
log(“— Hata Ciktisi —“)
log(err)
except Exception as e:
log(“[FAIL] Python Script Hatasi: ” + str(e))
# — TEMIZLIK —
if os.path.exists(Temp_File):
try: os.remove(Temp_File)
except: pass
log(“\n” + “-” * 60)
log(“TEST TAMAMLANDI.”)
log(“-” * 60)