
    /hR                        d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
Z
ddl
mZ dd	l
mZ dd
l
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ dd lm%Z%  e&ed! e'                      Z(d" Z)ej*        +                    d#$           G d% d&e                      Z, G d' d(e,          Z-ej*        +                    d#$           G d) d*e,                      Z.ej*        +                    d#$           G d+ d,e,                      Z/ G d- d.e,          Z0ej*        1                    ed/0           G d1 d2e,                      Z2 G d3 d4e          Z3dS )5zFTests for psutil.net_connections() and Process.net_connections() APIs.    N)closing)AF_INET)AF_INET6)
SOCK_DGRAM)SOCK_STREAM)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)supports_ipv6)AF_UNIX)HAS_NET_CONNECTIONS_UNIX)SKIP_SYSCONS)PsutilTestCase)bind_socket)bind_unix_socket)check_connection_ntuple)create_sockets)filter_proc_net_connections)pytest)reap_children)retry_on_failure)skip_on_access_denied)tcp_socketpair)unix_socketpair)wait_for_fileSOCK_SEQPACKETc                 z    t          j                                        |           }| dv rt          |          S |S )Nkind>   allunix)psutilProcessnet_connectionsr   )r$   conss     P/var/www/html/venv/lib/python3.11/site-packages/psutil/tests/test_connections.pythis_proc_net_connectionsr,   1   s>    >+++66D*4000K    serial)namec                   "    e Zd Zd Zd ZddZdS )ConnectionTestCasec                 2    t          d          g k    sJ d S Nr%   r#   r,   selfs    r+   setUpzConnectionTestCase.setUp:   s$    (e444::::::r-   c                 2    t          d          g k    sJ d S r3   r4   r5   s    r+   tearDownzConnectionTestCase.tearDown=   s$    (e444::::::r-   r%   c                     	 t          j        |          }n# t           j        $ r t          rY dS  w xY wfd|D             }|                                 |                                 ||k    sJ dS )zGiven a process PID and its list of connections compare
        those against system-wide connections retrieved via
        psutil.net_connections.
        r#   Nc                 :    g | ]}|j         k    |d d         S )Npid).0cr>   s     r+   
<listcomp>zBConnectionTestCase.compare_procsys_connections.<locals>.<listcomp>P   s(    ===qAcrcFr-   )r'   r)   AccessDeniedr
   sort)r6   r>   	proc_consr$   sys_conss    `   r+   compare_procsys_connectionsz.ConnectionTestCase.compare_procsys_connectionsA   s    
	-4888HH" 	 	 	  	 >===H===H$$$$$$s    44N)r%   )__name__
__module____qualname__r7   r9   rF    r-   r+   r1   r1   8   sF        ; ; ;; ; ;% % % % % %r-   r1   c                   d    e Zd Zej                            ed          d             Zd Zd Z	dS )TestBasicOperationsrequires rootreasonc                     t                      5  t          j        d          D ]}t          |           	 d d d            d S # 1 swxY w Y   d S r3   )r   r'   r)   r   r6   conns     r+   test_systemzTestBasicOperations.test_systemW   s     	. 	..E::: . .'----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   (AA	A	c                     t                      5  t          d          D ]}t          |           	 d d d            d S # 1 swxY w Y   d S r3   )r   r,   r   rQ   s     r+   test_processz TestBasicOperations.test_process]   s     	. 	.1u=== . .'----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   #A  AAc                    t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t          j        t                    5  t	          j        d           d d d            d S # 1 swxY w Y   d S )Nz???r#   )r   raises
ValueErrorr,   r'   r)   r5   s    r+   test_invalid_kindz%TestBasicOperations.test_invalid_kindb   s    ]:&& 	2 	2%51111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2]:&& 	/ 	/"....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   7;;A>>BBN)
rG   rH   rI   r   markskipifr   rS   rU   rY   rJ   r-   r+   rL   rL   V   sa        [_==. . >=.
. . .
/ / / / /r-   rL   c                   z   e Zd ZdZd Zd Zd Zej        	                     e
             d          d             Zd Zej        	                     e
             d          d	             Zej        	                    e d
          d             Zej        	                    e d
          d             ZdS )TestUnconnectedSocketsz;Tests sockets which are open but not connected to anything.c                 T   t          d          }d |D             }t          st          r||                                         S t	          |          dk    sJ |d         j        dk    r7||                                         j        |                                k    sJ |d         S )Nr%   r#   c                     i | ]
}|j         |S rJ   )fdr?   r@   s     r+   
<dictcomp>z=TestUnconnectedSockets.get_conn_from_sock.<locals>.<dictcomp>o   s    &&&Aa&&&r-      r   r<   )r,   r   r   filenolenr`   )r6   sockr*   smaps       r+   get_conn_from_sockz)TestUnconnectedSockets.get_conn_from_sockm   s    (e444&&&&& 	W 	 &&t99>>>>AwzRDKKMM*->>>>7Nr-   c                    |                      |          }t          |           |j        dk    r|j        |                                k    sJ |j        |j        k    sJ |j        |                    t          j        t          j	                  k    sJ |
                                }|s)t          |t                    r|                                }|j        t          k    r
