mirror of
https://github.com/anten-ka/kaskad-pro.git
synced 2026-05-20 07:26:18 +00:00
Add TCP ping fallback for servers that block ICMP (XRay, VLESS, Reality)
Made-with: Cursor
This commit is contained in:
58
_test_tcp_ping.py
Normal file
58
_test_tcp_ping.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import paramiko
|
||||
|
||||
host = "185.250.47.205"
|
||||
user = "root"
|
||||
pwd = "0i1sbf9NM36FkG5dFH"
|
||||
|
||||
test_script = """#!/bin/bash
|
||||
tcp_ping() {
|
||||
local ip="$1" port="$2" tout="${3:-3}"
|
||||
local raw
|
||||
raw=$(curl -so /dev/null -w '%{time_connect}' --max-time "$tout" --connect-timeout "$tout" "http://${ip}:${port}/" 2>/dev/null)
|
||||
[ -z "$raw" ] && return 1
|
||||
local ms
|
||||
ms=$(awk "BEGIN {v=$raw*1000; if(v<0.5) exit 1; printf \\"%.2f\\", v}" 2>/dev/null) || return 1
|
||||
echo "$ms"
|
||||
}
|
||||
|
||||
smart_ping() {
|
||||
local ip="$1" tout="${2:-3}" port="${3:-}"
|
||||
local ms
|
||||
ms=$(ping -c 1 -W "$tout" "$ip" 2>/dev/null | sed -n 's/.*time=\\([0-9.]*\\).*/\\1/p')
|
||||
if [ -n "$ms" ]; then echo "ICMP: ${ms}ms"; return 0; fi
|
||||
[ -z "$port" ] && { echo "NO_PORT"; return 1; }
|
||||
ms=$(tcp_ping "$ip" "$port" "$tout")
|
||||
if [ -n "$ms" ]; then echo "TCP: ${ms}ms"; return 0; fi
|
||||
echo "TIMEOUT"
|
||||
return 1
|
||||
}
|
||||
|
||||
echo "=== Test 1: ICMP to 8.8.8.8 ==="
|
||||
smart_ping "8.8.8.8" 3
|
||||
|
||||
echo "=== Test 2: ICMP to 193.124.225.26 (no port) ==="
|
||||
smart_ping "193.124.225.26" 3
|
||||
|
||||
echo "=== Test 3: smart_ping 193.124.225.26 TCP:443 ==="
|
||||
smart_ping "193.124.225.26" 3 "443"
|
||||
|
||||
echo "=== Test 4: tcp_ping raw ==="
|
||||
result=$(tcp_ping "193.124.225.26" "443" 3)
|
||||
echo "result=$result rc=$?"
|
||||
"""
|
||||
|
||||
ssh = paramiko.SSHClient()
|
||||
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
ssh.connect(host, username=user, password=pwd, timeout=10)
|
||||
|
||||
sftp = ssh.open_sftp()
|
||||
with sftp.file("/tmp/_kaskad_test.sh", "w") as f:
|
||||
f.write(test_script)
|
||||
sftp.close()
|
||||
|
||||
stdin, stdout, stderr = ssh.exec_command("bash /tmp/_kaskad_test.sh", timeout=30)
|
||||
print(stdout.read().decode(errors="replace"))
|
||||
err = stderr.read().decode(errors="replace")
|
||||
if err:
|
||||
print("STDERR:", err)
|
||||
ssh.close()
|
||||
Reference in New Issue
Block a user