use Socket; sub custom_scan_ping_devices { my @ranges = ( "10.1.1.0/24", ); my @domains = config_load_domains (); my $IN; my $OUT; my $PING_SCAN_OUT = "$HOME_TMP/ping-scan.out"; my %result; open ($OUT, "|-", "$PING_SCAN -o $PING_SCAN_OUT") or EXIT_FATAL ("Can't run $PING_SCAN: $!"); for my $r (@ranges) { printf $OUT "%s\n", $r; } close $OUT; # Block on the close until nm-ping-scan completes open ($IN, "<", $PING_SCAN_OUT) or EXIT_FATAL ("Can't open $PING_SCAN_OUT: $!"); while (my $ipaddr = <$IN>) { chomp $ipaddr; my $name = gethostbyaddr (inet_aton ($ipaddr), AF_INET); if (defined $name) { $name = config_strip_sysname ($name, @domains); } else { $name = $ipaddr; } if ($ipaddr =~ /$REGEX_IPV4_ADDR/m) { $result{$name}{ip4addr} = $ipaddr; $result{$name}{device} = $name; } elsif ($ipaddr =~ /$REGEX_IPV6_ADDR/m) { $result{$name}{ip6addr} = $ipaddr; $result{$name}{device} = $name; } } close $IN; for my $name (keys %result) { config_add_ping_device ($result{$name}); } }