/opt/dedrads/__pycache__
NameSizeModeActions
alp.cpython-313.pyc188170644editdlrm
check_prov.cpython-313.pyc63940644editdlrm
clean_exim.cpython-313.pyc89020644editdlrm
cmspass.cpython-313.pyc63780644editdlrm
cms_check.cpython-313.pyc140790644editdlrm
cms_counter.cpython-313.pyc329480644editdlrm
cpanel_postgres_manager.cpython-313.pyc407620644editdlrm
docroot.cpython-313.pyc54920644editdlrm
envinfo.cpython-313.pyc81840644editdlrm
exclude_rbl.cpython-313.pyc66820644editdlrm
first_setup.cpython-313.pyc204930644editdlrm
fixwpcron.cpython-313.pyc72230644editdlrm
innodb_converter.cpython-313.pyc143470644editdlrm
mail_sources.cpython-313.pyc99690644editdlrm
modsec_disable.cpython-313.pyc158380644editdlrm
mysql_selector.cpython-313.pyc867480644editdlrm
show-conns-adv.cpython-313.pyc684140644editdlrm
sparta.cpython-313.pyc4909030644editdlrm
vhost_data.cpython-313.pyc69830644editdlrm
Edit: /opt/dedrads/__pycache__/show-conns-adv.cpython-313.pyc (68414B)
}jVSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJr SSK J r SSK J r J r SSK Jr SSKJr \R""S5r1SkrS 1rS rS rS rS rSrSS1rSrSrSrSr1SkrSr Sr!Sr"Sr#"SS5r$"SS5r%\&S:Xa\%"5RO5 gg)N defaultdict)datetime) ip_address ip_network) PrettyTable)colorss>*::::1[::] 127.0.0.1r  dSYN-RECVSYNRECV,>@" g?))sshdssh)eximsmtp)dovecotimap)pop3r$)httpdhttp)apache2r&)nginxr&) litespeedr&) openlitespeedr&)cpsrvdcpanel)cwpsrv cwp_admin)z pure-ftpdftp)proftpdr/)mysqldmysql)mariadbdr2)nameddns) pdns_serverr5c[RRS5(ag[RRS5=(d [RRS5$)Nz/usr/local/cpanel/cpanelFz/usr/local/cwpsrvz /opt/cwprads)ospathisfileisdir/opt/dedrads/show-conns-adv.py is_cwp_serverr?7s? ww~~011 77==, - N~1NNr=cD1Skn[5(aUSS1-$USS1-$)N>r/rr#r$r!r2webmailcwp_userr.r,whm)r?)servicess r>auth_attack_servicesrE=s.IH:{333 x' ''r=c\\rSrSrSrSrS\S\S\4SjrS\S\S\ 4Sjr S\S\ 4S jr S r g ) ServiceRegistryDzMaps services to ports.cz[5(aSupOSupXlX lSSS/SSS/S S S /S /S QSSS/SSS/USS/USS/SSS/SS/0 S/S/S.S .Ul00S .UlURR 5H9up4UR 5H upVUHnUURUU'M M" M; g)!N)rBr.)r,rCr&Pir#ir$nir!)iiKr/rii"i#i&i'rAi/i0r2i 5{)r5ntptcpudp)r? panel_user panel_adminrDport_to_service_name_mapitems)selfrWrXprotocolservice_to_ports_map service_name port_list port_numbers r>__init__ServiceRegistry.__init__Gs ??&= #J &5 #J$&S c c BxDzT4LdD\D$<$ 4.  132(>%.2mm.A.A.C *H+?+E+E+G' #,K%11(;#$-,H/Dr=r`r\returncZURRU05RUS5$)NotherrYgetr[r`r\s r>get_service_name ServiceRegistry.get_service_namefs-,,002>BB   r=c>XRRU05;$Nrfrhs r>is_tracked_portServiceRegistry.is_tracked_portls;;??"MMMr=ch[URRU05R55$rl)setrYrgkeys)r[r\s r> get_all_portsServiceRegistry.get_all_portsps)40044XrBGGIJJr=)rXrWrYrDN)__name__ __module__ __qualname____firstlineno____doc__raintstrriboolrmrprr__static_attributes__r<r=r>rGrGDsX!%> C 3 3 N3N#N$NKcKcKr=rGc\rSrSrSrSr\S5rSrSr Sr Sr S r S r S rS rS rSrSrSrSrSrSrSrSrSr\S5r\S5rSASjrSrSrSr\S5r \S5r!\S 5r"S!r#SBS"jr$SCS#jr%S$r&S%r'SDS&jr(S'r)S(r*S)r+S*r,S+r-S,r.S-r/S.r0SES/jr1\24S0jr3\S15r4S2r5S3r6SFS4jr7\S55r8SGS6jr9SGS7jr:SGS8jr;SHS9jrS<r?\S=5r@S>rAS?rBS@rCg)IConnectionReportertzManages connection reporting.c[5UlUR5Ul[ 5[ 5S.Ul[ 5Ul[ 5UlSUl[S5Ul [S5Ul [S5Ul [S5Ul 0Ul/Ul[ 5[ 5S.Ul0UlUR%5UlUR)5 UR+5 g)NrTFc [[5$rlrryr<r=r>-ConnectionReporter.__init__..~ ;s;Kr=c [[5$rlrr<r=r>rrrr=c [[5$rlrr<r=r>rr k#6Fr=c [[5$rlrr<r=r>rrrr=)rGservice_registryparse_command_line_argumentscommand_line_argsrpselected_ports_by_protocolrequested_tcp_portsrequested_udp_portsuse_explicit_port_filterrtcp_connections_by_portudp_connections_by_porttcp_states_by_portudp_states_by_portprocessed_connection_data#collected_client_ips_for_subnettingdiscovered_service_portsport_service_overrides_detect_server_ips server_ips#_validate_command_line_combinations process_port_selection_from_argsr[s r>raConnectionReporter.__init__ws / 1!%!B!B!D25%*F'#&5 #&5 (-%'23K'L$'23K'L$"-.F"G"-.F"G)+&35003ce(D%&(#113 002 --/r=cSS1n[R"S5nU(a[R"USS/[R[RSSS9nUR S :XaUR R5Hjn[R"S U5nU(dM#URS 5RS 5S nUR[[U555 Ml U$[R"S 5nU(a[R"US/[R[RSSS9nUR S :XaEUR R5H'nUR[[U555 M) U$U$![a GM+f=f![ a U$f=f![a M_f=f![ a U$f=f)z@Collect addresses assigned to this host (loopback + interfaces).rr ipz-oaddrTFstdoutstderrtextcheckrz\s(inet6?)\s([^\s/]+)r%hostnamez-I)shutilwhich subprocessrunPIPE returncoder splitlinesresearchgroupsplitaddrzr ValueErrorOSError)rip_pathresultlinematchaddress hostname_paths r>r%ConnectionReporter._detect_server_ipss"5) ,,t$  #dF+%??%?? $$) & 8 8 : " *BD I$$"'++a."6"6s";A">%&NN3z'/B+CD !;<%#LL4M'^^&-))!# F((A-'-}}':':' _is_web_portConnectionReporter._is_web_ports. u  / )%%k<FFr=c[U5nUR(d3UR(d"UR(dUR (agXR ;$![a gf=f)NFT)rr is_loopback is_private is_link_localis_unspecifiedrr[ ip_string ip_objects r>_is_internal_client&ConnectionReporter._is_internal_clients[ "9-I  ! !##&&''OO++  s A A-,A-c[U5nUR(agXR;agUR(dUR (agg![a gf=f)Ninternalloopbackr[private)rrrrrrrs r>_internal_client_reason*ConnectionReporter._internal_client_reasonsW "9-I    '   9#:#:  s A A A cURX#5(a-URU5(aUSURU5S3$U$)N ())rrr)r[rr`r\s r>_format_client_ip$ConnectionReporter._format_client_ipsI   k 4 4((33[4#?#? #J"K1M Mr=cURX#5(dU$UR5VVs0sHupEURU5(aMXE_M! snn$s snnfrl)rrZr)r[ ip_countsr`r\rcounts r>_external_ip_counts&ConnectionReporter._external_ip_countss]  77 %.OO$5 $5 ++I6 I $5   s A Ac:SnSnURR5Hwup4URS5upV[U5nUR Xu5(dM;USR5H%upUR U5(aX- nM!X)- nM' My X4$)Nr:ips)rrZrryrr) r[internal_totalexternal_totaldata_keyconnection_datar\ port_stringr`rrs r>_web_internal_traffic_totals/ConnectionReporter._web_internal_traffic_totalss)-)G)G)M)M)O %H$,NN3$7 !Hk*K$$[;;$3E$:$@$@$B ++I66"+N"+N %C *P--r=c 0UR5upX-nUS:XdUS:XagX- nU[:ag[UR5"SR S555 [UR5"SUSSUSSUSS 355 [5 g) NrzWEB STACK NOTEr ,z of z HTTP connections (.0fu%) are from loopback, private, or this server's own IPs — typical Apache/Nginx/cPanel proxy/health-check traffic, not external clients.)r INTERNAL_WEB_DOMINANCE_THRESHOLDprint _warn_colorcenter)r[rr web_totalinternal_shares r>_print_web_internal_note+ConnectionReporter._print_web_internal_notes)-)J)J)L&"3 >^q0 '3 < <  d !1!8!8!=>?    ^A&d9Q-8"3'(DD   r=cURR(aIURR(a.[S[R S9 [R "S5 URRbJURRS:a/[S[R S9 [R "S5 ggg)Nz+Error: --subnet cannot be used with --watchfilez)Error: watch interval must be >= 1 second)rwatchsubnetrsysrexitrs r>r6ConnectionReporter._validate_command_line_combinationss  ! ! ' 'D,B,B,I,I =ZZ  HHQK  ! ! ' ' 3%%++a/A S 0 4r=c[S5Ul[S5Ul[S5Ul[S5Ul0Ul/Ul[5[5S.Ul0Ul g)Nc [[5$rlrr<r=r>r.rr=c [[5$rlrr<r=r>rrrr=c [[5$rlrr<r=r>rrrr=c [[5$rlrr<r=r>rrrr=rT) rrrrrrrrprrrs r>_reset_collection_state*ConnectionReporter._reset_collection_statesc'23K'L$'23K'L$"-.F"G"-.F"G)+&35003ce(D%&(#r=c [R"SS9nURRSH)nUR SU3SSUR 5S3S9 M+ UR S SS S9 UR S SS S9 UR S SSS9 UR SSSSS9 UR SSSSS9 UR SSSS9 UR SSS[ [SS[ S3S 9 UR S!SS"S9 UR5$)#Nz"Summarize TCP/UDP connection info.) descriptionrUz-- store_truez Show only connections)actionhelpz--tcpzShow all TCP connectionsz--udpzShow all UDP connectionsz--topu2Only show services ≥2000 connections or IPs >200z-sz--subnetz(Group connections by /24 and /16 subnetsz-pz--port+z(Specify up to 10 ports (space-separated))nargsr portsr z$Deprecated: use -p or --port insteadz-wz--watch?SECSz%Refresh every SECS seconds (default: z); Ctrl+C to exit)r consttypemetavarr z --all-portsz8Include every local TCP/UDP port with active connections) argparseArgumentParserrrD add_argumentupperDEFAULT_WATCH_INTERVALry parse_args)r[parserr^s r>r/ConnectionReporter.parse_command_line_arguments%s((< !11::5AL   \N##!,"4"4"6!7|D  B  L/I    L/I    E    ;    ;   3%K     (78N7OP!!    K    ""r=cSnURR(aWURRS5nURSR U5 UR R U5 SnOURRSHxn[URUS5(dM!URRSUnURSR U5 UR R U5 SnMz URR(aVURRS5nURSR U5 URR U5 Sn[URR=(d /5nURURR5 U(Ga3[U5S:a.[!S["R$S9 ["R&"S5 UHnUR)5(dM[+U5nURSR-U5 UR R-U5 URR(d<URR.(d!URR1US5(a9URSR-U5 URR-U5 SnM U(dTURRS5nURSR U5 UR R U5 URR.(aURRS5nURSR U5 URR U5 URR(aiUR35(dTURRS5nURSR U5 UR R U5 Xlg) NFrUTrVrzError: max 10 portsrr)rrUrrrrupdaterrDgetattrrVrlistportextendr lenrrrrisdigitryrtoprm_has_explicit_tcp_selectionr) r[any_port_was_selected tcp_portsr^r  udp_portsexplicit_portsrr`s r>r3ConnectionReporter.process_port_selection_from_args]s_ %  ! ! % %--;;EBI  + +E 2 9 9) D  $ $ + +I 6$( ! $ 5 5 > >u E 411<GG 11::5A,OE33E:AA%H,,33E:,0) !F  ! ! % %--;;EBI  + +E 2 9 9) D  $ $ + +I 6$( !d4499?R@d44::; >"R'+#**= - &&(("%k"2K33E:>>{K,,00=..22115500@@'77>BB'0044[A,0)! .$%--;;EBI  + +E 2 9 9) D  $ $ + +I 6  ! ! % %--;;EBI  + +E 2 9 9) D  $ $ + +I 6&&**88:: 11??F //6==iH((// :(=%r=c&URR(agURRSH!n[ URUS5(dM! g URR (dURR (agg)NTrUF)rrUrrDrrr )r[r^s r>r#.ConnectionReporter._has_explicit_tcp_selectionsm  ! ! % % 11::5ALt--|UCCB  ! ! & &$*@*@*F*Fr=c,[UR5$rl)r{rrs r> _wants_tcpConnectionReporter._wants_tcpD,,--r=c,[UR5$rl)r{rrs r> _wants_udpConnectionReporter._wants_udpr.r=c[5nURRSH2n[URUS5(dM!UR U5 M4 URR (a(URURRS5 URR(a(URURRS5 U$)NrUFrV) rprrDrrrrUrrV)r[selectedr^s r>"_explicitly_selected_service_names5ConnectionReporter._explicitly_selected_service_namess5 11::5ALt--|UCC \*B  ! ! % % OOD11::5A B  ! ! % % OOD11::5A Br=c.URR(agUR5nU(dgURR 5HCup#UH8nUR XB5U;dMUR URU5 M: ME grl)r all_portsr4rrZrrr)r[selected_servicesr\r r`s r>-_merge_discovered_ports_for_selected_services@ConnectionReporter._merge_discovered_ports_for_selected_servicess|  ! ! + +  CCE #<<BBDOH$ ))+@DUU33H=AA+N % Er=cURRX!45nU(aU$URRX5$rl)rrgrri)r[r`r\overrides r>r$ConnectionReporter._get_service_names:..22H3JK O$$55kLLr=cURR(agUR(arXRR U[ 55;agXR R U[ 55;a"URX5UR5;$gURRX5(agXR R U[ 55;agg)NTF) rr7rrrgrprrr4rrmrhs r>_is_connection_allowed)ConnectionReporter._is_connection_alloweds  ! ! + +  ( (==AA(CERR;;??#%PP**;A>>@A  0 0 G G 77;;HceL Lr=cTUR5n[Hup#X!;dM Us $ grl)lowerPROCESS_SERVICE_HINTS) process_field process_lowerneedler^s r>_service_from_process(ConnectionReporter._service_from_processs.%++- $9 F&##%:r=c/n[5nSHn[RRUS5nU(dM,UR 5nU(dME[ R US5nSnUS:Xa[U5S:aUSnOUS:Xa[U5S:aUSnXV4nXq;aMURU5 URUUS .5 M U$) N) SSH_CLIENTSSH_CONNECTIONrrJrrK)r server_port) rpr8environrgrr~ _normalize_ipr rappend)sessionsseenvariablevalueparts client_iprO session_keys r>_admin_ssh_sessions&ConnectionReporter._admin_ssh_sessionssu8HJJNN8R0EKKME*88qBIK<'CJ!O#Ah --#e*/#Ah $2K" HH[ ! OO* #9*r=NcnURURU5 U(aX0RX!4'ggrl)rrr)r[r`r\r^s r>_register_discovered_port,ConnectionReporter._register_discovered_ports4 %%h/33K@ CO ' '(? @ r=cUR5H>nUSR5(dM[US5nURUSS5 M@ g)NrOrUr)rZr!ryr])r[sessionr`s r>_apply_admin_session_ports-ConnectionReporter._apply_admin_session_portssM//1G=)1133gm45K  * *;u E 2r=c[R"SUR55nUSS;ag[R"SSUS5nUR SS5upV[ U5nSnURRXr5(a#URRXr5n U S :waU nU(d,Sn S U;aXRS 5Sn URU 5nURXrU5 g![ [4a gf=f) N\s+r>LISTENUNCONN^::ffff:rLrMrrrezusers:()rrstripsubrsplitryr IndexErrorrrmriindexrGr]) r[rr\ line_parts local_address_rr`r^trackedrDs r>_parse_listen_line%ConnectionReporter._parse_listen_line sXXfdjjl3 a= 4 4  FF;JqMBM*11#q9NAk*K  0 0 G G++<<G'!& MD $ZZ %:%; < 55mDL &&{lKJ'   s:C66D D c ~[5[5S.Ul0UlUR5 SHrup[R "[ U/[R[RSSS9nURR5HnURXR5 M Mt UR5 g![Ram URSS5n[R "[ U/[R[RSSS9nN![Ra GMf=ff=f)NrT))z-tlnprU)z-ulnprVTrprL)rprrrarrss_pathrCalledProcessErrorreplacerrrqr9)r[flagsr\subprocess_outputfallback_flagsrs r>collect_listening_ports*ConnectionReporter.collect_listening_ports$s 03ce(D%&(# '')COE $.NNe$%??%?? %!&*00;;=''7>+ D. ::<00 !&sB!7 (2 .1))!" )%"44 s):B;;&D<":DD82D<7D88D<chURS5(aURS5(aUSS$U$)N[]r) startswithendswith)rs r>rQ ConnectionReporter._normalize_ipAs5    $ $););C)@)@Qr? "r=c[U5nUR(d"UR(dUR(ag[ [ USU3SS95$![ a gf=f)Nlocal/Fstrictr )rrrrrzrr)rprefixrs r> _subnet_label ConnectionReporter._subnet_labelGs^ "9-I%%''++zYKq"9%HI I  s>AA A&%A&c@[[S[R5$)Nyellow)rr magentar<r=r>rConnectionReporter._warn_colorUsuh 66r=c[[5nURR5H]up#UR S5upE[U5nUR USXd5nUR5HupX==U - ss'M M_ U$)Nrr)rryrrZrr) r[rrrr\rr` filtered_ipsrrs r>_aggregate_ip_counts'ConnectionReporter._aggregate_ip_countsYs$ )-)G)G)M)M)O %H$,NN3$7 !Hk*K33& L%1$6$6$8 $-$%9 *Pr=c[[5nUR5H*upEURXB5nUS;dMX6==U- ss'M, U$)N>r r)rryrZr)r[rr subnet_countsrrrs r>_subnet_counts!ConnectionReporter._subnet_countsesN#C( ) 1 I'' :F^+%.%!2r=cX[URX5R5SS9SU$)NcUS*$Nrr<items r>r1ConnectionReporter._top_subnets..ps d1gXr=key)sortedrrZ)r[rrlimits r> _top_subnetsConnectionReporter._top_subnetsms5    2 8 8 :%  5 r=c "/nURR5GHup#URS5upE[U5nUR Xd5nUR USXd5nU(dMS[ UR55n [U5n [UR5SS9upUR5SUSUS3n U (aX- S-OSnU [:a!URS U S U S U S US S3S.5 U [:aURS U SU SU S3S.5 U[5;a?U (aX- OSnU [:a(U[ ::aURSU SU SUSS3S.5 [UR#US5R5SSS9unnU[$:a#US;aURSU SUSUS3S.5 U S:dGMUS :dGMU S!:dGMURSU S"U S#US S$3S.5 GM U$)%Nrrc US$rr<rs r>r5ConnectionReporter._analyze_threats..sQr=rrrrrhighz : hot source z has z connections (rz% of service traffic))severitymessageu: volume flood — z connections from unique IPsmediumu : possible auth brute-force — z unique IPs averaging .1fz conns/IPc US$rr<rs r>rrsar=)rLr)rdefault>rLr rz: /24 cluster z accounts for rrNiu: distributed pattern — z& sources, no single IP dominates (top z%))rrZrryrrsumvaluesr maxrHOT_IP_THRESHOLDrRHOT_SERVICE_THRESHOLDrEBRUTE_FORCE_MIN_UNIQUE_IPSBRUTE_FORCE_MAX_AVG_PER_IPrSUBNET_FLOOD_THRESHOLD)r[alertsrrr\rr`r^rtotal unique_ipstop_ip top_countlabel top_share avg_per_ip top_subnet subnet_counts r>_analyze_threats#ConnectionReporter._analyze_threatsss~)-)G)G)M)M)O %H$,NN3$7 !Hk*K11L00& I ((*+EYJ #IOO$5;O P F#))+,Ak]"XJaHE5:*c1I,, & 'vheI;G((1#6KM-- & '!4UG;M%,k33553=U/1 "<<"&@@MM$,$g%E)l*@)#.i9#(+##Ir288:(( $J  66&88 ( ' |>'. 6S Y^  ( '!;J<H77@oRIK*PZ r=c[[5nUS:Xa URO URnUR 5H(nUR 5HupVX%==U- ss'M M* U$NrU)rryrrrrZ)r[r\ state_countsstates_by_port port_states state_namers r>_aggregate_states$ConnectionReporter._aggregate_statessp"3' 5   # #((  *002K%0%6%6%8! (E1(&93r=czU(dg[UR5SS9nSRSUSU55$)NrLcUS*US4$)Nrrr<rs r>r:ConnectionReporter._format_state_summary..sT!WHd1g3Fr=r, c36# UHupUSUS3v M g7f)rrNr<.0rrs r> ;ConnectionReporter._format_state_summary..s' %;! l!E!9 %%;s)rrZjoin)r[rrordered_statess r>_format_state_summary(ConnectionReporter._format_state_summarysH    &F yy %3FU%;   r=cl/nUR5(a+URS5nU(aURSU45 UR5(a+URS5nU(aURSU45 U(dg[ [ R "SRS555 UGHupE[UR55n[/SQ5n[UR5SS 9H,upU(aX- S-OS n URXU S S 3/5 M. S URS'SURS'SURS '[ [ R"URS555 UR!5R#5Hn SU ;dSU ;a~[$R&"SU 5n U (a?[)U R+S55S:a![ [ R,"U 55 Ml[ UR/5"U 55 M[ [ R"U 55 M [SUR555n U S:dGM[ [ R,"SU SS355 GM [ 5 g)NrUzTCP connection statesrVzUDP socket stateszCONNECTION STATE BREAKDOWNr)StateCountrcUS*$rr<rs r>rEConnectionReporter.print_connection_state_breakdown..s Qxr=rrrrlrrrrrz\|\s+(\d+)\s+\|r2c3B# UHupU[;dMUv M g7frl)SUSPICIOUS_TCP_STATESrs r>rFConnectionReporter.print_connection_state_breakdown..s%)=%J!66)=s z ! High SYN-RECV count (ru) — possible SYN flood)r,rrRr0rr rrrrrrrZadd_rowaligncyan get_stringrrrryrredr)r[sections tcp_states udp_statestitlerrtablerrsharer count_match suspiciouss r> print_connection_state_breakdown3ConnectionReporter.print_connection_state_breakdowns4 ??  //6J!8* EF ??  //6J!4j AB  emm8??DEF#+ E ++-.E 78E%+""$*?&! 27#-A zU3Kq/BC & $'EKK #&EKK "EKK  %**U\\#./ 0((*557%d):"$)),>"EK"s;+<+B--7$,B r=c  [SURR555n[SURR555nUR5n[ U5nX-n[ [ R"S55 [ [ R"S[R"5RS53RS555 [ [ R"SUSS USS USS US3RS555 [ [ R"S55 [ 5 UR5nU(a[ [ R"S RS555 UHnUS (aSUS 3OSnSUSSU3n USU;a$[ [ R"U S355 MO[ [ R"U S35UR5"S5-[ R"S5-5 M [ 5 /n SHnn [URU 5HOn UR R#X5(aM%UR%X5n U R'U SU SU 35 MQ Mp U (a[ UR5"SRS555 [ UR5"SSR)U SS5355 [ U 5S:a/[ UR5"S[ U 5S- S355 [ 5 UR+5 UR-5nU(a[ UR5"SRS555 [US S!S"9HTnS#US$3n US%S&:Xa![ [ R."U 55 M5[ UR5"U 55 MV [ 5 UR15 UR3US'S(S)9nU(a[ [ R4"S*RS555 [7/S+Q5nUH/unnU(aUU- S-OS,nUR9UUUS-S.3/5 M1 S/UR:S0'S1UR:S2'S1UR:S3'UR=5R?5H"n [ [ R"U 55 M$ [ 5 gg)4Nc3`# UH$upURS5(dMUSv M& g7f)tcp:rNrrrdatas r>r=ConnectionReporter.print_executive_summary..+ C ~~f% DMC. .c3`# UH$upURS5(dMUSv M& g7f)udp:rNrrs r>rrrrzd====================================================================================================zCONNECTION SNAPSHOT z%Y-%m-%d %H:%M:%SrzTotal: rz connections | Unique IPs: z | TCP: z | UDP: zYOUR SSH SESSION(S)rOzport z unknown portrrz connected to z (visible below)rzchecking discovered portsrrTrrzDISCOVERED LISTEN PORTSr z ... +z moreALERTSc US$)Nrr<rs r>r.Ws j)9r=T)rreversez ! rrrrr)rrzTOP /24 SUBNETS (all services))Subnet Connections % of totalrrrrrrrr) rrrZrr rr rrnowstrftimerrZrrrrrmrrRrrrrrrrrrrrr)r[ tcp_total udp_totalrrtotal_connectionsadmin_sessionsr` port_labelr extra_portsr\r`r^ralert top_subnets subnet_tablerrrs r>print_executive_summary*ConnectionReporter.print_executive_summary s !;;AAC   !;;AAC  --/ ^ %1 ejj#$ JJ' (?(?@S(T'UV   JJ/23##-a.1%a= 9Q-A&+    ejj#$ 113  %**299#>? @)}-GM234' GDM?. E4=I-%**v-=%>?@ dV2;/**,-HIJ**S/** G &H%d&C&CH&MN ((88OO#55kL ""l^1[M8*#MN O'  $""$%>%E%Ec%JK L $""$r$))K4D*E)F%GH I;"$d&&(73{3Cb3H2I)OPQ G %%'&&(  $""$X__S%9: ;94eI./0$.%))D/*$**,T23 G --/'' "A'F  %-- @ G G LM N&'NOL!, =N!22c9TU$$fec{!_%EF"-,/L  x (03L  } -/2L  | ,$//1<<>ejj&'? G r=cx[(d/[S[RS9 [R"S5 gg)NzError: ss command not foundrr)rurrrrrs r> _require_ssConnectionReporter._require_ssps&w /cjj A HHQKr=cUR5 [R"[S/[RSSS9nWRR5H nURUSUR5 M" g![R a1 [ S[RS9 [R"S5 Nf=f)Nz-tanTrrrzError running: ss -tanrrrU)rrrrurrvrrrrrr_parse_ss_output_linerr[ryrs r>collect_tcp_connections*ConnectionReporter.collect_tcp_connectionsv   *&!! ! &,,779D  & &eT99 :,,  * < HHQK +A<collect_udp_connections*ConnectionReporter.collect_udp_connectionsrrc<[R"SUR55n[U5S:d USS;agUSn[R"SSUS5n[R"SSUS5nUR S S 5upUR S S 5upURU5nURU 5n U S :XdU S :XagU[;d U [;ag[U 5n URX5(dgURR(aURRU 5 gUS :Xa UR O UR"n XU==S - ss'X<U ==S - ss'g![ a gf=f![ a gf=f) Nrdrr>rrergrLrMrNrrr rU)rrrhr rirjrrQSKIPPED_SERVER_IPSSKIPPED_CLIENT_IPSryr?rrrrRrr)r[rr\connection_storage_dictrmconnection_stateserver_address_stringclient_address_string server_ipserver_port_stringrXclient_port_stringr` state_storages r>r(ConnectionReporter._parse_ss_output_linesXXfdjjl3 z?Q *Q-3F"F %a= $&FF;JqM$J !$&FF;JqM$J !,A,H,Ha,P )I,A,H,Ha,P )I&&y1 &&y1  $(:c(A  * *i;M.M  01K**;AA   ! ! ( (  4 4 ; ;I F 5   # #((  "#3494,Y71<79      s%AE>( F> F  F  FFcUR5(agURR5HIunn[UR 55U[ UR U5S.URSU3'MK UR5(ahURR5HIunn[UR 55U[ URU5S.URSU3'MK gg)Nrrstatesrr) r,rrZrrdictrrr0rr)r[r`ip_to_count_maps r>summarize_collected_connections2ConnectionReporter.summarize_collected_connectionss ??  --335!!7!7!9:*"4#:#:;#GHH..k]/CD6 ??  --335!!7!7!9:*"4#:#:;#GHH..k]/CD6 r=cJUR5(a<URH,nSU3nX R;dMS00S.URU'M. UR5(a=URH,nSU3nX R;dMS00S.URU'M. gg)Nrrr.r)r,rrr0r)r[r`rs r>(ensure_all_requested_services_in_summary;ConnectionReporter.ensure_all_requested_services_in_summarys ??  #77 !+/#A#AA!"!"$@D228< 8 ??  #77 !+/#A#AA!"!"$@D228< 8 r=cf[R"5R$![a Us$f=frl)rget_terminal_sizecolumnsr)r[rs r>_terminal_width"ConnectionReporter._terminal_widths0 ++-55 5 N s ! 00cp[SUR5[-5n[S[XU55$r)rr:ESTIMATED_TABLE_WIDTHmin)r[ table_count preferred width_baseds r>_tables_per_row"ConnectionReporter._tables_per_rows1!T1137LLM 1c++>??r=c#V# [S[U5U5H nXX!-v M g7f)Nr)ranger )tables_with_row_data max_per_rowstarts r> _chunk_tables ConnectionReporter._chunk_tabless-1c"67EE&U-@A AFs')cVUSnU[:nUR5USS3USSS3/nURSS5nUS:aURUSS35 URS S 5nURS S 5nU(aURS U35 U(aURS U35 SR U5n U(a/[ [ R"U RS555 g[ [ R"U RS555 g)N connectionsrz connsrrinternal_web_connectionsrz internal/web-stackrrL state_summaryz top /24: zstates: z | r) rrrgrRrrr rrr) r[ service_titleservice_totalsr service_is_hot title_parts internal_webrrN title_strings r>_print_service_title'ConnectionReporter._print_service_titles"*=9*.CC""$% #6 *l+A.k : &))*DaH !    ,q!11DE F#'' b9 &**?B?    :,7 8    -9 :zz+.  %))L//45 6 %-- 3 3C 89 :r=c ^^/n/nUHupEpgURUR5R55 URUVV s1sHAupU [:dMTR Xg5(aTR U5(aM?UiMC sn n5 M [ SU55n UHPn U (dM [U S5n [U 5U :dM+U RSU -5 [U 5U :aM%MR [U 5GH,n /n[U5HupXmU S:HnTR5RS5=(d TR5(+nU(a'UR[R"T55 MwU(a'UR[R"T55 M[UU4SjUU55nU(a'UR[R "T55 MURT5 M [#SR%U55 GM/ gs sn nf)Nc3H# UHo(dM [U5v M g7frl)r )rliness r>r.%s $<5JCJJ$# UHnTRTU5v M g7frl)_line_contains_ip)rhot_iprr[s r>rrZ>s,&'F..tV<<'s"r)rRrrrrrrr rE enumeraterhrr rranyrrr)r[rFlist_of_table_line_listslist_of_high_traffic_ip_setsrrowsr`r\rr max_heightrY table_widthirmcurrent_table_index is_header is_border is_hot_liners` @r>_print_table_row_chunk)ConnectionReporter._print_table_row_chunks#% ')$2F .E $ + +E,<,<,>,I,I,K L ( / /!%1!%IB,,%%k<<004 !%1 3G $<  .EeAh-Ke*z) S;./e*z) .z"AJ.7(/*#xF  JJL33C8L rQConnectionReporter.print_service_tables_side_by_side...Vs/$haE$N)r)rrorcs r>rGConnectionReporter.print_service_tables_side_by_side..Us+(%9MAQ/$///%9s#%)rLrr) rr rBrUrrIr_rrk) r[rOrFrPrGdisplayed_connectionsrorcr table_chunks chunk_indexchunks r>!print_service_tables_side_by_side4ConnectionReporter.print_service_tables_side_by_sideJs$   !$'(%9(% ! 5!.B-AMAQ%)EB%)-A N  ..s3G/HIK !!-@   3 A #,L"9 KQ  ' ' .#: 'sCc4SUS3U;=(d SUS3U;$)Nz| r[|r<)rrs r>r]$ConnectionReporter._line_contains_ipqs'B4qzT!7r"QZ4%77r=ch[[5n[[5nSnSnUR5HupxXXS- nUSR5HCupURXr5(aUR U 5(aXj- nM7X9==U - ss'ME UR S05R5HupXK==U - ss'M M Sn UR US5n U (a[U R5SS9Sn UXV- U[U5U S ;aU OSURU5S .$) Nrrrr/rLrc US$rr<rs r>r4ConnectionReporter._service_totals..sT!Wr=r>r r)rLexternal_connectionsrMrrrN) rryrZrrrgrrr r)r[ ports_datar\rrr rMr`inforrrr subnet_totalss r>_service_totals"ConnectionReporter._service_totalsus:$ "3' #$ !+!1!1!3 K g . $(K$5$5$7 %%k<<00;;,5,(E1(%8&*XXh%;%A%A%C! (E1(&D"4 ++Ir: ]0028LMaPJ-$5$P(@i.(2.(H*b!77 E   r=c /nUR5HupVUSS::aMUSn[USR5SS9SSn[UR5SU3SS /5n UH4upX- S -n U R UR XU5U U S S 3/5 M6 S U lS U R S'S U R S 'URXXS45 M U$)NrrrcUS*$rr<)xs r>r:ConnectionReporter._build_service_tables..s adUr=rrrrrrrrr)rZrrrrrrrR) r[r^rr\tables_to_printr`r service_totalrcrrrrs r>_build_service_tables(ConnectionReporter._build_service_tabless !+!1!1!3 KG}! MM$u+++-?CCRHD#))+,Ak];E%) .#5 **98LSkO%)EK#&EKK "EKK   " "E#G H-"4.r=c^^[SUR555nUS::ag[UU4SjUR555nTRR (+=(d US:=(d U$)Nc3*# UH oSv M g7f)rNr<)rds r>r;ConnectionReporter._should_print_service..sH4Gq' 4GrqrFc3># UH:upTRUSUT5R5H up4US:v M M< g7f)rrN)rrZ)rr`rrrr\r[s r>rrsS %7! $($<$<U [(%eg%  CK% %7sAAr)rrr`rZrr")r[rr\r any_ip_over_200s` ` r>_should_print_service(ConnectionReporter._should_print_servicessHJ4E4E4GHH  ! %/%5%5%7  ))---  % 8 r=c |U(a5URX%S9(a URUUURX%S9US9 ggg)Nr\)rPrG)rrwr)r[rOrrrGr\s r>_print_service_if_needed+ConnectionReporter._print_service_if_neededsY t99  :   2 2#33 4 ( 3  ?r=c 0[S5nURR5HWup#URS5upE[ U5nUR Xd5nUSUSUR S05S.XU4U'MY SURRURRSS S S S S S/ SS/S.nSGHUnUS:XaUR5(dM!Xn Sn U [U 5:aXnUS:XaUS :Xa|/SQn /n 0n U HGnUR XN405nU RU5 U RURUUUS95 MI URSU U [ US9 U [U 5- n MUR XG405n U (a"URX}US9n URUU U US9 U S- n U [U 5:aMUR US405nU(dGM2URSUUS9n URSUU US9 GMX g)Nc[S5$)Nc S0S.$)Nr)rrr<r<r=r>rXConnectionReporter.generate_connection_report_tables....s !B(?r=rr<r=r>rFConnectionReporter.generate_connection_report_tables..s K ?@r=rrrr/r.r&r!r#r$rArr/r2r5rSrTrVrrU)r#r$rArz MAIL SERVICES)rGr\rre)rrrZrryrrgrrWrXr0r rrrrMAIL_SERVICES_MAX_PER_ROW)r[service_map_by_protocolrrr\rr`r^service_print_order_by_protocolservice_print_orderrfcombined_mail_servicesrrsub_service_namesub_service_ports_dataother_ports_datas r>!generate_connection_report_tables4ConnectionReporter.generate_connection_report_tabless"- @# *.)G)G)M)M)O %H$,NN3$7 !Hk*K11L)1&u-)--h;N #|$< =k J *P%%00%%11 5>+ ' 'H5 ):):"A"K Ac-..25 u$)?-H*&(O!#J,B(1H1L1L%8"2.#))*@A'.. 66 0 6)17 -C11'"'$=!) 2344A488,b &*&@&@$8'A'O11$"'!) 2 Q[c-..^ 7::7#R   "&"<"<-#=#--$#% .y'r=c [[5n[[5nURHn[U5nUR(d"UR (dUR (aMDU[[US3SS95==S- ss'U[[US3SS95==S- ss'M SU4SU44GHupVU(dM[UR5SS 9nURR(aUVs/sHoSS :dM UPM n nOUSS n U (dMn[S S /5n XZl[!U 5V Vs1sHupUSS :dMU iM n n nU HnU R#U5 M SU R$S 'SU R$S 'U R'5R)5n [!U 5H{upU S;a![+[,R."U55 M,U S:a*U S- U ;a![+[,R0"U55 M\[+[,R2"U55 M} [+5 GM g![a GM;f=fs snfs snn f)Nz/24Frrz/16zTop /24 SubnetszTop /16 SubnetscUS*$rr<)kvs r>rCConnectionReporter.generate_subnet_summary_tables..Rs BqE6r=rrrNrrrr>rrMr)rryrrrrrrzrrrrZrr"rrr_rrrrrr rrr)r[slash_24_subnet_countsslash_16_subnet_countsrip_address_objecttable_title_labelsubnet_counts_dataall_rows_sortedrowrows_to_displayrrfhigh_traffic_row_indicesrYrs r>generate_subnet_summary_tables1ConnectionReporter.generate_subnet_summary_tables4sX!,S!1!,S!1AAI $.y$9!%11(33(77& &7%8#I/AI I*I* I/I/ I'&I'cDUR5 UR5 URR(a[UR 5(aUR 5 UR 5(aUR5 UR5 gUR 5(aUR5 UR 5(aUR 5 UR5 UR5 UR5 UR5 grl) rr{rrr,rr0rrr2r5rrrs r>_run_report_once#ConnectionReporter._run_report_oncevs  $$&  ! ! ( (  ,,.  ,,.  / / 1  ??    ( ( * ??    ( ( * ,,. 557 $$& ..0r=c`[RR5(a [SSS9 gg)NzrL)end)rrisattyrr<r=r> _clear_screen ConnectionReporter._clear_screens$ ::     /r * r=cfURRn[[R"SUS355 UR 5 UR 5 UR5 [R"U5 MH![a" [[R"S55 gf=f)NzWatch mode: refreshing every zs (Ctrl+C to exit)z Watch mode stopped.) rrrr rrrrtimesleepKeyboardInterrupt)r[intervals r>run_watch_mode!ConnectionReporter.run_watch_modes))// JJ/z9KL   7""$,,.%%' 8$  ! 7 %**45 6 7sA B)B0/B0ctURRbUR5 gUR5 grl)rrrrrs r>rConnectionReporter.runs/  ! ! ' ' 3    !  r=)rrrrrrrrrrrrrrrrl)r)rr)rN)r)NN)rUr)Drtrurvrwrxra staticmethodrrrrrrrrrrrrr#r,r0r4r9rr?rGrZr]rarqr{rQrrrrrrrrrrrrrrr2r5r:DEFAULT_MAX_TABLES_PER_ROWrBrIrUrkrwr]rrrrrrrrrrr|r<r=r>r~r~ts'0&,,\G ,   .& )5#p?>B..  OM $4P FL2=:   77  Ob   0daF $$&=R.* 6P@BB;02)p %N88 @6  GK"aH@D1.++7" r=r~__main__)(rr8rrrrr collectionsrr ipaddressrr prettytablerradsr rrur"r#rrrrrrrrrr=rrrCr?rErGr~rtrr<r=r>rs  #,# ,,t <U#Y/*#& *O (-K-K`s s l) zr=