a
=*f[ @ s d Z dZdZddlZddlZddlZddlmZ ddlm Z e e
Zd d
Zddd
Z
G dd dZG dd deZedde_G dd deZdddZeee_dS )zJFail2Ban Developers, Alexander Koeppe, Serg G. Brester, Yaroslav Halchenkoz+Copyright (c) 2004-2016 Fail2ban DevelopersZGPL N )Utils ) getLoggerc C s t | tr| S t| S )z8A little helper to guarantee ip being an IPAddr instance
isinstanceIPAddrip r 9/usr/lib/python3.9/site-packages/fail2ban/server/ipdns.pyasip' s
r
c C s zn| pt } dd t | ddt jdt jD }|rl| d }d}|D ] }||r\| W S |sD|}qD|W S W n t jy Y n0 t | S )zGet fully-qualified hostname of given host, thereby resolve of an external
IPs and name will be preferred before the local domain (or a loopback), see gh-2438
c s s | ]}|d r|d V qdS ) Nr ).0air r r 3 s zgetfqdn..Nr .)socketgethostnamegetaddrinfoZ
SOCK_DGRAMZAI_CANONNAME
startswitherrorgetfqdn)namenamesZpreffirstr r r r r - s$
r c @ s e Zd ZejdddZejdddZedd Zedd Z edd Z
edddZd
Zedd Z
dZedd ZdZedd ZdZedd Zedd ZdZedd ZdS )DNSUtilsi , ZmaxCountZmaxTimec C s t j| }|dur|S t }d}t r6tjtjfntjfD ]}zdt| d|dtj D ]J}t
|dk sXt
|d svqXtt|d d t
|}|jrX|| qXW q> ty } z|}W Y d}~q>d}~0 0 q>|s|rtd| | t j| | |S )z_ Convert a DNS into an IP address using the Python socket module.
Thanks to Kevin Drapel.
Nr z4Unable to find a corresponding IP address for %s: %s)r CACHE_nameToIpgetset
IPv6IsAllowedr AF_INETAF_INET6r ZIPPROTO_TCPlenr str_AF2FAMisValidadd ExceptionlogSyswarning)dnsipsZsaveerrfamresultr
er r r dnsToIpS s$ zDNSUtils.dnsToIpc
C sx t j| d}|dkr|S zt| d }W n8 tjyd } ztd| | d }W Y d }~n
d }~0 0 t j| | |S )Nr r z'Unable to find a name for the IP %s: %s) r CACHE_ipToNamer" r Z
gethostbyaddrr r- debugr# )r
vr3 r r r ipToNameq s zDNSUtils.ipToNamec C sn t }t| }|dur0t|}|jr0|| |dv rj|sjt| }|| |rj|dkrjt d| | |S )z/ Return the IP of DNS found in a given text.
N)Zyeswarnr9 z'Determined IP using DNS Lookup: %s = %s)
r# r searchIPr* r+ r r4 updater- r. )textZuseDnsZipListZplainIPr
r r r textToIp s
zDNSUtils.textToIpTc C s dd| f}t j|}|dur"|S d}| r4ttjfntjtfD ]F}z| }W qW q> ty } ztd| W Y d}~q>d}~0 0 q>t j || |S )z;Get short hostname or fully-qualified hostname of host selfselfhostnameNr z#Retrieving own hostnames failed: %s)
r r5 r" r r r r, r- r. r# )Zfqdnkeyr r? r3 r r r getHostname s
$zDNSUtils.getHostname)r> r/ c C sR t jt j} | dur| S tdt dt dgtdg } t jt j| | S )zGet own host names of selfNZ localhostFTr )r r5 r" _getSelfNames_keyr# rA )r r r r getSelfNames s zDNSUtils.getSelfNames)Znetintrfr0 c C s\ t jt j} | dur| S ztdd t D } W n t } Y n0 t jt j| | S )Get own IP addresses of selfNc S s g | ]\}}|qS r r )r Zniar r r