HEX
Server: Apache/2.4.62 (Unix) OpenSSL/1.1.1k
System: Linux ns565604.ip-54-39-133.net 4.18.0-553.50.1.el8_10.x86_64 #1 SMP Tue Apr 15 08:09:22 EDT 2025 x86_64
User: greer489 (1034)
PHP: 8.3.19
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/DNS/__pycache__/Base.cpython-36.opt-1.pyc
3

�W&_�E�@s\dZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZddlZyddl
mZe�Z
Wnddl
Z
YnXGdd�de�ZGdd	�d	e�ZGd
d�de�ZGdd
�d
e�ZGdd�de�ZGdd�de�ZddlmZddeje	jddddgd�	ad&dd�Zdd�Zdd�Zdd�ZGd d!�d!�ZGd"d#�d#eej�Z d$d%�Z!dS)'u<
$Id$

This file is part of the py3dns project.
Homepage: https://launchpad.net/py3dns

This code is covered by the standard Python License. See LICENSE for details.

Changes for Python3 port © 2011-14 Scott Kitterman <scott@kitterman.com>

    Base functionality. Request and Response classes, that sort of thing.
�N�)�Type�Class�Opcode)�SystemRandomc@seZdZdS)�DNSErrorN)�__name__�
__module__�__qualname__�rr�/usr/lib/python3.6/Base.pyrsrc@seZdZdS)�
ArgumentErrorN)rr	r
rrrrr
 sr
c@seZdZdS)�SocketErrorN)rr	r
rrrrr!src@seZdZdS)�TimeoutErrorN)rr	r
rrrrr"src@seZdZdd�ZdS)�ServerErrorcCstj|||�||_||_dS)N)r�__init__�message�rcode)�selfrrrrrr%szServerError.__init__N)rr	r
rrrrrr$src@seZdZdS)�IncompleteReplyErrorN)rr	r
rrrrr*sr)�Lib�udp�5�)	�protocol�port�opcode�qtype�rdZtiming�timeout�
server_rotate�server�/etc/resolv.confcCsRyt|d��
}t|�SQRXWn.tk
rL}ztjt|��dSd}~XnXdS)zCparses the /etc/resolv.conf file and sets defaults for name servers�rN)�open�ParseResolvConfFromIterable�FileNotFoundError�warnings�warn�str)Zresolv_path�stream�errr�ParseResolvConf3sr,cCs�x�|D]�}|j�}|s|ddks|ddkr2q|j�}t|�dkrHq|ddkrlt|�dkrl|dtd<|ddkrx|ddkr�|dd	kr�|dd
krtdj|d�qWdS)
zHparses a resolv.conf formatted stream and sets defaults for name serversr�;�#�Zdomainr�searchZoptionsZsortlistZ
nameserverr!N)�strip�split�len�defaults�append)�lines�lineZfieldsrrrr%<s
r%cCsHddl}|jdkr,ddlm}|j�td<n|jdkr>t�nt�SdS)	Nr�win32�ntr)�win32dnsr!�darwin)r8r9)�sys�platform�r:ZRegistryResolver4�ParseOSXSysConfigr,)r<r:rrr�_DiscoverNameServersQs

r@cCsdS)zbDon't call, only here for backward compatability.  We do discovery for
    you automatically.
    Nrrrrr�DiscoverNameServers[srAc@sxeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�
DnsRequestz high level Request object cOsPd|_d|_i|_|j||�|j|_d|_d|_t|jd�dkrLtd��dS)Nrr>r!z"No working name servers discovered)	�donefunc�py3asyncr4�argparse�args�tid�
resulttyper3r)r�namerFrrrrcszDnsRequest.__init__cCs|rd|jkr|jd|d<t|�tks6t|�tkr@||d<n t|�dkr`|dr`|d|d<tdr�ttd�tjkr�tddd�tddd�td<xBttj��D]2}||kr�||jkr�|j|||<q�t|||<q�Wt|d�tk�st|d�tk�r|dg|d<||_	dS)NrIrrr r!)
r4�type�bytesr)r3�typesZListType�list�keysrF)rrIrF�irrrrEns$
$
$zDnsRequest.argparsecCstj||�|_dS)N)�socket�s)r�a�brrr�
socketInit�szDnsRequest.socketInitcCsh|jdkr6tj|jggg|j�\}}}t|�s6td��|jjd�\|_|_tj�|_	|j
|jd<|j�S)Nr�Timeouti��r!)
r�selectrQr3rZrecvfrom�reply�from_address�time�time_finish�nsrF�processReply)rr#�wr+rrr�processUDPReply�s

