Here is a Bash script to test all inbound cPanel ports:
- 20 FTP
- 21 FTP
- 22 SSH
- 25 SMTP
- 26 SMTP
- 53 DNS
- 80 HTTP
- 110 POP3
- 143 IMAP
- 443 HTTPS
- 465 SMTP
- 587 STARTTLS
- 993 IMAP SSL
- 995 POP3 SSL
- 2077 WebDAV
- 2078 WebDAV SSL
- 2079 CalDAV and CardDAV
- 2080 CalDAV and CardDAV (SSL)
- 2082 cPanel and cPanel Licensing
- 2083 cPanel SSL and cPanel Licensing
- 2086 WHM and cPanel Licensing
- 2087 WHM SSL and cPanel Licensing
- 2095 Webmail
- 2096 Webmail SSL and cPanel Licensing
- 3306 MySQL
#!/bin/bash
# Define ports and their friendly names
declare -A ports=(
[20]="FTP Data"
[21]="FTP"
[22]="SSH"
[25]="SMTP"
[26]="SMTP Alt"
[53]="DNS"
[80]="HTTP"
[110]="POP3"
[143]="IMAP"
[443]="HTTPS"
[465]="SMTP SSL"
[587]="SMTP STARTTLS"
[993]="IMAP SSL"
[995]="POP3 SSL"
[2077]="WebDAV"
[2078]="WebDAV SSL"
[2079]="CalDAV/CardDAV"
[2080]="CalDAV/CardDAV SSL"
[2082]="cPanel"
[2083]="cPanel SSL"
[2086]="WHM"
[2087]="WHM SSL"
[2095]="Webmail"
[2096]="Webmail SSL"
[3306]="MySQL"
)
# Target IP or hostname
TARGET="$1"
if [ -z "$TARGET" ]; then
echo "Usage: $0 <target-hostname-or-IP>"
exit 1
fi
# Build comma-separated port list for nmap
PORT_LIST=$(IFS=, ; echo "${!ports[*]}")
# Run nmap
echo "Scanning $TARGET..."
nmap -Pn -p "$PORT_LIST" "$TARGET" -oG - | while read -r line; do
for port in "${!ports[@]}"; do
if echo "$line" | grep -q "$port/open"; then
echo "✅ ${ports[$port]} (Port $port): OPEN"
elif echo "$line" | grep -q "$port/closed"; then
echo "❌ ${ports[$port]} (Port $port): CLOSED"
elif echo "$line" | grep -q "$port/filtered"; then
echo "⚠️ ${ports[$port]} (Port $port): FILTERED"
fi
done
done