#!/bin/bash
systemctl stop sing-box
sleep 1
python3 -u - <<'PY'
import socket,time,sys
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
try:
    s.bind(('0.0.0.0',443))
except Exception as e:
    print('BINDFAIL',repr(e),flush=True); sys.exit(0)
print('listening',flush=True)
s.settimeout(1.0)
target=None
deadline=time.time()+30
while time.time()<deadline:
    try:
        d,addr=s.recvfrom(2048)
    except socket.timeout:
        continue
    if d==b'\x01\x02\x03\x04':
        target=addr
        break
if target is None:
    print('NOPROBE',flush=True); sys.exit(0)
print('target',target,flush=True)
def send(marker,n,pps):
    dt=1.0/pps
    for i in range(n):
        s.sendto(bytes([marker])+bytes([i%256])*1199, target)
        time.sleep(dt)
t0=time.time()
send(0xAA,30,20)
print('phaseA_20pps done at',round(time.time()-t0,1),flush=True)
time.sleep(4)
send(0xBB,30,2)
print('phaseB_2pps done at',round(time.time()-t0,1),flush=True)
time.sleep(2)
send(0xCC,30,20)
print('phaseC_20pps done at',round(time.time()-t0,1),flush=True)
s.settimeout(1.0)
up=0
deadline=time.time()+15
while time.time()<deadline:
    try:
        d,addr=s.recvfrom(2048)
    except socket.timeout:
        continue
    up+=1
print('uplink_total=',up,flush=True)
PY
systemctl start sing-box
sleep 4
systemctl is-active sing-box
