搬瓦工秒变动态 ip (伪)

众所周知,搬瓦工可以在后台更换机房达到更换 ip 的目的,且更换机房系统不会被改(不保证数据不丢失的可能)。重要的是,搬瓦工还提供了十分方便的 API ,可以利用 API 来更换机房,再通过 cloudflare 的 API 实现动态域名解析,达到动态 ip 的效果(大雾。

然后就写出了一个渣渣的脚本,勿喷。

#!/bin/bash
bwh() {                # 搬瓦工 API 参数
    bwh_id=VEID        # 如 bwh_id=717911
    bwh_key=API KEY    # 如 bwh_key=private_TiORz1T2Ev1sTB53snCTH4gT
}

cf() {                            # cloudflare 参数相关
    cf_key=Global API Key         # cloudflare API key 
    cf_mail=mail                  # cloudflare 登录邮箱

    ZoneID=Zone ID                # 在 cloudflare 控制台 Overview 项里找到

    dns_id=ID                    # 已解析域名 id ,运行此命令获取 curl -X GET "https://api.cloudflare.com/client/v4/zones/你的Zone ID/dns_records" -H "X-Auth-Email: 你的邮箱" -H "X-Auth-Key: 你的Global API Key" -H "Content-Type: application/json"
    dname=域名                   # 如上获取,如 dname= bwh.abc.com
}

UpdateDNS() {
    updateDNS_log=`curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZoneID}/dns_records/${dns_id}" \
    -H "X-Auth-Email: ${cf_mail}" \
    -H "X-Auth-Key: ${cf_key}" \
    -H "Content-Type: application/json" \
    --data '{"type":"A","name":"'${dname}'","content":"'${new_ip}'","ttl":180,"proxied":false}'`  # proxied 的值为 false 时不套 cdn,为 ture 时套 cdn

    exit 
}

check_ip() {
    IP=$1
    VALID_CHECK=$(echo $IP|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
    if echo $IP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null; then
        if [ ${VALID_CHECK:-no} == "yes" ]; then
            UpdateDNS
        else
            GetNewLocation
        fi
    else
        GetNewLocation
    fi
}

GetNewIp() {
    new_ip=`expr "$New_DCinfo" : '.*\[\(.*\)\]' | sed -n -e 's/"//gp'`
    check_ip $new_ip
}

CheckStatus() {
    if [[ $New_DCinfo =~ "734104" ]];then 
        GetNewLocation
    else
        GetNewIp
    fi
}

MigrateDC() {
    info=`wget -qO- "https://api.64clouds.com/v1/migrate/getLocations?&veid=${bwh_id}&api_key=${bwh_key}"`
    currentLocation=(`expr "$info" : '.*\[\(.*\)\]' | sed -n -e 's/"//gp' | sed 's/,/ /g'`)
    if [ "$new_location" = "$currentLocation" ] ; then
        GetNewLocation
    fi

    New_DCinfo=`wget -qO- "https://api.64clouds.com/v1/migrate/start?location=${new_location}&veid=${bwh_id}&api_key=${bwh_key}"`
    CheckStatus
}

GetNewLocation() {
    Location=(USCA_FMT USCA_3 USCA_8 USCA_4)
    num=`echo $(($RANDOM%4))`
    new_location=`echo ${Location[$num]}`
    MigrateDC
}

bwh
cf
GetNewLocation

评论列表

  1. 云武 云武

    你的网站被墙了,发现吗?

    1. 我这边正常

评论