zDnsRequest.processUDPReplycCs�|j|�}x|t|�|kr�|jdkrR|j|jtj�}|dkrFtd��|jj|�|j|t|��}|s|tdt|�|f��||7}qW|S)NrrUz incomplete reply - %d of %d read)�readr3r�
time_startrYrrQ�
settimeout)r�f�count�resZrem�bufrrr�_readall�s

zDnsRequest._readallcCs�|jdkr|jj|j�n|jjd�|jjd�}z(|j|d�}tj|�}|j||�|_Wd|j�Xt	j	�|_
|j|jd<|j
�S)Nr�rbr/r!)rrQra�makefilerfrZunpack16bitrW�closerYrZr[rFr\)rrb�headerrcrrr�processTCPReply�s



zDnsRequest.processTCPReplycCs�|j|jd|jd<|js*tj|j�}nn|jdkrBtj|j�}nV|jdkrZtj|j�}n>|jdkrrtj	|j�}n&|jdkr�tj
|j�}ntd|j��tj||j�}|j|_|S)Ni��elapsed�defaultZbinary�textZintegerzUnknown resulttype: )
rZr`rFrHrZ	MunpackerrWZMunpackerDefaultZMunpackerBinaryZ
MunpackerTextZMunpackerInteger�SyntaxErrorZ	DnsResult)r�ur#rrrr\�s



zDnsRequest.processReplycCs`xZy"tjdd�}|jjd|f�PWqtjk
rV}z|jtjkrF�WYdd}~XqXqWdS)z<Pick random source port to avoid DNS cache poisoning attack.ii��r>N)�random�randintrQZbindrP�error�errnoZ
EADDRINUSE)rZsource_port�msgrrr�	getSource�szDnsRequest.getSourcecCs |j�|jj|j|jf�dS)N)rvrQ�connectr[r)rrrr�conn�szDnsRequest.conncOs�|j||�|jd}|jd|_tjdd�|_|jd|_|jd}|jd}|jd}d	|jkrr|jd	|_nd
|_t|jd�t	ks�t|jd�t
kr�yttt
|jdj
���}Wq�tk
r�td��Yq�Xn
|jd}d
|jkr�t|j�td��|jd
}|tjk�r*|dk�r*td�d}tj�}	|	j|jd|dd|ddddddd�
|	j||tj�|	j�|_y$|dk�r�|j|�n
|j|�Wn.tjk
�r�}
zt|
��WYdd}
~
XnX|j�r�dS|j SdS)aW
        Request function for the DnsRequest class.  In addition to standard
        DNS args, the special pydns arg 'resulttype' can optionally be passed.
        Valid resulttypes are 'default', 'text', 'decimal', and 'binary'.

        Defaults are configured to be compatible with pydns:
        AAAA: decimal
        Others: text
        rrri��rrrr!rHrmrzunknown query typerIznothing to lookup�tcpz'Query type AXFR, protocol forced to TCPrrN)!rErFrrqrrrGrrHrJrKr)�getattrr�upper�AttributeErrorr
�print�AXFRr�Mpacker�	addHeader�addQuestionr�IN�getbuf�request�sendUDPRequest�sendTCPRequestrPrsrrD�response)rrIrFrrrr!r�qname�m�reasonrrr�qry�sN




$





zDnsRequest.qrycOs�|j||�y"|jdr,tdj|jd���WnYnX|jd}|jd|_tjdd�|_|jd|_|jd}|jd	}|jd
}t	|jd�t
ks�t	|jd�tkr�ytt
t|jdj���}Wq�tk
r�td��Yq�Xn
|jd}d
|jk�rt|j�td��|jd
}|t
jk�r>|dk�r>td�d}tj�}	|	j|jd|dd|ddddddd�
|	j||tj�|	j�|_y$|dk�r�|j|�n
|j|�Wn.tjk
�r�}
zt|
��WYdd}
~
XnX|j�r�dS|j SdS)z needs a refactoring rHzERestulttype {0} set with DNS.req, use DNS.qry to specify result type.rrri��rrrr!rzunknown query typerIznothing to lookupryz'Query type AXFR, protocol forced to TCPrrN)!rErFr
�formatrrqrrrGrrJrKr)rzrr{r|r}r~rrr�r�rr�r�r�r�r�rPrsrrDr�)rrIrFrrrr!rr�r�r�rrr�reqsR




