mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
display active logins at remote.cgi
Display active user logins (both local and remote) at the remote.cgi page in the WebUI. This might be useful for debugging broken SSH sessions or simply checking that nobody is currently logged in. :-) Signed-off-by: Peter Müller <peter.mueller@link38.eu> Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
committed by
Michael Tremer
parent
c2e008880c
commit
9159bd4bbe
@@ -25,15 +25,23 @@ use strict;
|
||||
#use warnings;
|
||||
#use CGI::Carp 'fatalsToBrowser';
|
||||
|
||||
use IO::Socket;
|
||||
|
||||
require '/var/ipfire/general-functions.pl';
|
||||
require "${General::swroot}/geoip-functions.pl";
|
||||
require "${General::swroot}/lang.pl";
|
||||
require "${General::swroot}/header.pl";
|
||||
|
||||
my %color = ();
|
||||
my %mainsettings = ();
|
||||
my %remotesettings=();
|
||||
my %checked=();
|
||||
my $errormessage='';
|
||||
my $counter = 0;
|
||||
|
||||
&General::readhash("${General::swroot}/main/settings", \%mainsettings);
|
||||
&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
|
||||
|
||||
&Header::showhttpheaders();
|
||||
|
||||
$remotesettings{'ENABLE_SSH'} = 'off';
|
||||
@@ -187,6 +195,38 @@ print "</table>\n";
|
||||
|
||||
&Header::closebox();
|
||||
|
||||
&Header::openbox('100%', 'center', $Lang::tr{'ssh active sesstions'});
|
||||
|
||||
print <<END;
|
||||
<table class="tbl" width='66%'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th align="center">
|
||||
<strong>$Lang::tr{'ssh username'}</strong>
|
||||
</th>
|
||||
<th align="center">
|
||||
<strong>$Lang::tr{'ssh login time'}</strong>
|
||||
</th>
|
||||
<th align="center">
|
||||
<strong>$Lang::tr{'ip address'}</strong>
|
||||
</th>
|
||||
<th align="center">
|
||||
<strong>$Lang::tr{'country'}</strong>
|
||||
</th>
|
||||
<th align="center">
|
||||
<strong>$Lang::tr{'rdns'}</strong>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
END
|
||||
|
||||
&printactivelogins();
|
||||
|
||||
print "</tbody>\n</table>\n";
|
||||
|
||||
&Header::closebox();
|
||||
|
||||
&Header::closebigbox();
|
||||
|
||||
&Header::closepage();
|
||||
@@ -205,3 +245,54 @@ sub viewkey
|
||||
print "<tr><td>$key ($name)</td><td><code>$fingerprint</code></td><td align='center'>$keysize</td></tr>\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub printactivelogins()
|
||||
{
|
||||
# print active SSH logins (grep outpout of "who -s")
|
||||
my $command = "who -s";
|
||||
my @output = `$command`;
|
||||
chomp(@output);
|
||||
|
||||
my $id = 0;
|
||||
|
||||
if ( scalar(@output) == 0 )
|
||||
{
|
||||
# no logins appeared
|
||||
my $table_colour = ($id++ % 2) ? $color{'color22'} : $color{'color20'};
|
||||
print "<tr bgcolor='$table_colour'><td colspan='5'>$Lang::tr{'ssh no active logins'}</td></tr>\n";
|
||||
} else {
|
||||
# list active logins...
|
||||
|
||||
foreach my $line (@output)
|
||||
{
|
||||
my @arry = split(/\ +/, $line);
|
||||
|
||||
my $username = @arry[0];
|
||||
my $logintime = join(' ', @arry[2..4]);
|
||||
my $remoteip = @arry[5];
|
||||
$remoteip =~ s/[()]//g;
|
||||
|
||||
# display more information about that IP adress...
|
||||
my $ccode = &GeoIP::lookup($remoteip);
|
||||
my $flag_icon = &GeoIP::get_flag_icon($ccode);
|
||||
|
||||
# get rDNS...
|
||||
my $iaddr = inet_aton($remoteip);
|
||||
my $rdns = gethostbyaddr($iaddr, AF_INET);
|
||||
if (!$rdns) { $rdns = $Lang::tr{'lookup failed'}; };
|
||||
|
||||
my $table_colour = ($id++ % 2) ? $color{'color22'} : $color{'color20'};
|
||||
|
||||
print <<END;
|
||||
<tr bgcolor='$table_colour'>
|
||||
<td>$username</td>
|
||||
<td>$logintime</td>
|
||||
<td>$remoteip</td>
|
||||
<td align='center'><a href='country.cgi#$ccode'><img src='$flag_icon' border='0' alt='$ccode' title='$ccode' /></a></td>
|
||||
<td>$rdns</td>
|
||||
</tr>
|
||||
END
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user