#!/usr/bin/env perl
# Copyright (c) 2016-2024 The Hush developers
# Distributed under the GPLv3 software license, see the accompanying
# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
use strict;
use warnings;

# Given a file of host data, one per line,
# scan them to see if p2p/rpc ports are accessible
# RPCs should not be open to the internet and this is
# an easy way to check many hosts, as well as seeing
# if a full node is down via an inaccessible p2p port.
# Scan a different coin via P2PPORT and RPCPORT.

print "HOST   P2P  RPC\n";
while (<>) {
    chomp;
    my $host = $_;

    # skip empty lines
    next unless $host;

    # skip comment lines
    next if ($host =~ m/^#/);

    my $p2pport = $ENV{P2PPORT} || 18030;
    my $rpcport = $ENV{RPCPORT} || $p2pport + 1;
    my $cmd1  = qq{nc -z -w2 $host $p2pport};
    my $cmd2  = qq{nc -z -w2 $host $rpcport};
    qx{$cmd1};
    my $errcode1 = $?;
    qx{$cmd2};
    my $errcode2 = $?;
    my $status1  = $errcode1 ? "DOWN" : "UP";
    my $status2  = $errcode2 ? "DOWN" : "UP";
    print "$host $status1 $status2\n"
}
