From bfb5dfa709ec55ab0cc57981b7d1504088d1bfac Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期一, 25 四月 2022 18:44:38 +0800
Subject: [PATCH] 应对DDOS攻击IP切换优化

---
 src/main/java/com/yeshi/buwan/job/domain/DDOSJob.java |   71 ++++++++++++++++++++++++++++++++---
 1 files changed, 64 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/yeshi/buwan/job/domain/DDOSJob.java b/src/main/java/com/yeshi/buwan/job/domain/DDOSJob.java
index 3645305..71dc115 100644
--- a/src/main/java/com/yeshi/buwan/job/domain/DDOSJob.java
+++ b/src/main/java/com/yeshi/buwan/job/domain/DDOSJob.java
@@ -2,6 +2,7 @@
 
 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;
@@ -30,6 +31,12 @@
 @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;
+    }
+
     //鍒囨崲琚吘璁簯灏佸牭鐨処P
     @XxlJob("ddos-buwan-server-change")
     public ReturnT<String> buwanServerChange(String params) throws Exception {
@@ -40,18 +47,30 @@
 
         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");
@@ -67,16 +86,54 @@
             throw new Exception("鑵捐浜戣礋杞藉潎琛P宸插叏閮ㄨ灏佸牭锛岃澧炲姞IP");
         }
         AliyunDomainParseUtil.setIP(record, normalIPS.get(normalIPS.size() - 1));
+
+        //姣忔鍒囨崲IP鍚庨渶瑕佸垽鏂槸鍚﹂渶瑕佸鍔營P锛岀敤浜庡垱寤烘柊鐨勮礋杞藉潎琛�
+        autoAdd(normalIPS.size(), balances.length);
+
         return ReturnT.SUCCESS;
     }
 
-//    public static void main(String[] args){
-//        try {
-//            new DDOSJob().buwanServerChange("");
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
+
+    private void autoAdd(int normalIPCount, int totalCount) throws TencentCloudSDKException {
+        if (normalIPCount < 2) {
+            //濮嬬粓淇濇寔2涓甯窱P
+            TencentCloudCLBUtil.createBuWanCLB(totalCount);
+        }
+    }
+
+    //鍒犻櫎澶氫綑鐨�
+    private void deleteMore(List<LoadBalancer> normals, String bindIP) throws TencentCloudSDKException {
+        if (StringUtil.isNullOrEmpty(bindIP)) {
+            return;
+        }
+
+        if (normals.size() > 2) {
+            //濮嬬粓淇濇寔2涓甯窱P
+            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();
+        }
+    }
 
 
 }

--
Gitblit v1.8.0