1919
2020app = FastAPI (title = "Network Utilities Service" )
2121
22+ request_timeout = int (os .getenv ("REQUEST_TIMEOUT" , "25" ))
23+
2224if not os .getenv ("DISABLE_CORS" ):
2325 app .add_middleware (
2426 CORSMiddleware ,
@@ -72,7 +74,7 @@ def get_certificate(hostname: str, port: int = 443) -> CertificateCheckResult:
7274 ctx .verify_mode = ssl .CERT_REQUIRED
7375
7476 try :
75- with socket .create_connection ((hostname , port ), timeout = 10 ) as sock :
77+ with socket .create_connection ((hostname , port ), timeout = request_timeout ) as sock :
7678 with ctx .wrap_socket (sock , server_hostname = hostname ) as ssock :
7779 cert = ssock .getpeercert ()
7880
@@ -126,7 +128,7 @@ def check_hsts(url: str) -> HSTSCheckResult:
126128 url = "https://" + url
127129
128130 try :
129- with httpx .Client (timeout = 10 , follow_redirects = True ) as client :
131+ with httpx .Client (timeout = request_timeout , follow_redirects = True ) as client :
130132 resp = client .get (url )
131133 hsts = resp .headers .get ("Strict-Transport-Security" )
132134 if not hsts :
@@ -180,7 +182,7 @@ def check_http_to_https_redirect(domain: str) -> RedirectCheckResult:
180182
181183 try :
182184 redirect_chain = []
183- with httpx .Client (follow_redirects = True , max_redirects = 25 , timeout = 10 ) as client :
185+ with httpx .Client (follow_redirects = True , max_redirects = 25 , timeout = request_timeout ) as client :
184186 resp = client .get (http_url )
185187 for r in resp .history :
186188 redirect_chain .append (
@@ -271,8 +273,8 @@ class WhoisResult(BaseModel):
271273def dns_query (domain : str , record_type : str = "A" , resolver_ip : str | None = None ) -> DNSQueryResult :
272274 try :
273275 resolver = dns .resolver .Resolver ()
274- resolver .timeout = 5
275- resolver .lifetime = 5
276+ resolver .timeout = request_timeout
277+ resolver .lifetime = request_timeout
276278 if resolver_ip :
277279 resolver .nameservers = [resolver_ip ]
278280
@@ -377,8 +379,8 @@ def dnssec_validate(domain: str, resolver_ip: str | None = None) -> DNSSECResult
377379
378380 try :
379381 resolver = dns .resolver .Resolver ()
380- resolver .timeout = 5
381- resolver .lifetime = 5
382+ resolver .timeout = request_timeout
383+ resolver .lifetime = request_timeout
382384 if resolver_ip :
383385 resolver .nameservers = [resolver_ip ]
384386
@@ -394,7 +396,7 @@ def dnssec_validate(domain: str, resolver_ip: str | None = None) -> DNSSECResult
394396 domain , dns .rdatatype .DNSKEY , want_dnssec = True )
395397
396398 # set a longer timeout (in seconds)
397- timeout = 20
399+ timeout = 30
398400
399401 # try DNSSEC validation with retries
400402 for i in range (3 ):
@@ -448,8 +450,8 @@ def reverse_dns(ip: str, resolver_ip: str | None = None) -> ReverseDNSResult:
448450 try :
449451 rev = dns .reversename .from_address (ip )
450452 resolver = dns .resolver .Resolver ()
451- resolver .timeout = 5
452- resolver .lifetime = 5
453+ resolver .timeout = request_timeout
454+ resolver .lifetime = request_timeout
453455 if resolver_ip :
454456 resolver .nameservers = [resolver_ip ]
455457
@@ -470,8 +472,8 @@ def reverse_dns(ip: str, resolver_ip: str | None = None) -> ReverseDNSResult:
470472def soa_axfr_test (domain : str , resolver_ip : str | None = None ) -> AXFRResult :
471473 try :
472474 resolver = dns .resolver .Resolver ()
473- resolver .timeout = 5
474- resolver .lifetime = 5
475+ resolver .timeout = request_timeout
476+ resolver .lifetime = request_timeout
475477 if resolver_ip :
476478 resolver .nameservers = [resolver_ip ]
477479
@@ -480,7 +482,7 @@ def soa_axfr_test(domain: str, resolver_ip: str | None = None) -> AXFRResult:
480482
481483 # Try AXFR
482484 nameserver = [r .to_text () for r in resolver .resolve (domain , "NS" )][0 ]
483- zone = dns .zone .from_xfr (dns .query .xfr (nameserver , domain , timeout = 5 ))
485+ zone = dns .zone .from_xfr (dns .query .xfr (nameserver , domain , timeout = request_timeout ))
484486
485487 records = []
486488 for name , node in zone .nodes .items ():
0 commit comments