mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
234 lines
6.6 KiB
Perl
234 lines
6.6 KiB
Perl
#!/usr/bin/perl
|
|
#
|
|
###############################################################################
|
|
# #
|
|
# IPFire.org - A linux based firewall #
|
|
# Copyright (C) 2017-2020 Stephan Feddersen <sfeddersen@ipfire.org> #
|
|
# All Rights Reserved. #
|
|
# #
|
|
# This program is free software: you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation, either version 3 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
# This program is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
|
|
# #
|
|
###############################################################################
|
|
#
|
|
# Version: 2020/05/25 19:39:23
|
|
#
|
|
# This wio-lib.pl is based on the code from the IPCop WIO Addon
|
|
# and is extremly adapted to work with IPFire.
|
|
#
|
|
# Autor: Stephan Feddersen
|
|
# Co-Autor: Alexander Marx
|
|
# Co-Autor: Frank Mainz (for some code for the IPCop WIO Addon)
|
|
#
|
|
|
|
package WIO;
|
|
|
|
# enable only the following on debugging purpose
|
|
#use warnings;
|
|
|
|
use strict;
|
|
use Socket;
|
|
use Time::Local;
|
|
use MIME::Lite;
|
|
|
|
require '/var/ipfire/general-functions.pl';
|
|
require '/var/ipfire/header.pl';
|
|
require '/var/ipfire/lang.pl';
|
|
|
|
my %mailsettings = ();
|
|
|
|
&General::readhash('/var/ipfire/dma/mail.conf', \%mailsettings);
|
|
|
|
############################################################################################################################
|
|
|
|
sub getdyndnsip {
|
|
my $ipadr = $_[0];
|
|
my $host = $_[1];
|
|
my @fetchip = ();
|
|
|
|
if ( -e "/var/ipfire/red/active" ) {
|
|
@fetchip = gethostbyname($host);
|
|
|
|
if ( defined($fetchip[0]) ) {
|
|
@fetchip = map ( &Socket::inet_ntoa($_), @fetchip[4..$#fetchip]);
|
|
return ($fetchip[0], $Lang::tr{'wio_dyndns_success'});
|
|
}
|
|
}
|
|
else {
|
|
return ($ipadr, $Lang::tr{'wio_dyndns_info'});
|
|
}
|
|
}
|
|
|
|
############################################################################################################################
|
|
|
|
sub contime {
|
|
chomp(my $str = $_[0]);
|
|
chomp(my $vpn = $_[1]);
|
|
|
|
my %m = ();
|
|
@m{qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/} = (0 .. 11);
|
|
|
|
my $totalsecs = '';
|
|
|
|
if ( $vpn eq 'ipsec' ) {
|
|
my @temp = split (/ /, $str);
|
|
|
|
if ( $temp[1] eq 'seconds' ) {
|
|
$totalsecs = $temp[0];
|
|
}
|
|
|
|
if ( $temp[1] eq 'minutes' ) {
|
|
$totalsecs = $temp[0] * 60;
|
|
}
|
|
|
|
if ( $temp[1] eq 'hours' ) {
|
|
$totalsecs = $temp[0] * 3600;
|
|
}
|
|
|
|
if ( $temp[1] eq 'days' ) {
|
|
$totalsecs = $temp[0] * 86400;
|
|
}
|
|
}
|
|
|
|
if ( $vpn eq 'ovpn' ) {
|
|
if ( $str =~ /^\w{3}\ ([a-zA-Z]+)\ (\d{1,2})\ (\d{2})\:(\d{2})\:(\d{2}) (\d{4})$/ ||
|
|
$str =~ /^\w{3}\ ([a-zA-Z]+)\ (\d{1})\ (\d{2})\:(\d{2})\:(\d{2}) (\d{4})$/ )
|
|
{
|
|
my $past = timelocal($5, $4, $3, $2, $m{$1}, $6);
|
|
my $now = time;
|
|
$totalsecs = $now - $past;
|
|
}
|
|
}
|
|
|
|
if ( $totalsecs ne '' ) {
|
|
my $days = int($totalsecs / 86400);
|
|
my $totalhours = int($totalsecs / 3600);
|
|
my $hours = $totalhours % 24;
|
|
my $totalmins = int($totalsecs / 60);
|
|
my $mins = $totalmins % 60;
|
|
my $secs = $totalsecs % 60;
|
|
|
|
return "${days}d ${hours}h ${mins}m ${secs}s";
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
|
|
############################################################################################################################
|
|
|
|
sub statustime {
|
|
my $str = $_[0];
|
|
my ( $day, $mon ) = '';
|
|
|
|
my %m = qw ( Jan 01 Feb 02 Mar 03 Apr 04 May 05 Jun 06 Jul 07 Aug 08 Sep 09 Oct 10 Nov 11 Dec 12 );
|
|
|
|
if ( $str =~ /^\w{3}\ ([a-zA-Z]+)\ (\d{1,2})\ (\d{2})\:(\d{2})\:(\d{2}) (\d{4})$/ ||
|
|
$str =~ /^\w{3}\ ([a-zA-Z]+)\ (\d{1})\ (\d{2})\:(\d{2})\:(\d{2}) (\d{4})$/ )
|
|
{
|
|
$mon = $m{$1};
|
|
|
|
if (length $2 < 2) { $day = "0$2"; }
|
|
else { $day = $2; }
|
|
|
|
return "$day.$mon.$6 - $3:$4:$5";
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
|
|
############################################################################################################################
|
|
|
|
sub mailsender {
|
|
my $msg = '';
|
|
|
|
$msg = MIME::Lite->new(
|
|
From => $mailsettings{'SENDER'},
|
|
To => $mailsettings{'RECIPIENT'},
|
|
Subject => $_[0],
|
|
Type => 'multipart/alternative'
|
|
);
|
|
|
|
$msg->attach(
|
|
Type => 'TEXT',
|
|
Data => $_[1]
|
|
);
|
|
|
|
$msg->send_by_sendmail;
|
|
}
|
|
|
|
############################################################################################################################
|
|
|
|
sub checkinto {
|
|
my ($checkip, $checkhost, @checkfile) = @_;
|
|
|
|
if ( $checkip ne '' ) {
|
|
foreach (@checkfile) {
|
|
chomp;
|
|
if ( (split (/\,/, $_))[2] eq $checkip ) { return $Lang::tr{'wio_ip_exists'}; last; }
|
|
}
|
|
}
|
|
|
|
if ( $checkhost ne '' ) {
|
|
foreach (@checkfile) {
|
|
chomp;
|
|
if ( (split (/\,/, $_))[3] eq $checkhost ) {
|
|
if ( $checkip ne '' ) {
|
|
my $fileip = (split (/\,/, $_))[2];
|
|
|
|
$fileip =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
|
|
|
|
my $fileip1 = $1;
|
|
my $fileip2 = $2;
|
|
my $fileip3 = $3;
|
|
my $fileip4 = $4;
|
|
|
|
$checkip =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
|
|
|
|
if ( $fileip1 == $1 && $fileip2 == $2 && $fileip3 == $3 ) {
|
|
return $Lang::tr{'wio_host_exists'}; last; }
|
|
}
|
|
else { return $Lang::tr{'wio_host_exists'}; last; }
|
|
}
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
############################################################################################################################
|
|
|
|
sub clearfile {
|
|
my $file = $_[0];
|
|
|
|
open(FILE, "> $file");
|
|
close(FILE);
|
|
}
|
|
|
|
############################################################################################################################
|
|
|
|
sub color_devices() {
|
|
my $output = shift;
|
|
|
|
if ( uc($output) eq "GREEN0" ) { $output = "<b><font color ='$Header::colourgreen'>$output</b>";}
|
|
elsif ( uc($output) eq "BLUE0" ) { $output = "<b><font color ='$Header::colourblue'>$output</b>"; }
|
|
elsif ( uc($output) eq "ORANGE0" ) { $output = "<b><font color ='$Header::colourorange'>$output</b>"; }
|
|
elsif ( uc($output) eq "RED0" ) { $output = "<b><font color ='$Header::colourred'>$output</b>"; }
|
|
else { return $output = "<b><font color ='#696565'>$output</b>"; }
|
|
|
|
return $output;
|
|
}
|
|
|
|
return 1;
|