|dd         }|j        |k    sJ |j        t           k    r@t"          r9t%          d          }|                     t)          j                    |d           |S )zGiven a socket, makes sure it matches the one obtained
        via psutil. It assumes this process created one connection
        only (the one supposed to be checked).
        r<   N   r%   r#   )rh   r   r`   rd   familytype
getsockoptsocket
SOL_SOCKETSO_TYPEgetsockname
isinstancebytesdecoder   laddrr   r   r,   rF   osgetpid)r6   rf   rR   ru   r*   s        r+   check_socketz#TestUnconnectedSockets.check_socketz   s9   
 &&t,,%%% 7b==7dkkmm++++{dk))))yDOOF,=v~NNNNNN   "" 	#E511 	#LLNNE;("""1"IEzU"""" ;'!!&>!,%888D,,RY[[$U,KKKr-   c                    d}t          t          t          t          |                    5 }|                     |          }|j        dk    sJ |j        t          j        k    sJ 	 d d d            d S # 1 swxY w Y   d S N	127.0.0.1r   addrrJ   )	r   r   r   r   rx   raddrstatusr'   CONN_LISTENr6   r~   rf   rR   s       r+   test_tcp_v4z"TestUnconnectedSockets.test_tcp_v4   s    [+DAAABB 	5d$$T**D:####;&"444444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5   :A44A8;A8zIPv6 not supportedrN   c                    d}t          t          t          t          |                    5 }|                     |          }|j        dk    sJ |j        t          j        k    sJ 	 d d d            d S # 1 swxY w Y   d S N)::1r   r}   rJ   )	r   r   r   r   rx   r   r   r'   r   r   s       r+   test_tcp_v6z"TestUnconnectedSockets.test_tcp_v6   s    [;TBBBCC 	5t$$T**D:####;&"444444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5r   c                    d}t          t          t          t          |                    5 }|                     |          }|j        dk    sJ |j        t          j        k    sJ 	 d d d            d S # 1 swxY w Y   d S rz   )	r   r   r   r   rx   r   r   r'   	CONN_NONEr   s       r+   test_udp_v4z"TestUnconnectedSockets.test_udp_v4   s    [*4@@@AA 	3T$$T**D:####;&"222222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3r   c                    d}t          t          t          t          |                    5 }|                     |          }|j        dk    sJ |j        t          j        k    sJ 	 d d d            d S # 1 swxY w Y   d S r   )	r   r   r   r   rx   r   r   r'   r   r   s       r+   test_udp_v6z"TestUnconnectedSockets.test_udp_v6   s    [:DAAABB 	3d$$T**D:####;&"222222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3r   
POSIX onlyc                    |                                  }t          t          |t                              5 }|                     |          }|j        dk    sJ |j        t          j        k    sJ 	 d d d            d S # 1 swxY w Y   d S N)rl    	
get_testfnr   r   r   rx   r   r   r'   r   r6   testfnrf   rR   s       r+   test_unix_tcpz$TestUnconnectedSockets.test_unix_tcp       ""%f;???@@ 	3D$$T**D:####;&"222222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3   :B  BBc                    |                                  }t          t          |t                              5 }|                     |          }|j        dk    sJ |j        t          j        k    sJ 	 d d d            d S # 1 swxY w Y   d S r   r   r   s       r+   test_unix_udpz$TestUnconnectedSockets.test_unix_udp   r   r   N)rG   rH   rI   __doc__rh   rx   r   r   rZ   r[   r   r   r   r   r   r   r   rJ   r-   r+   r]   r]   i   s4       EE    <5 5 5 [MMOO+4HII5 5 JI53 3 3 [MMOO+4HII3 3 JI3 [E	,773 3 873 [E	,773 3 873 3 3r-   r]   c                       e Zd ZdZej                            ed          d             Zej                            e	 d          d             Z
dS )TestConnectedSocketzFTest socket pairs which are actually connected to
    each other.
    zunreliable on SUONSrN   c                    d}t          d          g k    sJ t          t          |          \  }}	 t          d          }t          |          dk    sJ |d         j        t
          j        k    sJ |d         j        t
          j        k    sJ 	 |                                 |                                 d S # |                                 |                                 w xY w)Nr{   tcp4r#   r}   rj   r   rc   )r,   r   r   re   r   r'   CONN_ESTABLISHEDclose)r6   r~   serverclientr*   s        r+   test_tcpzTestConnectedSocket.test_tcp   s    (f555;;;;'d;;;	,&999Dt99>>>>7>V%<<<<<7>V%<<<<<< LLNNNLLNNNNN LLNNNLLNNNNs   AB= =*C'r   c                    |                                  }t          |          \  }}	 t          d          }|d         j        r|d         j        r
