use Socket;
use IO::Socket;
use Net::SSLeay;
-use Net::IPv4Addr;
-
+use Net::IPv4Addr qw(:all);
$|=1; # line buffering
-$General::version = 'VERSION';
-$General::swroot = 'CONFIG_ROOT';
+$General::version = '2.11';
+$General::swroot = '/var/ipfire';
$General::noipprefix = 'noipg-';
$General::adminmanualurl = 'http://wiki.ipfire.org';
return 0; }
return &validmask($mask);
}
+################
+#A.Marx CCD Func----------------------------------------------------------------
+################
+sub subtocidr
+{
+ #Erwartet: Subnetzmaske in dezimal (255.255.255.0)
+ #Gibt aus: 24 (Die cidr Zahl des Netzwerks)
+ my ($byte1, $byte2, $byte3, $byte4) = split(/\./, $_[0].".0.0.0.0");
+ my $num = ($byte1 * 16777216) + ($byte2 * 65536) + ($byte3 * 256) + $byte4;
+ my $bin = unpack("B*", pack("N", $num));
+ my $count = ($bin =~ tr/1/1/);
+ return $count;
+}
+sub cidrtosub
+{
+ #Erwartet: Cidr Zahl des Netzes (20-30 bei ccd)
+ #Konvertiert 30 zu 255.255.255.252 z.b
+ my $cidr=$_[0];
+ my $netmask = &Net::IPv4Addr::ipv4_cidr2msk($cidr);
+ return "$netmask";
+}
+
+sub iporsubtodec
+{
+ #Erwartet: Ip-Adresse oder Subnetzmaske in dezimal oder binär
+ #Gibt aus: Das was reingeworfen wurde nur als CIDR Format
+ my $subnet=$_[0];
+ my $net;
+ my $mask;
+ my $full=0;
+ if ($subnet =~ /^(.*?)\/(.*?)$/) {
+ ($net,$mask) = split (/\//,$subnet);
+ $full=1;
+ }else{
+ $mask=$subnet;
+ }
+ #Subnet already in decimal and valid?
+ if ($mask=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&(($1<=255 && $2<=$1 && $3<=$2 && $4<=$3 ))) {
+ for (my $i=8;$i<=30;$i++){
+ if (&General::cidrtosub($i) eq $mask){
+ if ($full=0){return $mask;}else{
+ return $net."/".$mask;
+ }
+ }
+ }
+ }
+ #Subnet in binary format?
+ if ($mask=~/^(\d{1,2})$/ && (($1<=30 && $1>=8))){
+ if($full=0){ return &General::cidrtosub($mask);}else{
+ return $net."/".&General::cidrtosub($mask);
+ }
+ }else{
+ return 3;
+ }
+ return 3;
+}
+
+
+sub iporsubtocidr
+{
+ #Erwartet: Ip-Adresse oder Subnetzmaske in dezimal oder binär
+ #Gibt aus: Das was reingeworfen wurde nur als CIDR Format
+ my $subnet=$_[0];
+ my $net;
+ my $mask;
+ my $full=0;
+ if ($subnet =~ /^(.*?)\/(.*?)$/) {
+ ($net,$mask) = split (/\//,$subnet);
+ $full=1;
+ }else{
+ $mask=$subnet;
+ }
+ #Subnet in decimal and valid?
+ if ($mask=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&(($1<=255 && $2<=$1 && $3<=$2 && $4<=$3 ))) {
+ for (my $i=8;$i<=30;$i++){
+ if (&General::cidrtosub($i) eq $mask){
+ if ($full=0){return &General::subtocidr($mask);}else{
+ return $net."/".&General::subtocidr($mask);
+ }
+ }
+ }
+ }
+ #Subnet already in binary format?
+ if ($mask=~/^(\d{1,2})$/ && (($1<=30 && $1>=8))){
+ if($full=0){ return $mask;}else{
+ return $net."/".$mask;
+ }
+ }else{
+ return 3;
+ }
+ return 3;
+}
+
+sub getnetworkip
+{
+ #Erwartet: IP, CIDR (10.10.10.0-255, 24)
+ #Gibt aus: 10.10.10.0
+ my ($ccdip,$ccdsubnet) = @_;
+ my $ip_address_binary = inet_aton( $ccdip );
+ my $netmask_binary = ~pack("N", (2**(32-$ccdsubnet))-1);
+ my $network_address = inet_ntoa( $ip_address_binary & $netmask_binary );
+ return $network_address;
+}
+
+sub getccdbc
+{
+ #Erwartet: IP in Form ("192.168.0.0/24")
+ #Gibt aus: Broadcastadresse des Netzes
+ my $ccdnet=$_;
+ my ($ccdip,$ccdsubnet) = split "/",$ccdnet;
+ my $ip_address_binary = inet_aton( $ccdip );
+ my $netmask_binary = ~pack("N", (2**(32-$ccdsubnet))-1);
+ my $broadcast_address = inet_ntoa( $ip_address_binary | ~$netmask_binary );
+ return $broadcast_address;
+}
+sub getnextip
+{
+ my ($a,$b,$c,$d) = split (/\./,$_[0]);
+ my $step=$_[1];
+ for (my $x=1;$x<=$step;$x++){
+ $d++;
+ if($d==255){ $d=0;$c++;}
+ if($c==255){$c=0;$b++;}
+ if ($b==255){$b=0;$a++}
+
+ }
+ return "$a.$b.$c.$d";
+}
+sub getlastip
+{
+ my ($a,$b,$c,$d) = split (/\./,$_[0]);
+ my $step=$_[1];
+ for (my $x=$step;$x>=1;$x--){
+ $d--;
+ if($d==0){ $d=255;$c--;}
+ if($c==0){$c=255;$b--;}
+ if ($b==0){$b=255;$a--}
+ }
+ return "$a.$b.$c.$d";
+}
+
+sub validip2
+{
+ #Erwartet: Ip-Adresse als 192.168.0.0/24 oder 192.168.0.0/255.255.255.0 und prüft, ob subnetz gültig ist
+ #Gibt aus: True bzw 0 wenn erfolgreich oder false bzw 1
+ my $ccdnet=$_[0];
+ my $subcidr;
+
+ if (!($ccdnet =~ /^(.*?)\/(.*?)$/)) {
+ return 0;
+ }
+ my ($ccdip,$ccdsubnet)=split (/\//, $ccdnet);
+ #IP valid?
+ if ($ccdip=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&(($1>0 && $1<=255 && $2>=0 && $2<=255 && $3>=0 && $3<=255 && $4<=255 ))) {
+ #Subnet in decimal and valid?
+ if ($ccdsubnet=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&(($1<=255 && $2<=$1 && $3<=$2 && $4<=$3 ))) {
+ for (my $i=8;$i<=30;$i++){
+ if (&General::cidrtosub($i) eq $ccdsubnet){
+ return 1;
+ }
+ }
+ #Subnet already in binary format?
+ }elsif ($ccdsubnet=~/^(\d{1,2})$/ && (($1<=30 && $1>=8))){
+ return 1;
+ }else{
+ return 0;
+ }
+
+ }
+ return 0;
+}
+
+
+
+###########
+#CCD END------------------------------------------------------------------------
+###########
sub validipandmask
{
my $ipandmask = $_[0];
)
);
}
-
+sub NextIP2
+{
+ return &Socket::inet_ntoa( pack("N", 4 + unpack('N', &Socket::inet_aton(shift))
+ )
+ );
+}
sub ipcidr
{
my ($ip,$cidr) = &Net::IPv4Addr::ipv4_parse(shift);
open(FILE, ">$filename") or die "Unable to write to file $filename";
foreach $key (keys %$hash) {
- if ($key =~ /^[0-9]+$/) {
- print FILE "$key";
- foreach $i (0 .. $#{$hash->{$key}}) {
- print FILE ",$hash->{$key}[$i]";
- }
- print FILE "\n";
- }
+ if ($key =~ /^[0-9]+$/) {
+ print FILE "$key";
+ foreach $i (0 .. $#{$hash->{$key}}) {
+ print FILE ",$hash->{$key}[$i]";
+ }
+ print FILE "\n";
+ }
}
close FILE;
return;