mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-02-27 20:53:01 +00:00
Merge 91aad724c2 into 159b85f979
This commit is contained in:
commit
b621dd94d0
7 changed files with 361 additions and 124 deletions
35
.vscode/launch.json
vendored
35
.vscode/launch.json
vendored
|
|
@ -1,35 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "vscode://schemas/launch",
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "Run 3x-ui (Debug)",
|
|
||||||
"type": "go",
|
|
||||||
"request": "launch",
|
|
||||||
"mode": "auto",
|
|
||||||
"program": "${workspaceFolder}",
|
|
||||||
"cwd": "${workspaceFolder}",
|
|
||||||
"env": {
|
|
||||||
"XUI_DEBUG": "true"
|
|
||||||
},
|
|
||||||
"console": "integratedTerminal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Run 3x-ui (Debug, custom env)",
|
|
||||||
"type": "go",
|
|
||||||
"request": "launch",
|
|
||||||
"mode": "auto",
|
|
||||||
"program": "${workspaceFolder}",
|
|
||||||
"cwd": "${workspaceFolder}",
|
|
||||||
"env": {
|
|
||||||
// Set to true to serve assets/templates directly from disk for development
|
|
||||||
"XUI_DEBUG": "true",
|
|
||||||
// Uncomment to override DB folder location (by default uses working dir on Windows when debug)
|
|
||||||
// "XUI_DB_FOLDER": "${workspaceFolder}",
|
|
||||||
// Example: override log level (debug|info|notice|warn|error)
|
|
||||||
// "XUI_LOG_LEVEL": "debug"
|
|
||||||
},
|
|
||||||
"console": "integratedTerminal"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
75
.vscode/tasks.json
vendored
75
.vscode/tasks.json
vendored
|
|
@ -1,75 +0,0 @@
|
||||||
{
|
|
||||||
"version": "2.0.0",
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"label": "go: build",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "go",
|
|
||||||
"args": [
|
|
||||||
"build",
|
|
||||||
"-o",
|
|
||||||
"bin/3x-ui.exe",
|
|
||||||
"./main.go"
|
|
||||||
],
|
|
||||||
"options": {
|
|
||||||
"cwd": "${workspaceFolder}"
|
|
||||||
},
|
|
||||||
"problemMatcher": [
|
|
||||||
"$go"
|
|
||||||
],
|
|
||||||
"group": {
|
|
||||||
"kind": "build",
|
|
||||||
"isDefault": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "go: run",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "go",
|
|
||||||
"args": [
|
|
||||||
"run",
|
|
||||||
"./main.go"
|
|
||||||
],
|
|
||||||
"options": {
|
|
||||||
"cwd": "${workspaceFolder}",
|
|
||||||
"env": {
|
|
||||||
"XUI_DEBUG": "true"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"problemMatcher": [
|
|
||||||
"$go"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "go: test",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "go",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"./..."
|
|
||||||
],
|
|
||||||
"options": {
|
|
||||||
"cwd": "${workspaceFolder}"
|
|
||||||
},
|
|
||||||
"problemMatcher": [
|
|
||||||
"$go"
|
|
||||||
],
|
|
||||||
"group": "test"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "go: vet",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "go",
|
|
||||||
"args": [
|
|
||||||
"vet",
|
|
||||||
"./..."
|
|
||||||
],
|
|
||||||
"options": {
|
|
||||||
"cwd": "${workspaceFolder}"
|
|
||||||
},
|
|
||||||
"problemMatcher": [
|
|
||||||
"$go"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
35
SpaceSaver/index.html
Normal file
35
SpaceSaver/index.html
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
<title>SpaceSaver</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<b>SpaceSaver (Безопасное хранилище)</b>
|
||||||
|
<div>
|
||||||
|
<form id="loginForm">
|
||||||
|
<div class="input-group">
|
||||||
|
<svg class="icon" viewBox="64 64 896 896" fill="currentColor">
|
||||||
|
<path d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"/>
|
||||||
|
</svg>
|
||||||
|
<input placeholder="Username" type="text" name="username" autocomplete="username" autofocus required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="input-group">
|
||||||
|
<svg class="icon" viewBox="64 64 896 896" fill="currentColor">
|
||||||
|
<path d="M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM332 240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224H332V240zm460 600H232V536h560v304zM484 701v53c0 4.4 3.6 8 8 8h40c4.4 0 8-3.6 8-8v-53a48.01 48.01 0 1 0-56 0z"/>
|
||||||
|
</svg>
|
||||||
|
<input placeholder="Password" type="password" name="password" autocomplete="current-password" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit">Enter</button>
|
||||||
|
|
||||||
|
<div class="error-message" id="errorMsg">Неверный пароль или имя пользователя</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
6
SpaceSaver/script.js
Normal file
6
SpaceSaver/script.js
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
document.getElementById('loginForm').addEventListener('submit', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
document.getElementById('errorMsg').style.display = 'block';
|
||||||
|
document.querySelector('input[name="username"]').value = '';
|
||||||
|
document.querySelector('input[name="password"]').value = '';
|
||||||
|
});
|
||||||
64
SpaceSaver/style.css
Normal file
64
SpaceSaver/style.css
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
body {
|
||||||
|
min-height: 100vh;
|
||||||
|
background: #0a0e14;
|
||||||
|
color: #e0e7ff;
|
||||||
|
font-family: system-ui, sans-serif;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-message {
|
||||||
|
color: #f85149;
|
||||||
|
font-size: 0.95rem;
|
||||||
|
margin-top: 1rem;
|
||||||
|
min-height: 1.2rem;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group {
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
position: absolute;
|
||||||
|
left: 1rem;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
color: #8b949e;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
width: 100%;
|
||||||
|
height: 44px;
|
||||||
|
padding: 0 1rem 0 2.8rem;
|
||||||
|
background: #0d1117;
|
||||||
|
border: 1px solid #30363d;
|
||||||
|
border-radius: 6px;
|
||||||
|
color: #e6edf3;
|
||||||
|
font-size: 1rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 100%;
|
||||||
|
padding: 0.95rem;
|
||||||
|
background: #238636;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-size: 1.05rem;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-top: 0.8rem;
|
||||||
|
}
|
||||||
|
|
@ -580,7 +580,7 @@ prompt_and_setup_ssl() {
|
||||||
|
|
||||||
# 3.1 Request Domain to compose Panel URL later
|
# 3.1 Request Domain to compose Panel URL later
|
||||||
read -rp "Please enter domain name certificate issued for: " custom_domain
|
read -rp "Please enter domain name certificate issued for: " custom_domain
|
||||||
custom_domain="${custom_domain// /}" # Убираем пробелы
|
custom_domain="${custom_domain// /}" # Delete spaces
|
||||||
|
|
||||||
# 3.2 Loop for Certificate Path
|
# 3.2 Loop for Certificate Path
|
||||||
while true; do
|
while true; do
|
||||||
|
|
|
||||||
268
x-ui.sh
268
x-ui.sh
|
|
@ -1671,7 +1671,237 @@ run_speedtest() {
|
||||||
speedtest
|
speedtest
|
||||||
}
|
}
|
||||||
|
|
||||||
|
run_librespeed() {
|
||||||
|
|
||||||
|
if command -v librespeed-cli &>/dev/null; then
|
||||||
|
librespeed-cli
|
||||||
|
else
|
||||||
|
#Intalling LibreSpeed
|
||||||
|
echo -e "${yellow} Installing LibreSpeed..."
|
||||||
|
VERSION=$(curl -s "https://api.github.com/repos/librespeed/speedtest-cli/releases/latest"| grep '"tag_name":' | sed -E 's/.*"v?([^"]+)".*/\1/')
|
||||||
|
wget https://github.com/librespeed/speedtest-cli/releases/download/v${VERSION}/librespeed-cli_${VERSION}_linux_amd64.tar.gz
|
||||||
|
tar -xzvf librespeed-cli_${VERSION}_linux_amd64.tar.gz && mv librespeed-cli /usr/bin
|
||||||
|
librespeed-cli
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
create_honeypot() {
|
||||||
|
local server_ip=$(curl -s --max-time 3 https://4.ident.me)
|
||||||
|
|
||||||
|
echo -e "${plain}Do you want to use: ${green}Apache ${plain}or ${green}Nginx"
|
||||||
|
|
||||||
|
read -p "Apache or Nginx: " nginx_or_apache
|
||||||
|
|
||||||
|
echo -e "${yellow}Downloading sources and Utilites..."
|
||||||
|
|
||||||
|
if [ "$nginx_or_apache" = "Apache" ]; then
|
||||||
|
case "${release}" in
|
||||||
|
ubuntu)
|
||||||
|
apt-get update
|
||||||
|
apt-get install apache2 -y
|
||||||
|
;;
|
||||||
|
debian)
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y apache2
|
||||||
|
;;
|
||||||
|
armbian)
|
||||||
|
apt-get update && apt-get install apache2 -y
|
||||||
|
;;
|
||||||
|
fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
|
||||||
|
dnf -y update && dnf -y install httpd
|
||||||
|
;;
|
||||||
|
centos)
|
||||||
|
yum -y install apache2
|
||||||
|
;;
|
||||||
|
arch | manjaro | parch)
|
||||||
|
pacman -Syu --noconfirm apache
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "${red}Unsupported operating system. Please check the script and install the necessary packages manually.${plain}\n"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Start apache server for HoneyPot
|
||||||
|
case "${release}" in
|
||||||
|
ubuntu)
|
||||||
|
systemctl enable apache2
|
||||||
|
systemctl start apache2
|
||||||
|
;;
|
||||||
|
debian)
|
||||||
|
systemctl enable apache2
|
||||||
|
systemctl start apache2
|
||||||
|
;;
|
||||||
|
armbian)
|
||||||
|
systemctl enable apache2
|
||||||
|
systemctl start apache2
|
||||||
|
;;
|
||||||
|
fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
|
||||||
|
systemctl enable httpd
|
||||||
|
systemctl start httpd
|
||||||
|
;;
|
||||||
|
centos)
|
||||||
|
systemctl enable httpd
|
||||||
|
systemctl start httpd
|
||||||
|
;;
|
||||||
|
arch | manjaro | parch)
|
||||||
|
systemctl enable apache
|
||||||
|
systemctl start apache
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "${red}Cannot start apache service.${plain}\n"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
echo -e "${yellow}Installing HoneyPot..."
|
||||||
|
mv SpaceSaver/ /var/www/html/
|
||||||
|
|
||||||
|
# Config for apache2
|
||||||
|
echo """
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName SpaceSaver
|
||||||
|
DocumentRoot /var/www/html/SpaceSaver
|
||||||
|
|
||||||
|
<Directory /var/www/html/SpaceSaver>
|
||||||
|
Options Indexes FollowSymLinks
|
||||||
|
AllowOverride All
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||||||
|
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
||||||
|
</VirtualHost>""" >> /etc/apache2/sites-available/spacesaver.conf
|
||||||
|
|
||||||
|
ln -sf /etc/apache2/sites-available/spacesaver.conf /etc/apache2/sites-enabled/
|
||||||
|
|
||||||
|
# Restarting apache server
|
||||||
|
case "${release}" in
|
||||||
|
ubuntu)
|
||||||
|
systemctl reload apache2
|
||||||
|
;;
|
||||||
|
debian)
|
||||||
|
systemctl reload apache2
|
||||||
|
;;
|
||||||
|
armbian)
|
||||||
|
systemctl reload apache2
|
||||||
|
;;
|
||||||
|
fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
|
||||||
|
systemctl reload httpd
|
||||||
|
;;
|
||||||
|
centos)
|
||||||
|
systemctl reload httpd
|
||||||
|
;;
|
||||||
|
arch | manjaro | parch)
|
||||||
|
systemctl reload httpd
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "${red}Cannot reload apache service.${plain}\n"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Access rights to HoneyPot's files
|
||||||
|
chown -R www-data:www-data /var/www/html/SpaceSaver
|
||||||
|
chmod -R 755 /var/www/html/SpaceSaver
|
||||||
|
chmod 644 /var/www/html/SpaceSaver/index.html
|
||||||
|
|
||||||
|
echo -e "${plain}Done!"
|
||||||
|
echo -e "${green}Available here -> http://$server_ip:80"
|
||||||
|
|
||||||
|
elif [ "$nginx_or_apache" = "Nginx" ]; then
|
||||||
|
case "${release}" in
|
||||||
|
ubuntu)
|
||||||
|
apt-get update
|
||||||
|
apt-get install nginx -y
|
||||||
|
;;
|
||||||
|
debian)
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y nginx
|
||||||
|
;;
|
||||||
|
armbian)
|
||||||
|
apt-get update && apt-get install nginx -y
|
||||||
|
;;
|
||||||
|
fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
|
||||||
|
dnf -y update && dnf -y install nginx
|
||||||
|
;;
|
||||||
|
centos)
|
||||||
|
yum -y install nginx
|
||||||
|
;;
|
||||||
|
arch | manjaro | parch)
|
||||||
|
pacman -Syu --noconfirm nginx
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "${red}Unsupported operating system. Please check the script and install the necessary packages manually.${plain}\n"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Start nginx server for HoneyPot
|
||||||
|
systemctl enable nginx
|
||||||
|
systemctl start nginx
|
||||||
|
|
||||||
|
#Downloading HoneyPot's files
|
||||||
|
git clone https://github.com/d3l1f3r/SpaceSaver.git
|
||||||
|
mv SpaceSaver/ /var/www/html/
|
||||||
|
|
||||||
|
# Config for nginx
|
||||||
|
tee /etc/nginx/sites-available/spacesaver.conf >/dev/null << 'EOF'
|
||||||
|
server {
|
||||||
|
listen 80 default_server; # ← важно для локального доступа
|
||||||
|
server_name 127.0.0.1 localhost SpaceSaver _;
|
||||||
|
|
||||||
|
root /var/www/html/SpaceSaver;
|
||||||
|
index index.html;
|
||||||
|
|
||||||
|
# Security Headers
|
||||||
|
add_header X-Content-Type-Options nosniff always;
|
||||||
|
add_header X-Frame-Options SAMEORIGIN always;
|
||||||
|
add_header X-XSS-Protection "1; mode=block" always;
|
||||||
|
add_header Referrer-Policy strict-origin-when-cross-origin always;
|
||||||
|
add_header Permissions-Policy "interest-cohort=()" always;
|
||||||
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
||||||
|
|
||||||
|
server_tokens off;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\. {
|
||||||
|
deny all;
|
||||||
|
access_log off;
|
||||||
|
log_not_found off;
|
||||||
|
}
|
||||||
|
|
||||||
|
access_log /var/log/nginx/spacesaver.access.log;
|
||||||
|
error_log /var/log/nginx/spacesaver.error.log;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
rm -f /etc/nginx/sites-enabled/default
|
||||||
|
ln -sf /etc/nginx/sites-available/spacesaver.conf /etc/nginx/sites-enabled/
|
||||||
|
systemctl reload nginx
|
||||||
|
|
||||||
|
echo -e "${plain}Done!"
|
||||||
|
echo -e "${green}Available here -> http://$server_ip:80"
|
||||||
|
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
change_dns() {
|
||||||
|
echo -e "${yellow}${plain}Changing DNS resolver"
|
||||||
|
echo -e "${plain}Enter resolver (default: 9.9.9.9): "
|
||||||
|
read resolver
|
||||||
|
|
||||||
|
if [ -n "$resolver" ]; then
|
||||||
|
echo "nameserver $resolver" > /etc/resolv.conf
|
||||||
|
else
|
||||||
|
echo "nameserver 9.9.9.9" > /etc/resolv.conf
|
||||||
|
fi
|
||||||
|
echo -e "${green}${plain}Done!"
|
||||||
|
}
|
||||||
|
|
||||||
ip_validation() {
|
ip_validation() {
|
||||||
ipv6_regex="^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$"
|
ipv6_regex="^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$"
|
||||||
|
|
@ -2064,11 +2294,11 @@ iplimit_remove_conflicts() {
|
||||||
SSH_port_forwarding() {
|
SSH_port_forwarding() {
|
||||||
local URL_lists=(
|
local URL_lists=(
|
||||||
"https://api4.ipify.org"
|
"https://api4.ipify.org"
|
||||||
"https://ipv4.icanhazip.com"
|
"https://ipv4.icanhazip.com"
|
||||||
"https://v4.api.ipinfo.io/ip"
|
"https://v4.api.ipinfo.io/ip"
|
||||||
"https://ipv4.myexternalip.com/raw"
|
"https://ipv4.myexternalip.com/raw"
|
||||||
"https://4.ident.me"
|
"https://4.ident.me"
|
||||||
"https://check-host.net/ip"
|
"https://check-host.net/ip"
|
||||||
)
|
)
|
||||||
local server_ip=""
|
local server_ip=""
|
||||||
for ip_address in "${URL_lists[@]}"; do
|
for ip_address in "${URL_lists[@]}"; do
|
||||||
|
|
@ -2212,14 +2442,17 @@ show_menu() {
|
||||||
│ ${green}21.${plain} IP Limit Management │
|
│ ${green}21.${plain} IP Limit Management │
|
||||||
│ ${green}22.${plain} Firewall Management │
|
│ ${green}22.${plain} Firewall Management │
|
||||||
│ ${green}23.${plain} SSH Port Forwarding Management │
|
│ ${green}23.${plain} SSH Port Forwarding Management │
|
||||||
|
│ ${green}24.${plain} HoneyPot (Fakesite) │
|
||||||
|
│ ${green}25.${plain} Change DNS resolver │
|
||||||
│────────────────────────────────────────────────│
|
│────────────────────────────────────────────────│
|
||||||
│ ${green}24.${plain} Enable BBR │
|
│ ${green}26.${plain} Enable BBR │
|
||||||
│ ${green}25.${plain} Update Geo Files │
|
│ ${green}27.${plain} Update Geo Files │
|
||||||
│ ${green}26.${plain} Speedtest by Ookla │
|
│ ${green}28.${plain} Speedtest by Ookla │
|
||||||
|
│ ${green}29.${plain} Librespeed │
|
||||||
╚────────────────────────────────────────────────╝
|
╚────────────────────────────────────────────────╝
|
||||||
"
|
"
|
||||||
show_status
|
show_status
|
||||||
echo && read -rp "Please enter your selection [0-26]: " num
|
echo && read -rp "Please enter your selection [0-29]: " num
|
||||||
|
|
||||||
case "${num}" in
|
case "${num}" in
|
||||||
0)
|
0)
|
||||||
|
|
@ -2295,16 +2528,25 @@ show_menu() {
|
||||||
SSH_port_forwarding
|
SSH_port_forwarding
|
||||||
;;
|
;;
|
||||||
24)
|
24)
|
||||||
bbr_menu
|
create_honeypot
|
||||||
;;
|
;;
|
||||||
25)
|
25)
|
||||||
update_geo
|
change_dns
|
||||||
;;
|
;;
|
||||||
26)
|
26)
|
||||||
|
bbr_menu
|
||||||
|
;;
|
||||||
|
27)
|
||||||
|
update_geo
|
||||||
|
;;
|
||||||
|
28)
|
||||||
run_speedtest
|
run_speedtest
|
||||||
;;
|
;;
|
||||||
|
29)
|
||||||
|
run_librespeed
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
LOGE "Please enter the correct number [0-26]"
|
LOGE "Please enter the correct number [0-29]"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
@ -2360,4 +2602,4 @@ if [[ $# > 0 ]]; then
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
show_menu
|
show_menu
|
||||||
fi
|
fi
|
||||||
Loading…
Reference in a new issue