J |            |d         j        r|d         j        r
J |            t
          st          rd |D             }t          |          dk    sJ t          st          st          st          rG|d         j        dk    sJ |d         j        dk    sJ ||d         j        p|d         j        k    sJ n |d         j        p|d         j        |k    sJ |                                 |                                 d S # |                                 |                                 w xY w)Nr&   r#   r   rc   c                 (    g | ]}|j         d k    |S )z/var/run/log)r   ra   s     r+   rA   z1TestConnectedSocket.test_unix.<locals>.<listcomp>   s$    EEEa17n+D+D+D+D+Dr-   rj   r   )r   r   r,   ru   r   r   r   re   r	   r   r   r   )r6   r   r   r   r*   s        r+   	test_unixzTestConnectedSocket.test_unix   s   ""(00	,&999DQ>$q'->>$>>>Q>$q'->>$>>> F F FE4EEEt99>>>> 	B 	B5 	BG 	BAw}****Aw}****$q'-"@47=AAAAA Q6a6AAAALLNNNLLNNNNN LLNNNLLNNNNs   D
E *FN)rG   rH   rI   r   r   rZ   r[   r   r   r   r   rJ   r-   r+   r   r      s          [&;<<  =<& [E	,77  87  r-   r   c                   D    e Zd Zd Z ee          d             Zd ZdS )TestFiltersc                    d }t                      5   |dt          t          t          gt          t
          t          g            |dt          t          gt          t
          g            |dt          gt          t
          g            |dt          t          gt          g            |dt          gt          g            |dt          gt          g            |dt          t          gt
          g            |d	t          gt
          g            |d
t          gt
          g           t          r% |dt          gt          t
          t          g           d d d            d S # 1 swxY w Y   d S )Nc                     t          |           D ]}|j        |v sJ |j        |v sJ t          s.t	          j        |           D ]}|j        |v sJ |j        |v sJ d S d S )Nr#   )r,   rk   rl   r   r'   r)   )r$   familiestypesrR   s       r+   checkz'TestFilters.test_filters.<locals>.check  s    1t<<< * *{h....yE))))) ."2=== . .D;(22229-----. .. .r-   r%   inetinet4tcpr   tcp6udpudp4udp6r&   )r   r   r   r   r   r   r!   r   )r6   r   s     r+   test_filterszTestFilters.test_filters   s   	. 	. 	.  	 	E(G,j.9  
 E&7H-Z/HIIIE'G9{J&?@@@E%'8,{m<<<E&7)k]333E&8*{m444E%'8,zl;;;E&7)j\222E&8*zl333' I *n=  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   EE##E'*E')only_ifc                     t                        fd}t          j        d          }t          j        d          }t          j                                                 t          j                                        }|                    t          t                    d|          }|                    t          t                    d|          }|                    t          t                    d|          }|                    t          t                    d|          }                     |          }	t          t          |d	                    }
                     |          }t          t          |d	                    }t                      rg                     |          }t          t          |d	                    }                     |          }t          t          |d	                    }nd }d }d }d }t!          j                                                    D ] }|                                }t)          |          d
