]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - html/cgi-bin/connections.cgi
Merge remote-tracking branch 'origin/next'
[ipfire-2.x.git] / html / cgi-bin / connections.cgi
index 5c17d33e276a51c4a90bda383e2c616af012c818..e9e9e335cfe4356b8509b5a79b1f482562e51e6c 100644 (file)
@@ -31,6 +31,7 @@ use Switch;
 require '/var/ipfire/general-functions.pl';
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
+require "${General::swroot}/geoip-functions.pl";
 
 my $colour_multicast = "#A0A0A0";
 
@@ -261,15 +262,19 @@ close(IPSEC);
 
 foreach my $line (@ipsec) {
        my @vpn = split(',', $line);
-       my ($network, $mask) = split("/", $vpn[12]);
 
-       if (!&General::validip($mask)) {
-               $mask = ipv4_cidr2msk($mask);
-       }
+       my @subnets = split(/\|/, $vpn[12]);
+       for my $subnet (@subnets) {
+               my ($network, $mask) = split("/", $subnet);
+
+               if (!&General::validip($mask)) {
+                       $mask = ipv4_cidr2msk($mask);
+               }
 
-       push(@network, $network);
-       push(@masklen, $mask);
-       push(@colour, ${Header::colourvpn});
+               push(@network, $network);
+               push(@masklen, $mask);
+               push(@colour, ${Header::colourvpn});
+       }
 }
 
 if (-e "${General::swroot}/ovpn/n2nconf") {
@@ -375,6 +380,7 @@ print <<END;
                                <a href="?sort_field=3&amp;sort_order=d"><img style="width:10px" src="/images/up.gif" alt=""></a>
                                <a href="?sort_field=3&amp;sort_order=a"><img style="width:10px" src="/images/down.gif" alt=""></a>
                        </th>
+                       <th>&nbsp;</th>
                        <th style='text-align:center' colspan='2'>
                                <a href="?sort_field=2&amp;sort_order=d"><img style="width:10px" src="/images/up.gif" alt=""></a>
                                <a href="?sort_field=2&amp;sort_order=a"><img style="width:10px" src="/images/down.gif" alt=""></a>
@@ -382,6 +388,7 @@ print <<END;
                                <a href="?sort_field=4&amp;sort_order=d"><img style="width:10px" src="/images/up.gif" alt=""></a>
                                <a href="?sort_field=4&amp;sort_order=a"><img style="width:10px" src="/images/down.gif" alt=""></a>
                        </th>
+                       <th>&nbsp;</th>
                        <th style='text-align:center'>
                                <a href="?sort_field=8&amp;sort_order=d"><img style="width:10px" src="/images/up.gif" alt=""></a>
                                <a href="?sort_field=8&amp;sort_order=a"><img style="width:10px" src="/images/down.gif" alt=""></a>
@@ -405,9 +412,15 @@ print <<END;
                        <th style='text-align:center' colspan='2'>
                                $Lang::tr{'source ip and port'}
                        </th>
+                       <th style='text-align:center'>
+                               $Lang::tr{'country'}
+                       </th>
                        <th style='text-align:center' colspan='2'>
                                $Lang::tr{'dest ip and port'}
                        </th>
+                       <th style='text-align:center'>
+                               $Lang::tr{'country'}
+                       </th>
                        <th style='text-align:center'>
                                $Lang::tr{'download'} /
                                <br>$Lang::tr{'upload'}
@@ -536,11 +549,17 @@ foreach my $line (@conntrack) {
        my $bytes_in = format_bytes($bytes[0]);
        my $bytes_out = format_bytes($bytes[1]);
 
+       # enumerate GeoIP information
+       my $srcccode = &GeoIP::lookup($sip_ret);
+       my $src_flag_icon = &GeoIP::get_flag_icon($srcccode);
+       my $dstccode = &GeoIP::lookup($dip_ret);
+       my $dst_flag_icon = &GeoIP::get_flag_icon($dstccode);
+
        # Format TTL
        $ttl = format_time($ttl);
 
        my $sip_extra;
-       if ($sip ne $sip_ret) {
+       if ($sip_ret && $sip ne $sip_ret) {
                $sip_extra = "<span style='color:#FFFFFF;'>&gt;</span> ";
                $sip_extra .= "<a href='/cgi-bin/ipinfo.cgi?ip=$sip_ret'>";
                $sip_extra .= " <span style='color:#FFFFFF;'>$sip_ret</span>";
@@ -548,7 +567,7 @@ foreach my $line (@conntrack) {
        }
 
        my $dip_extra;
-       if ($dip ne $dip_ret) {
+       if ($dip_ret && $dip ne $dip_ret) {
                $dip_extra = "<span style='color:#FFFFFF;'>&gt;</span> ";
                $dip_extra .= "<a href='/cgi-bin/ipinfo.cgi?ip=$dip_ret'>";
                $dip_extra .= " <span style='color:#FFFFFF;'>$dip_ret</span>";
@@ -597,6 +616,9 @@ foreach my $line (@conntrack) {
                        </a>
                        $sport_extra
                </td>
+               <td style='text-align:center; background-color:$sip_colour;'>
+                       <a href='country.cgi#$srcccode'><img src='$src_flag_icon' border='0' align='absmiddle' alt='$srcccode' title='$srcccode' /></a>
+               </td>
                <td style='text-align:center; background-color:$dip_colour;'>
                        <a href='/cgi-bin/ipinfo.cgi?ip=$dip'>
                                <span style='color:#FFFFFF;'>$dip</span>
@@ -609,6 +631,9 @@ foreach my $line (@conntrack) {
                        </a>
                        $dport_extra
                </td>
+               <td style='text-align:center; background-color:$sip_colour;'>
+                       <a href='country.cgi#$dstccode'><img src='$dst_flag_icon' border='0' align='absmiddle' alt='$dstccode' title='$dstccode' /></a>
+               </td>
                <td style='text-align:center'>
                        $bytes_in / $bytes_out
                </td>
@@ -661,15 +686,17 @@ sub ipcolour($) {
        my ($ip) = $_[0];
        my $found = 0;
 
-       foreach my $line (@network) {
-               if ($network[$id] eq '') {
-                       $id++;
-               } else {
-                       if (!$found && ipv4_in_network($network[$id], $masklen[$id], $ip) ) {
-                               $found = 1;
-                               $colour = $colour[$id];
+       if ($ip) {
+               foreach my $line (@network) {
+                       if ($network[$id] eq '') {
+                               $id++;
+                       } else {
+                               if (!$found && ipv4_in_network($network[$id], $masklen[$id], $ip) ) {
+                                       $found = 1;
+                                       $colour = $colour[$id];
+                               }
+                               $id++;
                        }
-                       $id++;
                }
        }