257 lines
No EOL
7.4 KiB
Bash
257 lines
No EOL
7.4 KiB
Bash
#!/bin/bash
|
|
|
|
# Colors for better readability
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Function to print colored text
|
|
print_color() {
|
|
local color=$1
|
|
local text=$2
|
|
echo -e "${color}${text}${NC}"
|
|
}
|
|
|
|
# Function to check if script is run as root
|
|
check_root() {
|
|
if [ "$EUID" -ne 0 ]; then
|
|
print_color $RED "Please run this script as root"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Function to test DNS resolution
|
|
test_dns() {
|
|
print_color $BLUE "\nTesting DNS Resolution..."
|
|
echo "Current DNS servers:"
|
|
cat /etc/resolv.conf | grep nameserver
|
|
|
|
read -p "Enter a domain to test DNS resolution (default: google.com): " test_domain
|
|
test_domain=${test_domain:-google.com}
|
|
|
|
if dig +short "$test_domain" > /dev/null; then
|
|
print_color $GREEN "DNS resolution successful for $test_domain"
|
|
echo "IP Address: $(dig +short "$test_domain")"
|
|
else
|
|
print_color $RED "DNS resolution failed for $test_domain"
|
|
fi
|
|
}
|
|
|
|
# Function to test specific ports
|
|
test_ports() {
|
|
print_color $BLUE "\nPort Testing Menu"
|
|
echo "1. Test specific port"
|
|
echo "2. Test common Proxmox ports (8006, 3128, 111, 5900-5999)"
|
|
echo "3. Back to main menu"
|
|
|
|
read -p "Select an option: " port_choice
|
|
|
|
case $port_choice in
|
|
1)
|
|
read -p "Enter hostname/IP to test: " host
|
|
read -p "Enter port number: " port
|
|
if nc -zv $host $port 2>&1 | grep -q 'succeeded'; then
|
|
print_color $GREEN "Port $port is open on $host"
|
|
else
|
|
print_color $RED "Port $port is closed on $host"
|
|
fi
|
|
;;
|
|
2)
|
|
print_color $YELLOW "Testing common Proxmox ports..."
|
|
local ports=(8006 3128 111 5900 5999)
|
|
for port in "${ports[@]}"; do
|
|
if nc -zv localhost $port 2>&1 | grep -q 'succeeded'; then
|
|
print_color $GREEN "Port $port is open"
|
|
else
|
|
print_color $RED "Port $port is closed"
|
|
fi
|
|
done
|
|
;;
|
|
3)
|
|
return
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Function to check network interfaces
|
|
check_interfaces() {
|
|
print_color $BLUE "\nNetwork Interfaces Information:"
|
|
echo "1. Show all interfaces"
|
|
echo "2. Show specific interface details"
|
|
echo "3. Show bridge information"
|
|
echo "4. Back to main menu"
|
|
|
|
read -p "Select an option: " int_choice
|
|
|
|
case $int_choice in
|
|
1)
|
|
print_color $YELLOW "All Network Interfaces:"
|
|
ip -c a
|
|
;;
|
|
2)
|
|
ip -c link show
|
|
read -p "Enter interface name to inspect: " interface
|
|
if ip link show $interface >/dev/null 2>&1; then
|
|
print_color $YELLOW "Details for interface $interface:"
|
|
ip -c addr show $interface
|
|
ethtool $interface 2>/dev/null || print_color $RED "ethtool not available"
|
|
else
|
|
print_color $RED "Interface $interface not found"
|
|
fi
|
|
;;
|
|
3)
|
|
print_color $YELLOW "Bridge Information:"
|
|
brctl show 2>/dev/null || print_color $RED "brctl not installed. Installing..."
|
|
if ! command -v brctl &> /dev/null; then
|
|
apt-get update && apt-get install -y bridge-utils
|
|
brctl show
|
|
fi
|
|
;;
|
|
4)
|
|
return
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Function to test network connectivity
|
|
test_connectivity() {
|
|
print_color $BLUE "\nNetwork Connectivity Tests:"
|
|
echo "1. Basic ping test"
|
|
echo "2. MTR trace"
|
|
echo "3. Bandwidth test"
|
|
echo "4. Back to main menu"
|
|
|
|
read -p "Select an option: " conn_choice
|
|
|
|
case $conn_choice in
|
|
1)
|
|
read -p "Enter host to ping (default: 8.8.8.8): " ping_host
|
|
ping_host=${ping_host:-8.8.8.8}
|
|
ping -c 4 $ping_host
|
|
;;
|
|
2)
|
|
if ! command -v mtr &> /dev/null; then
|
|
print_color $YELLOW "MTR not found. Installing..."
|
|
apt-get update && apt-get install -y mtr-tiny
|
|
fi
|
|
read -p "Enter host to trace (default: 8.8.8.8): " trace_host
|
|
trace_host=${trace_host:-8.8.8.8}
|
|
mtr -r $trace_host
|
|
;;
|
|
3)
|
|
if ! command -v iperf3 &> /dev/null; then
|
|
print_color $YELLOW "iperf3 not found. Installing..."
|
|
apt-get update && apt-get install -y iperf3
|
|
fi
|
|
print_color $YELLOW "Starting iperf3 server..."
|
|
iperf3 -s &
|
|
sleep 2
|
|
print_color $YELLOW "Testing local bandwidth..."
|
|
iperf3 -c localhost
|
|
killall iperf3
|
|
;;
|
|
4)
|
|
return
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Function to check network card information
|
|
check_network_cards() {
|
|
print_color $BLUE "\nNetwork Card Information:"
|
|
echo "1. Show PCI network devices"
|
|
echo "2. Show detailed network card info"
|
|
echo "3. Show driver information"
|
|
echo "4. Back to main menu"
|
|
|
|
read -p "Select an option: " card_choice
|
|
|
|
case $card_choice in
|
|
1)
|
|
print_color $YELLOW "PCI Network Devices:"
|
|
lspci | grep -i ethernet
|
|
;;
|
|
2)
|
|
print_color $YELLOW "Detailed Network Card Information:"
|
|
if ! command -v lshw &> /dev/null; then
|
|
print_color $YELLOW "lshw not found. Installing..."
|
|
apt-get update && apt-get install -y lshw
|
|
fi
|
|
lshw -class network
|
|
;;
|
|
3)
|
|
print_color $YELLOW "Network Driver Information:"
|
|
for i in $(ls /sys/class/net/); do
|
|
print_color $GREEN "\nDriver info for $i:"
|
|
ethtool -i $i 2>/dev/null || echo "No driver information available"
|
|
done
|
|
;;
|
|
4)
|
|
return
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Function to display firewall status
|
|
check_firewall() {
|
|
print_color $BLUE "\nFirewall Status:"
|
|
echo "1. Show Proxmox firewall status"
|
|
echo "2. Show iptables rules"
|
|
echo "3. Back to main menu"
|
|
|
|
read -p "Select an option: " fw_choice
|
|
|
|
case $fw_choice in
|
|
1)
|
|
print_color $YELLOW "Proxmox Firewall Status:"
|
|
pvesh get /nodes/$(hostname)/firewall/rules
|
|
;;
|
|
2)
|
|
print_color $YELLOW "IPTables Rules:"
|
|
iptables -L -v -n
|
|
;;
|
|
3)
|
|
return
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Main menu function
|
|
main_menu() {
|
|
while true; do
|
|
print_color $BLUE "\nProxmox Network Diagnostic Tool"
|
|
echo "1. Test DNS Resolution"
|
|
echo "2. Test Ports"
|
|
echo "3. Check Network Interfaces"
|
|
echo "4. Test Network Connectivity"
|
|
echo "5. Check Network Cards"
|
|
echo "6. Check Firewall Status"
|
|
echo "7. Exit"
|
|
|
|
read -p "Select an option: " choice
|
|
|
|
case $choice in
|
|
1) test_dns ;;
|
|
2) test_ports ;;
|
|
3) check_interfaces ;;
|
|
4) test_connectivity ;;
|
|
5) check_network_cards ;;
|
|
6) check_firewall ;;
|
|
7)
|
|
print_color $GREEN "Exiting..."
|
|
exit 0
|
|
;;
|
|
*)
|
|
print_color $RED "Invalid option"
|
|
;;
|
|
esac
|
|
|
|
read -p "Press Enter to continue..."
|
|
done
|
|
}
|
|
|
|
# Script entry point
|
|
check_root
|
|
main_menu |