k    sJ |D ]}|j        |	j        k    r' |||t          t,          |
dt           j        d           9|j        |j        k    r' |||t          t0          |dt           j        d           p|j        t5          |dd           k    r' |||t          t,          |dt           j        d           |j        t5          |dd           k    r& |||t          t0          |dt           j        d           "d S )Nc                 V   d}t          |           |j        |k    sJ |j        |k    sJ |j        |k    sJ |j        |k    sJ |j        |k    sJ |D ]-}	|                     |	          }
|	|v r	|
g k    sJ %|
g k    sJ .t          r                    | j	        |g           d S d S )N)
r%   r   r   inet6r   r   r   r   r   r   r#   )
r   rk   rl   ru   r   r   r)   r   rF   r>   )procrR   rk   rl   ru   r   r   kinds	all_kindsr$   r*   r6   s              r+   
check_connz+TestFilters.test_combos.<locals>.check_conn#  s    I $D)));&((((9$$$$:&&&&:&&&&;&((((! & &+++665==2:::::2::::: ( C00D6BBBBBC Cr-   a4  
            import socket, time
            s = socket.socket({family}, socket.SOCK_STREAM)
            s.bind(('{addr}', 0))
            s.listen(5)
            with open('{testfn}', 'w') as f:
                f.write(str(s.getsockname()[:2]))
            [time.sleep(0.1) for x in range(100)]
            a  
            import socket, time
            s = socket.socket({family}, socket.SOCK_DGRAM)
            s.bind(('{addr}', 0))
            with open('{testfn}', 'w') as f:
                f.write(str(s.getsockname()[:2]))
            [time.sleep(0.1) for x in range(100)]
            )dirr|   )rk   r~   r   r   T)deleterc   rJ   )r%   r   r   r   r   )r%   r   r   r   r   r>   )r%   r   r   r   r   )r%   r   r   r   r   )r   textwrapdedentrv   pathbasenamer   getcwdformatintr   r   pyrunevalr    r   r'   r(   childrenr)   re   r>   r   r   r   r   getattr)r6   r   tcp_templateudp_templatetestfiletcp4_templateudp4_templatetcp6_templateudp6_template	tcp4_proc	tcp4_addr	udp4_proc	udp4_addr	tcp6_proc	tcp6_addr	udp6_proc	udp6_addrpr*   rR   s   `                   r+   test_comboszTestFilters.test_combos  s   	C 	C 	C 	C 	C>   (     (   7##DOO	O$D$DEE$++w<<k( , 
 
 %++w<<k( , 
 
 %++x==uX , 
 
 %++x==uX , 
 
 JJ}--	x===>>	JJ}--	x===>>	?? 		

=11I]8DAAABBI

=11I]8DAAABBIIIIII!!**,, 3	 3	A$$&&Dt99>>>> 0 05IM))J#!*?	 	 	 	 Uim++J"!(?	 	 	 	 Ugi====J #!*?	 	 	 	 Ugi====J "!(?	 	 	O03	 3	r-   c                 "   t                      5  t          d          }t          |          t                      rdndk    sJ |D ]+}|j        t
          t          hv sJ |j        t          k    sJ ,t          d          }t          |          dk    sJ |d         j        t
          k    sJ |d         j        t          k    sJ t                      rUt          d          }t          |          dk    sJ |d         j        t          k    sJ |d         j        t          k    sJ t          d          }t          |          t                      rdndk    sJ |D ]+}|j        t
          t          hv sJ |j        t          k    sJ ,t          d	          }t          |          dk    sJ |d         j        t
          k    sJ |d         j        t          k    sJ t                      rUt          d
          }t          |          dk    sJ |d         j        t          k    sJ |d         j        t          k    sJ t          d          }t          |          t                      rdndk    sJ |D ]0}|j        t
          t          hv sJ |j        t          t          hv sJ 1t                      rSt          d          }t          |          dk    sJ |D ]+}|j        t          k    sJ |j        t          t          hv sJ ,t          rat          sZt          sSt          d          }t          |          dk    sJ |D ]+}|j        t          k    sJ |j        t          t          hv sJ ,d d d            d S # 1 swxY w Y   d S )Nr   r#   rj   rc   r   r   r   r   r   r   r      r   r&      )r   r,   re   r   rk   r   r   rl   r   r   r   r   r   r   )r6   r*   rR   s      r+   
