# $Id: connections.cgi,v 1.6 2004/03/04 08:40:45 riddles Exp $
pour pouvoir trier les connections en cours par
- Protocole : tous/tcp/udp
- Etat de connection established/close/syn/wait
- Ip Origine : a apartir de la table arp
- Ip destination ou sur une partie seulement
- Selection Marque ASSURED / UNREPLIED
ca ajoute les menus necesaires pour selectionner ce qu'on veut voir
Voir dernieres maj du script en fin de post.
enjoy
il suffit de remplacer par le fichier ci joint si vous avez la même version
sinon ca doit pas être tres dur de modifier si vous avez une version plus ancienne
teste sur 1.4a1 1.4b4 1.4b5
elari
- Code: Tout sélectionner
#!/usr/bin/perl
#
# (c) 2001 Jack Beglinger <jackb_guppy@yahoo.com>
#
# (c) 2003 Dave Roberts <countzerouk@hotmail.com> - colour coded netfilter/iptables rewrite for 1.3
#
# $Id: connections.cgi,v 1.6 2004/03/04 08:40:45 riddles Exp $
#
# Setup GREEN, ORANGE, IPCOP, VPN CIDR networks, masklengths and colours only once
my @network;
my @masklen;
my @colour;
use Net::IPv4Addr qw( :all );
require '/var/ipcop/header.pl';
# Read various files
my %netsettings;
&readhash("${swroot}/ethernet/settings", \%netsettings);
open (ACTIVE, "/proc/net/ip_conntrack");
my @active = <ACTIVE>;
close (ACTIVE);
open (ACTIVE, "/proc/net/ipsec_eroute");
my @vpn = <ACTIVE>;
close (ACTIVE);
my $aliasfile = "${swroot}/ethernet/aliases";
open(ALIASES, $aliasfile) or die 'Unable to open aliases file.';
my @aliases = <ALIASES>;
close(ALIASES);
# Add Green Firewall Interface
push(@network, $netsettings{'GREEN_ADDRESS'});
push(@masklen, "255.255.255.255" );
push(@colour, $colourfw );
# Add Green Network to Array
push(@network, $netsettings{'GREEN_NETADDRESS'});
push(@masklen, $netsettings{'GREEN_NETMASK'} );
push(@colour, $colourgreen );
# Add Green Routes to Array
my @routes = `/sbin/route -n | /bin/grep $netsettings{'GREEN_DEV'}`;
foreach $route (@routes) {
chomp($route);
my @temp = split(/[\t ]+/, $route);
push(@network, $temp[0]);
push(@masklen, $temp[2]);
push(@colour, $colourgreen );
}
# Add Firewall Localhost 127.0.0.1
push(@network, '127.0.0.1');
push(@masklen, '255.255.255.255' );
push(@colour, $colourfw );
# Add Orange Network
if ($netsettings{'ORANGE_DEV'}) {
push(@network, $netsettings{'ORANGE_NETADDRESS'});
push(@masklen, $netsettings{'ORANGE_NETMASK'} );
push(@colour, $colourorange );
# Add Orange Routes to Array
@routes = `/sbin/route -n | /bin/grep $netsettings{'ORANGE_DEV'}`;
foreach $route (@routes) {
chomp($route);
my @temp = split(/[\t ]+/, $route);
push(@network, $temp[0]);
push(@masklen, $temp[2]);
push(@colour, $colourorange );
}
}
# Add Blue Network
if ($netsettings{'BLUE_DEV'}) {
push(@network, $netsettings{'BLUE_NETADDRESS'});
push(@masklen, $netsettings{'BLUE_NETMASK'} );
push(@colour, $colourblue );
# Add Blue Routes to Array
@routes = `/sbin/route -n | /bin/grep $netsettings{'BLUE_DEV'}`;
foreach $route (@routes) {
chomp($route);
my @temp = split(/[\t ]+/, $route);
push(@network, $temp[0]);
push(@masklen, $temp[2]);
push(@colour, $colourblue );
}
}
# Add STATIC RED aliases
if ($netsettings{'RED_DEV'}) {
# We have a RED eth iface
if ($netsettings{'RED_TYPE'} eq 'STATIC') {
# We have a STATIC RED eth iface
my $line;
foreach $line (@aliases)
{
chomp($line);
my @temp = split(/\,/,$line);
}
if ( $temp[0] ) {
push(@network, $temp[0]);
push(@masklen, $netsettings{'RED_NETMASK'} );
push(@colour, $colourfw );
}
}
}
# Add VPNs
foreach $line (@vpn)
{
@temp = split(/[\t ]+/,$line);
@temp1 = split(/[\/:]+/,$temp[3]);
push(@network, $temp1[0]);
push(@masklen, ipv4_cidr2msk($temp1[1]));
push(@colour, $colourvpn );
}
if (open(IP, "${swroot}/red/local-ipaddress")) {
my $redip = <IP>;
close(IP);
chomp $redip;
push(@network, $redip);
push(@masklen, '255.255.255.255' );
push(@colour, $colourfw );
}
#elari read arp values and display menu to select client
my %cgiparams;
$cgiparams{'ENABLED'} = 'off';
&getcgihash(\%cgiparams);
my ($menu_form, $menu_form_submit, $menu_form_end);
$menu_form = "<form method='post' action='$ENV{'SCRIPT_NAME'}'>";
$menu_form_submit = "<input type='submit' name='' value='Ok' />";
$menu_form_end = "</form>\n";
my ($menu_proto, $see_proto, $is_proto_all , $is_proto_udp , $is_proto_tcp);
$see_proto = $cgiparams{'SEE_PROTO'};
if ($see_proto eq "***" ) {$is_proto_all="selected"} else {$is_proto_all=""};
if ($see_proto eq "tcp" ) {$is_proto_tcp="selected"} else {$is_proto_tcp=""};
if ($see_proto eq "udp" ) {$is_proto_udp="selected"} else {$is_proto_udp=""};
$menu_proto = "<select name='SEE_PROTO'><option value='***' $is_proto_all>***</option><option value='udp' $is_proto_udp>udp</option><option value='tcp' $is_proto_tcp>tcp</option></select>";
my ($menu_state, $see_state, $is_state_all, $is_state_est, $is_state_wait, $is_state_syn, $is_state_clos);
$see_state = $cgiparams{'SEE_STATE'};
if ($see_state eq "***" ) {$is_state_all ="selected"} else {$is_state_all =""};
if ($see_state eq "ESTABLISHED" ){$is_state_est ="selected"} else {$is_state_est =""};
if ($see_state eq "TIME_WAIT" ) {$is_state_wait="selected"} else {$is_state_wait=""};
if ($see_state eq "SYN_RECV" ) {$is_state_syn ="selected"} else {$is_state_syn =""};
if ($see_state eq "CLOSE" ) {$is_state_clos="selected"} else {$is_state_clos=""};
$menu_state = "<select name='SEE_STATE'><option value='***' $is_state_all>***</option><option value='ESTABLISHED' $is_state_est>ESTABLISHED</option><option value='TIME_WAIT' $is_state_wait>TIME_WAIT</option><option value='SYN_RECV' $is_state_syn>SYN_RECV</option><option value='CLOSE' $is_state_clos>CLOSE</option></select>";
my ($menu_client, $see_client, $is_select_client);
$see_client = $cgiparams{'SEE_CLIENT'};
open (ARP_ACTIVE, "/proc/net/arp") or die 'Elari: Unable to open arp file.';
$menu_client = "<select name='SEE_CLIENT'>";
while (<ARP_ACTIVE>)
{
chomp($_);
my @temp = split(' ');
$is_select_client= "" ;
if ($temp[0] eq 'IP') {
if ($see_client eq "") {$is_select_client = "SELECTED";}
$menu_client = $menu_client . "<option value='' $is_select_client>*.*.*.*</option>\n";
} else {
if ($see_client eq $temp[0]) {$is_select_client = "SELECTED";}
$menu_client = $menu_client . "<option value='$temp[0]' $is_select_client>$temp[0]</option>\n";
}
}
close(ARP_ACTIVE);
$menu_client = $menu_client . "</select>";
#elari end
&showhttpheaders();
&openpage($tr{'connections'}, 1, '');
&openbigbox('100%', 'left');
&openbox('100%', 'left', $tr{'connection tracking'} . " : " . $see_client . ":" . $see_proto . " State: " . $see_state ); #elari we display select menu
print <<END
<table width='60%'>
<tr><td align='center'><b>$tr{'legend'} : </b></td>
<td align='center' bgcolor='$colourgreen'><b><font color='#FFFFFF'>$tr{'lan'}</font></b></td>
<td align='center' bgcolor='$colourred'><b><font color='#FFFFFF'>$tr{'internet'}</font></b></td>
<td align='center' bgcolor='$colourorange'><b><font color='#FFFFFF'>$tr{'dmz'}</font></b></td>
<td align='center' bgcolor='$colourblue'><b><font color='#FFFFFF'>$tr{'wireless'}</font></b></td>
<td align='center' bgcolor='$colourfw'><b><font color='#FFFFFF'>IPCop</font></b></td>
<td align='center' bgcolor='$colourvpn'><b><font color='#FFFFFF'>$tr{'vpn'}</font></b></td>
</tr>
</table>
<br />
<table width='60%'>
<tr><td align='center'><b>$tr{'protocol'}</b></td>
<td align='center'><b>$tr{'expires'}($tr{'seconds'})</b></td>
<td align='center'><b>$tr{'connection'}$tr{'status'}</b></td>
<td align='center'><b>$tr{'original'}$tr{'source ip and port'}</b></td>
<td align='center'><b>$tr{'original'}$tr{'dest ip and port'}</b></td>
<td align='center'><b>$tr{'expected'}$tr{'source ip and port'}</b></td>
<td align='center'><b>$tr{'expected'}$tr{'dest ip and port'}</b></td>
<td align='center'><b>$tr{'marked'}</b></td>
<td align='center'><b>$tr{'use'}</b></td>
</tr>
<tr><td align='center'>$menu_form $menu_proto</td>
<td align='center'></td>
<td align='center'>$menu_state</td>
<td align='center'>$menu_client</td>
<td align='center'></td>
<td align='center'></td>
<td align='center'></td>
<td align='center'></td>
<td align='center'>$menu_form_submit $menu_form_end</td>
</tr>
END
;
my $line;
my $protocol;
my $expires;
my $connstatus;
my $orgsip;
my $orgdip;
my $orgsp;
my $orgdp;
my $exsip;
my $exdip;
my $exsp;
my $exdp;
my $marked;
my $use;
my $orgsipcolour;
my $orgdipcolour;
my $exsipcolour;
my $exdipcolour;
foreach $line (@active)
{
chomp($line);
my @temp = split(' ',$line);
#print "0:" . $temp[0] . " 4: " . $temp[4] . (substr $temp[4], 4);
my ($theclient, $theproto, $thestate);
if ($temp[0] eq 'udp') {
$theproto = $temp[0];
$thestate = "***";
$theclient = substr $temp[3], 4;
}
if ($temp[0] eq 'tcp') {
$theproto = $temp[0];
$thestate = $temp[3];
$theclient = substr $temp[4], 4;
}
if ($temp[0] eq 'unknown') {
$theproto = "***";
$thestate = "***";
$theclient = substr $temp[3], 4;
}
if( (($see_proto eq "***") || ($theproto eq $see_proto) ) &&
(($see_state eq "***") || ($thestate eq $see_state) ) &&
(($see_client eq "") || ($theclient eq $see_client) ) ) {
print "<tr bgcolor='$table1colour'>\n";
if ($temp[0] eq 'udp') {
my $offset = 0;
$marked = '';
$protocol = $temp[0] . " (" . $temp[1] . ")";
$expires = $temp[2];
$connstatus = ' ';
$orgsip = substr $temp[3], 4;
$orgdip = substr $temp[4], 4;
$orgsp = substr $temp[5], 6;
$orgdp = substr $temp[6], 6;
if ($temp[7] eq '[UNREPLIED]') {
$marked = $temp[7];
$offset = 1;
}
else {
$connstatus = ' ';
}
$exsip = substr $temp[7 + $offset], 4;
$exdip = substr $temp[8 + $offset], 4;
$exsp = substr $temp[9 + $offset], 6;
$exdp = substr $temp[10 + $offset], 6;
if ($marked eq '[UNREPLIED]') {
$use = substr $temp[11 + $offset], 4;
}
else {
$marked = $temp[11 + $offset];
$use = substr $marked, 0, 3;
if ($use eq 'use' ) {
$marked = '';
$use = substr $temp[11 + $offset], 4;
}
else {
$use = substr $temp[12 + $offset], 4;
}
}
}
if ($temp[0] eq 'tcp') {
my $offset = 0;
$protocol = $temp[0] . " (" . $temp[1] . ")";
$expires = $temp[2];
$connstatus = $temp[3];
$orgsip = substr $temp[4], 4;
$orgdip = substr $temp[5], 4;
$orgsp = substr $temp[6], 6;
$orgdp = substr $temp[7], 6;
if ($temp[8] eq '[UNREPLIED]') {
$marked = $temp[8];
$offset = 1;
$use = substr $temp[13], 4;
}
else {
$marked = $temp[12];
$use = substr $temp[13], 4;
}
$exsip = substr $temp[8 + $offset], 4;
$exdip = substr $temp[9 + $offset], 4;
$exsp = substr $temp[10 + $offset], 6;
$exdp = substr $temp[11 + $offset], 6;
}
if ($temp[0] eq 'unknown') {
my $offset = 0;
$protocol = "??? (" . $temp[1] . ")";
$protocol = "esp (" . $temp[1] . ")" if ($temp[1] == 50);
$protocol = " ah (" . $temp[1] . ")" if ($temp[1] == 51);
$expires = $temp[2];
$connstatus = ' ';
$orgsip = substr $temp[3], 4;
$orgdip = substr $temp[4], 4;
$orgsp = ' ';
$orgdp = ' ';
$exsip = substr $temp[5], 4;
$exdip = substr $temp[6], 4;
$exsp = ' ';
$exdp = ' ';
$marked = ' ';
$use = ' ';
}
$orgsipcolour = ipcolour($orgsip);
$orgdipcolour = ipcolour($orgdip);
$exsipcolour = ipcolour($exsip);
$exdipcolour = ipcolour($exdip);
print <<END
<td align='center'>$protocol</td>
<td align='center'>$expires</td>
<td align='center'>$connstatus</td>
<td align='center' bgcolor='$orgsipcolour'><a href='/cgi-bin/ipinfo.cgi?ip=$orgsip'><font color='#FFFFFF'>$orgsip</font></a><font color='#FFFFFF'>:$orgsp</font></td>
<td align='center' bgcolor='$orgdipcolour'><a href='/cgi-bin/ipinfo.cgi?ip=$orgdip'><font color='#FFFFFF'>$orgdip</font></a><font color='#FFFFFF'>:$orgdp</font></td>
<td align='center' bgcolor='$exsipcolour'><a href='/cgi-bin/ipinfo.cgi?ip=$exsip'><font color='#FFFFFF'>$exsip</font></a><font color='#FFFFFF'>:$exsp</font></td>
<td align='center' bgcolor='$exdipcolour'><a href='/cgi-bin/ipinfo.cgi?ip=$exdip'><font color='#FFFFFF'>$exdip</font></a><font color='#FFFFFF'>:$exdp</font></td>
<td align='center'>$marked</td><td align='center'>$use</td>
</tr>
END
;
}
}
print "</table>\n";
&closebox();
&closebigbox();
&closepage();
sub ipcolour($) {
my $id = 0;
my $line;
my $colour = $colourred;
my ($ip) = $_[0];
my $found = 0;
foreach $line (@network)
{
if (!$found && ipv4_in_network( $network[$id] , $masklen[$id], $ip) ) {
$found = 1;
$colour = $colour[$id];
}
$id++;
}
return $colour
}