$




zDnsRequest.reqcCs^d}d|_�x8|D�].|_y�|jjd�rNttd�rJtjrJ|jtjtj�q^wn|jtj	tj�zft
j
�|_|j�|j
s�|jj|j�|j�}x,|jd|jks�|jd|jkr�|j�}q�W||_Wd|j
s�|jj�XWn^tjk
�r
}z|p�|}wWYdd}~Xn0tk
�r8}z|�p$|}wWYdd}~XnX|jrPqW|j�rZ|�rZ|�dS)zrefactor meN�:�has_ipv6�idr)r�r[rc�hasattrrPr�rT�AF_INET6Z
SOCK_DGRAM�AF_INETrYr`rxrDrQ�sendr�r^rjrGrXrrirsr)rr!�first_socket_errorr#r+�trrrr�Rs>


zDnsRequest.sendUDPRequestcCsVd}d|_�x0|D�]&|_y�|jjd�rNttd�rJtjrJ|jtjtj�q^wn|jtj	tj�zdt
j
�|_|j�t
jt|j��|j}|jjd�|jj|�|j�}|jd|jkr�||_PWd|jj�XWn^tjk
�r}z|p�|}wWYdd}~Xn0tk
�r0}z|�p|}wWYdd}~XnX|jrPqW|j�rR|�rR|�dS)z& do the work of sending a TCP request Nr�r�rr�)r�r[rcr�rPr�rTr�ZSOCK_STREAMr�rYr`rxrZ	pack16bitr3r�rQZsetblockingZsendallrkrjrGrirsr)rr!r�rer#r+r�rrrr�s<

zDnsRequest.sendTCPRequestN)rr	r
�__doc__rrErTr^rfrkr\rvrxr�r�r�r�rrrrrBas
%;4-rBc@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�DnsAsyncRequestz> an asynchronous request object. out of date, probably broken cOs@tj|f|�|�d|kr.|dr.|d|_n|j|_d|_dS)N�doner)rBrrC�
showResultrD)rrIrFrrrr�s
zDnsAsyncRequest.__init__cCsH|j�|j|j|jf�tj�|_d|jkrD|jdrDtjj	|�dS)N�start)
rvrwr[rrYr`rF�asyncore�
dispatcherZgo)rrrrrx�s

zDnsAsyncRequest.conncCs"|j||�tjj|�||_dS)N)Z
create_socketr�r�rrQ)rrRrSrrrrT�szDnsAsyncRequest.socketInitcCs.|jddkr*|j�|_|jr*|j|f�dS)Nrr)rFr^r�rC)rrrr�handle_read�s
zDnsAsyncRequest.handle_readcCs|j|j�dS)N)r�r�)rrrr�handle_connect�szDnsAsyncRequest.handle_connectcCsdS)Nr)rrrr�handle_write�szDnsAsyncRequest.handle_writecGs|jj�dS)N)r�Zshow)rrQrrrr��szDnsAsyncRequest.showResultN)rr	r
r�rrxrTr�r�r�r�rrrrr��s	r�cCs�ddl}ddl}|jdd�}|jd�}g}d}xn|j�}|s>P|j�}t|�dks`|dtjkrfd}q0|j	|�}|r0|dkr�g}|j
|�|j
|jd��q0W|j�x|D]}t
dj|�q�WdS)zMRetrieves the current Mac OS X resolver settings using the scutil(8) command.rNz/usr/sbin/scutil --dnsr#z$^\s+nameserver[]0-9[]*\s*\:\s*(\S+)$rr!)�os�re�popen�compile�readline�rstripr3�stringZ
whitespace�matchr5�grouprir4�extend)r�r�ZscutilZres_reZsetsZ
currentset�lr�rrrr?�s,



r?)r")"r�rPr�rLrYrVr'rtr>rrrr�rqr�	Exceptionrr
rrrrrZQUERY�Ar4r,r%r@rArBZdispatcher_with_sendr�r?rrrr�<module>s80

	
K!