test_countzTestFilters.test_count  s'    7	B 7	B,%888Dt99moo!<1==== 0 0{w&99999yK/////,&999Dt99>>>>7>W,,,,7<;.... 30f===4yyA~~~~Aw~1111Aw|{2222,%888Dt99moo!<1==== / /{w&99999yJ.....,&999Dt99>>>>7>W,,,,7<:---- 20f===4yyA~~~~Aw~1111Aw|z1111,&999Dt99moo!<1==== > >{w&99999y[*$====== B0g>>>4yyA~~~~  B BD;(22229j(AAAAAA ( B BF B0f===4yyA~~~~  B BD;'11119j(AAAAAAo7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	B 7	Bs   M(NNNN)rG   rH   rI   r   r   r
   r   r   rJ   r-   r+   r   r      se          > 5)))H H *)HT8B 8B 8B 8B 8Br-   r   rM   rN   c                   >    e Zd ZdZd Z e            d             ZdS )TestSystemWideConnectionszTests for net_connections().c                 b   d }t                      5  ddlm} |                                D ]h\  }}|dk    rt          s|\  }}t          j        |          }t          |          t          t          |                    k    sJ  ||||           i	 d d d            d S # 1 swxY w Y   d S )Nc                 z    | D ]7}|j         |v sJ |j         t          k    r|j        |v sJ t          |           8d S )N)rk   r   rl   r   )r*   r   types_rR   s       r+   r   z0TestSystemWideConnections.test_it.<locals>.check  s_     . .{h....;'))9....'----	. .r-   r   )	conn_tmapr&   )	r   psutil._commonr   itemsr   r'   r)   re   set)r6   r   r   r$   groupsr   r   r*   s           r+   test_itz!TestSystemWideConnections.test_it  s   	. 	. 	.  
	. 
	.000000 ) 1 1 . .f6>>*B>#) &-d334yyCD		NN2222dHf----.
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	.s   BB$$B(+B(c                    t                      5 }t          |          }d d d            n# 1 swxY w Y   g d}g }t          |          D ]r}|                                 }|                    |           t          j        d| d          }|                     |          }                    |j                   s|D ]}t          |           fdt          j        d          D             }	D ]_t          fd|	D                       |k    sJ t          j                  }
t          |
                    d                    |k    sJ `d S )N
   z                import time, os
                from psutil.tests import create_sockets
                with create_sockets():
                    with open(r'z', 'w') as f:
                        f.write("hello")
                    [time.sleep(0.1) for x in range(100)]
                c                 &    g | ]}|j         v |S rJ   r=   )r?   xpidss     r+   rA   zFTestSystemWideConnections.test_multi_sockets_procs.<locals>.<listcomp>  s'     
 
 
QUd]]A]]]r-   r%   r#   c                 *    g | ]}|j         k    |S rJ   r=   )r?   r   r>   s     r+   rA   zFTestSystemWideConnections.test_multi_sockets_procs.<locals>.<listcomp>   s     ;;;aaeslllllr-   )r   re   ranger   appendr   r   r   r>   r    r'   r)   r(   )r6   socksexpectedtimesfnames_fnamesrcsprocsysconsr   r>   r   s              @@r+   test_multi_sockets_procsz2TestSystemWideConnections.test_multi_sockets_procs  s     	"5zzH	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"u 	# 	#AOO%%EMM%   / # "'	# # #  C JJsOOEKK	""""  	! 	!E%    
 
 
 
-5999
 
 
  	= 	=C;;;;7;;;<<HHHHs##Aq((//00H<<<<<	= 	=s   -11N)rG   rH   rI   r   r   r   r   rJ   r-   r+   r   r     sN        &&. . .( $= $= $= $= $=r-   r   c                       e Zd Zd ZdS )TestMiscc                    g }g }t          t                    D ]}|                    d          r}t          t          |          }t	          |          }|                                s
J |            t          |vsJ ||vsJ |                    |           |                    |           t          rt          j         t          j	         t          rt          j         d S d S )NCONN_)r   r'   
startswithr   strisupperr   r   	CONN_IDLE
CONN_BOUNDr   CONN_DELETE_TCB)r6   intsstrsr/   numstr_s         r+   test_net_connection_constantsz&TestMisc.test_net_connection_constants&  s    KK 	" 	"Dw'' "fd++3xx||~~++t+++$$C   D!!! 	 	#""""	# 	#r-   N)rG   rH   rI   r  rJ   r-   r+   r   r   %  s#        # # # # #r-   r   )4r   rv   rn   r   
contextlibr   r   r   r   r   r'   r   r	   r
   r   r   r   r   r   r   r   psutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   objectr!   r,   rZ   xdist_groupr1   rL   r]   r   r   r[   r   r   rJ   r-   r+   <module>r     sL   M L 				                                                                                  ( ( ( ( ( (             1 1 1 1 1 1 % % % % % % ' ' ' ' ' ' $ $ $ $ $ $ ) ) ) ) ) ) 0 0 0 0 0 0 ' ' ' ' ' ' 4 4 4 4 4 4       & & & & & & ) ) ) ) ) ) . . . . . . ' ' ' ' ' ' ( ( ( ( ( ( & & & & & & !16688<<   h''% % % % % % % ('%:/ / / / /, / / /& h''Z3 Z3 Z3 Z3 Z3/ Z3 Z3 ('Z3z h''4 4 4 4 4, 4 4 ('4ncB cB cB cB cB$ cB cB cBL L99<= <= <= <= <= 2 <= <= :9<=~# # # # #~ # # # # #r-   