public inbox for development@lists.ipfire.org
 help / color / mirror / Atom feed
* [PATCH 1/2] display active logins at remote.cgi
@ 2018-01-20 17:24 Peter Müller
  0 siblings, 0 replies; only message in thread
From: Peter Müller @ 2018-01-20 17:24 UTC (permalink / raw)
  To: development

[-- Attachment #1: Type: text/plain, Size: 3655 bytes --]

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(a)link38.eu>
---
 html/cgi-bin/remote.cgi | 91 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 91 insertions(+)

diff --git a/html/cgi-bin/remote.cgi b/html/cgi-bin/remote.cgi
index 10a3e87cc..5acce4e99 100644
--- a/html/cgi-bin/remote.cgi
+++ b/html/cgi-bin/remote.cgi
@@ -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
+;
+		}
+	}
+}
-- 
2.13.6



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2018-01-20 17:24 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-20 17:24 [PATCH 1/2] display active logins at remote.cgi Peter Müller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox