use Exporter qw(import);
-our @EXPORT_OK = qw(GenerateMonitoredFiles FilePositions);
+our @EXPORT_OK = qw(GenerateMonitoredFiles DetectIPProtocolVersion FilePositions);
use Net::IP;
}
#
-## Wrapper function for IP address and network validation.
+## Address/Network to binary format caluculator function.
#
-## This wrapper function uses the external Net::IP perl module to
-## check if a given input is a valid IPv4/IPv6 address or network.
+## This function is used to convert a given single IP address
+## or network into a binary format.
#
-sub IsValidAddressOrNetwork ($) {
+## The used Net::IP module is not able to directly detect
+## single addresses or network ranges. Only an element which may be
+## a single address or a whole network can be assigned, for which a
+## lot of different values can be calculated. In case the input has
+## been a single address, the module will calculate the same binary
+## address (intip) and last address for the network range (last_int)
+## because internally it uses a /32 bit prefix for IPv4 and a /128 prefix
+## on IPv6 addresses.
+#
+## So a single address can be detected by just comparing both calculated
+## addresses if they are equal.
+#
+sub IPOrNet2Int($) {
+ my $address = shift;
+
+ # Assign and validate the given address, or directly return
+ # nothing (False) and exit the function.
+ my $ip = new Net::IP ($address) || return;
+
+ # Convert the given address into integer format.
+ my $first .= $ip->intip();
+
+ # Calculate last address for the given network.
+ my $last .= $ip->last_int();
+
+ # Check whether the first address equals the last address.
+ # If this is true, a single IP address has been passed.
+ if ($first eq $last) {
+ # Return the binary converted single address.
+ return $first;
+ }
+
+ # If both addresses are not equal a network has been passed.
+ #
+ # Check if the converted first address is less than the calculated last
+ # address of the network.
+ elsif ($first < $last) {
+ # Return the binary converted first and last address of
+ # the given network.
+ return $first, $last;
+ }
+
+ # If we got here, something strange happend, return nothing (False).
+ else {
+ return;
+ }
+}
+
+#
+## DetectIPProtocolVersion function.
+#
+## Wrapper function for determining the used protocol version (4/6)
+## for a given IP address.
+#
+sub DetectIPProtocolVersion ($) {
my $address = shift;
- # Check if the address is a valid IPv4/IPv6 address or network.
- # Return "undef" False if the address is not valid.
- my $ip = new Net::IP ($address) || return undef;
+ # Call external perl module to detect the used IP protocol version.
+ my $version = &Net::IP::ip_get_version($address);
- # If we got here, the address is valid. Return True.
- return 1;
+ # Return the detected version.
+ return $version;
}
#