PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/sharedrads/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/sharedrads/show-conns |
#!/usr/bin/perl =pod =head1 show-conns show-conns - Summarize information about connections to different services on the server =head1 SYNOPSIS show-conns [--http|--imap|--pop3|--smtp|--ftp|--cpanel|--webmail|--whm|--ssh]* [port-no port-no ...] =head1 DESCRIPTION Summarize information about connections to different services on the server =head1 OPTIONS =over 8 =item B<--http> Show only HTTP connection details (ports 80 and 443) =item B<--imap> Show only IMAP connection details (ports 143, 993) =item B<--pop3> Show only POP3 connection details (ports 110, 995) =item B<--smtp> Show only SMTP connection details (ports 25, 465, 587) =item B<--ftp> Show only FTP connection details (ports 20, 21) =item B<--ssh> Show only SSH connection details (ports 22, 2222) =item B<--webmail> Show only Webmail connection details (ports 2095, 2096) =item B<--cpanel> Show only Cpanel connection details (ports 2082, 2083) =item B<--whm> Show only WHM connection details (ports 2086, 2087) =item B<--all> Show all connections on known ports (default behavior) =item B<-f>, B<--flat> Do not perform any tabular formatting in the output. Instead, print a flat list of ports, IPs, and connection counts. This is mainly intended for piping into other commands to extract data. =item B<-c>, B<--count>=I<NUM> Show the top I<NUM> IPs by connection count for each port. Defaults to 10. =item B<-b>, B<--bleach> Disable ANSI color escape sequences in the output =item B<-h>, B<--help> You know the drill =item B<-v>, B<--version> Ditto =back =cut our $VERSION = "1.1"; use strict; use Cwd qw( realpath ); use File::Basename; use File::Spec::Functions; use Getopt::Long; use Pod::Usage; BEGIN { my @dir_templates = qw( %s/perl %s/../perl %s/../lib/perl ); for my $lib_template ( @dir_templates ) { my $lib_dir = realpath( sprintf( $lib_template, dirname( __FILE__ ) ) ); if ( -d "$lib_dir/IMH/" ) { unshift( @INC, $lib_dir ); last; } } }; use IMH::ShowConns::Formatters; use IMH::Terminal; #################################################################################################### ########################### Global Script Variable / Constant Definitions ########################## #################################################################################################### our $show_all_ports = 1; our %selected_ports = (); our @port_groups = (); our %connections = (); our $flat = 0; our %report_options; #################################################################################################### ###################################### Supporting Subroutines ###################################### #################################################################################################### sub select_ports { $show_all_ports = 0; $selected_ports{ $_ } = 1 for ( @_ ); } #################################################################################################### ############################################ Main Script ########################################### #################################################################################################### GetOptions( "http" => sub { select_ports( 80, 443 ); }, "imap" => sub { select_ports( 143, 993 ); }, "pop3" => sub { select_ports( 110, 995 ); }, "smtp" => sub { select_ports( 25, 587, 465 ); }, "ftp" => sub { select_ports( 20, 21 ); }, "ssh" => sub { select_ports( 22, 2222 ); }, "cpanel" => sub { select_ports( 2082, 2083 ); }, "whm" => sub { select_ports( 2086, 2087 ); }, "webmail" => sub { select_ports( 2095, 2096 ); }, "all" => sub { $show_all_ports = 1; }, "c|count=i" => sub { my ( $opt, $val ) = @_; $report_options{display_count} = $val; }, "f|flat" => \$flat, "b|bleach" => \$IMH::Terminal::bleach, 'h|help' => sub { pod2usage( 0 ); }, 'v|version' => sub { print( "$VERSION\n" ); exit( 0 ); } ); for ( @ARGV ) { if ( /^\d+$/ ) { select_ports( 0 + $_ ); } else { warn( sprintf( "Invalid script argument `%s'\n", $_ ) ); } } open( SS, "/usr/sbin/ss -tan |" ); while ( <SS> ) { chomp; my @cols = split( /\s+/ ); my ( $server, $client ) = @cols[ 3 ... 4 ]; $server =~ s(^::ffff:)()i; $client =~ s(^::ffff:)()i; my ( $server_ip, $server_port ) = split( /:/, $server, 2 ); if ($server_ip == '*' || $server_port == '*' || $server_ip == '0.0.0.0' || $server_ip == '127.0.0.1') { next; } $server_port = 0 + $server_port; if ( $server_port < 5000 and $show_all_ports || $selected_ports{ $server_port } ) { my ( $client_ip, $client_port ) = split( /:/, $client, 2 ); $connections{ $server_port }->{ $client_ip }++; } } close( SS ); # # %connections should now contain a map that follows this structure: # { port_number => { ip_address => connection_count } } # # So this loop starts walking through the individual stat maps and calculates # the total number of connections for the port # for my $port ( keys %connections ) { my $port_connections = $connections{ $port }; my $total = 0; # # get the total connection count for the port by summing up the # individual IP connection totals # $total += $_ for ( values %$port_connections ); $connections{ $port } = { total => $total, ips => $port_connections }; } if ( $flat ) { flat_report( \%connections, %report_options ); } else { tabular_report( \%connections, %report_options ); }