return $etc_services;
}
-my $etc_protocols;
-
-sub get_etc_protocols {
- return $etc_protocols if $etc_protocols;
-
- my $filename = "/etc/protocols";
+sub parse_protocol_file {
+ my ($filename) = @_;
my $fh = IO::File->new($filename, O_RDONLY);
if (!$fh) {
next if $line =~m/^#/;
next if ($line =~m/^\s*$/);
- if ($line =~ m!^(\S+)\s+(\d+)\s+.*$!) {
+ if ($line =~ m!^(\S+)\s+(\d+)(?:\s+.*)?$!) {
$protocols->{byid}->{$2}->{name} = $1;
$protocols->{byname}->{$1} = $protocols->{byid}->{$2};
}
close($fh);
+ return $protocols;
+}
+
+my $etc_protocols;
+
+sub get_etc_protocols {
+ return $etc_protocols if $etc_protocols;
+
+ my $protocols = parse_protocol_file('/etc/protocols');
+
# add special case for ICMP v6
$protocols->{byid}->{icmpv6}->{name} = "icmpv6";
$protocols->{byname}->{icmpv6} = $protocols->{byid}->{icmpv6};