admin
2022-04-25 bfb5dfa709ec55ab0cc57981b7d1504088d1bfac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.yeshi.buwan.job.domain;
 
import com.aliyun.alidns20150109.models.DescribeSubDomainRecordsResponseBody;
import com.tencentcloudapi.clb.v20180317.models.LoadBalancer;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yeshi.buwan.domain.live.TVLiveChannel;
import com.yeshi.buwan.domain.live.TVLiveChannelResourceMap;
import com.yeshi.buwan.domain.live.TVLiveProgramResource;
import com.yeshi.buwan.domain.live.TVLiveResource;
import com.yeshi.buwan.live.migu.MiGuLiveListInfo;
import com.yeshi.buwan.live.migu.MiguLiveApiUtil;
import com.yeshi.buwan.service.inter.live.MiGuLiveService;
import com.yeshi.buwan.service.inter.live.TVLiveChannelResourceService;
import com.yeshi.buwan.service.inter.live.TVLiveChannelService;
import com.yeshi.buwan.service.inter.live.TVLiveProgramResourceService;
import com.yeshi.buwan.service.inter.system.SystemConfigService;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.factory.live.TVLiveChannelFactory;
import com.yeshi.buwan.util.tvlive.DianShiMaoUtil;
import com.yeshi.buwan.util.tvlive.TVSOUUtil;
import net.sf.json.JSONArray;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
 
//10409568
@Component
public class DDOSJob {
 
    private String getBindIP() throws Exception {
        DescribeSubDomainRecordsResponseBody.DescribeSubDomainRecordsResponseBodyDomainRecordsRecord record = AliyunDomainParseUtil.getIP("api.ysdq.yeshitv.com");
        String ip = record.getValue().trim();
        return ip;
    }
 
    //切换被腾讯云封堵的IP
    @XxlJob("ddos-buwan-server-change")
    public ReturnT<String> buwanServerChange(String params) throws Exception {
        LoadBalancer[] balances = TencentCloudCLBUtil.getCLBList("布丸-备用");
        if (balances == null || balances.length == 0) {
            throw new Exception("腾讯云负载均衡未查询到");
        }
 
        List<String> blockIPS = new ArrayList<>();
        List<String> normalIPS = new ArrayList<>();
        List<LoadBalancer> normals = new ArrayList<>();
        for (LoadBalancer b : balances) {
            if (b.getIsBlock()) {
                blockIPS.add(b.getLoadBalancerVips()[0].trim());
            } else {
                normalIPS.add(b.getLoadBalancerVips()[0].trim());
                normals.add(b);
            }
        }
 
        //无封堵
        if (blockIPS.size() == 0) {
            //在没有封堵的情况下删除多余的负载均衡
            if (normalIPS.size() > 2) {
                deleteMore(normals, getBindIP());
            }
            return ReturnT.SUCCESS;
        }
 
        //删除多余的负载均衡
        if (normalIPS.size() > 2) {
            deleteMore(normals, getBindIP());
        }
 
 
        //获取阿里云解析的域名
        DescribeSubDomainRecordsResponseBody.DescribeSubDomainRecordsResponseBodyDomainRecordsRecord record = AliyunDomainParseUtil.getIP("api.ysdq.yeshitv.com");
 
        String ip = record.getValue().trim();
        if (!blockIPS.contains(ip)) {
            //如果没有解析封堵的IP就返回
            return ReturnT.SUCCESS;
        }
 
        //更换正常的IP
        if (normalIPS.size() == 0) {
            throw new Exception("腾讯云负载均衡IP已全部被封堵,请增加IP");
        }
        AliyunDomainParseUtil.setIP(record, normalIPS.get(normalIPS.size() - 1));
 
        //每次切换IP后需要判断是否需要增加IP,用于创建新的负载均衡
        autoAdd(normalIPS.size(), balances.length);
 
        return ReturnT.SUCCESS;
    }
 
 
    private void autoAdd(int normalIPCount, int totalCount) throws TencentCloudSDKException {
        if (normalIPCount < 2) {
            //始终保持2个正常IP
            TencentCloudCLBUtil.createBuWanCLB(totalCount);
        }
    }
 
    //删除多余的
    private void deleteMore(List<LoadBalancer> normals, String bindIP) throws TencentCloudSDKException {
        if (StringUtil.isNullOrEmpty(bindIP)) {
            return;
        }
 
        if (normals.size() > 2) {
            //始终保持2个正常IP
            int deleteCount = normals.size() - 2;
            List<String> bids = new ArrayList<>();
            for (LoadBalancer balancer : normals) {
                //没有绑定,并且还能删除
                if (!balancer.getLoadBalancerVips()[0].trim().equalsIgnoreCase(bindIP)) {
                    if (bids.size() < deleteCount) {
                        bids.add(balancer.getLoadBalancerId());
                    }
                }
            }
            if (bids.size() > 0) {
                for (String bid : bids) {
                    TencentCloudCLBUtil.deleteCLB(bid);
                }
            }
        }
    }
 
    public static void main(String[] args){
        try {
            new DDOSJob().buwanServerChange("");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
 
}