diff --git a/Readme.md b/Readme.md
index 43ad5bd6..e6325286 100644
--- a/Readme.md
+++ b/Readme.md
@@ -81,7 +81,7 @@
}
```
-## 添加节点
+## 添加设备
+ 请求命令
字段|内容
----|----
@@ -152,7 +152,7 @@
}
```
-## 删除节点
+## 删除设备
+ 请求命令
字段|内容
----|----
@@ -202,7 +202,7 @@
}
```
-## 更新节点
+## 更新设备
+ 请求命令
字段|内容
----|----
@@ -269,7 +269,7 @@
}
```
-## 获取全部节点
+## 获取全部设备
+ 请求命令
字段|内容
----|----
@@ -354,256 +354,507 @@
```
-## 获取节点版本信息
+## 能力节点信息
+ 请求命令
字段|内容
----|----
- Request URI|dispose/information/version
+ Request URI|dispose/info/areaInfo
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589439798660,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
+
++ 响应消息
+ 字段|内容
+ ----|----
+ Content type|application/json;charset=UTF-8
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1600738402459,"code":200,"msgContent":"{\"items\":[{\"nodeId\":\"0\",\"totalNetflow\":60,\"capacityType\":[0,1],\"onlineDevices\":1,\"totalDevices\":4},{\"nodeId\":\"3\",\"totalNetflow\":0,\"capacityType\":[0],\"onlineDevices\":1,\"totalDevices\":1}],\"status\":0,\"message\":[\"成功\"]}"}
```json
{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589439798660,
- "msgContent":"{\"id\":[\"1\",\"123\"]}"
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1600738402459,
+ "code": 200,
+ "msgContent": {
+ "items": [
+ {
+ "nodeId": "0",
+ "totalNetflow": 60,
+ "capacityType": [
+ 0,
+ 1
+ ],
+ "onlineDevices": 1,
+ "totalDevices": 4
+ },
+ {
+ "nodeId": "3",
+ "totalNetflow": 0,
+ "capacityType": [
+ 0
+ ],
+ "onlineDevices": 1,
+ "totalDevices": 1
+ }
+ ],
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ }
+}
+```
+
+## 平台版本信息
++ 请求命令
+ 字段|内容
+ ----|----
+ Request URI|dispose/info/platformVersion
+ Content type|application/json;charset=UTF-8
+ Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
+
++ 响应消息
+ 字段|内容
+ ----|----
+ Content type|application/json;charset=UTF-8
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1600738977137,"code":200,"msgContent":"{\"platVer\":{\"buildTime\":\"2020-09-18T15:11:38+0800\",\"commitDescribe\":\"v2.0.0_rc1-23-g22ec624-dirty\",\"commitId\":\"22ec62482cb1b99cf06dd301a3e53298ec0efca2\",\"commitTime\":\"2020-09-18T09:31:51+0800\",\"gitBranch\":\"master\",\"tagName\":\"v2.0.0_rc1\"},\"status\":0,\"message\":[\"成功\"]}"}
+```json
+{
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1600738977137,
+ "code": 200,
+ "msgContent": {
+ "platVer": {
+ "buildTime": "2020-09-18T15:11:38+0800",
+ "commitDescribe": "v2.0.0_rc1-23-g22ec624-dirty",
+ "commitId": "22ec62482cb1b99cf06dd301a3e53298ec0efca2",
+ "commitTime": "2020-09-18T09:31:51+0800",
+ "gitBranch": "master",
+ "tagName": "v2.0.0_rc1"
+ },
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ }
+}
+```
+
+## 设备版本信息
++ 请求命令
+ 字段|内容
+ ----|----
+ Request URI|dispose/info/deviceVersion
+ Content type|application/json;charset=UTF-8
+ Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1600739264314,"msgContent":"{\"id\":[\"571\",\"572\",\"573\"]}"}
+```json
+{
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1600739264314,
+ "msgContent": {
+ "id": [
+ "571",
+ "572",
+ "573"
+ ]
+ }
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589439798757,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"version\":\"Virtual_Device_1.0.0\",\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1600739264314,"code":200,"msgContent":"{\"items\":[{\"id\":\"571\",\"status\":19,\"message\":[\"没有这个设备\"]}, {\"id\":\"572\",\"ipAddr\":\"10.88.77.15\",\"ipPort\":\"80\",\"version\":\"5.7.31\",\"status\":0,\"message\":[\"成功\"]},{\"id\":\"573\",\"ipAddr\":\"10.88.77.88\",\"ipPort\":\"18080\",\"version\":\"Unknown\",\"status\":0,\"message\":[\"成功\"]}]}"}
```json
{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589439798757,
- "code": 200,
- "msgContent":"{\"items\":[{\"id\":\"1\",\"version\":\"Virtual_Device_1.0.0\",\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1600739264314,
+ "code": 200,
+ "msgContent": {
+ "items": [
+ {
+ "id": "571",
+ "status": 19,
+ "message": [
+ "没有这个设备"
+ ]
+ },
+ {
+ "id": "572",
+ "ipAddr": "10.88.77.15",
+ "ipPort": "80",
+ "version": "5.7.31",
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ },
+ {
+ "id": "573",
+ "ipAddr": "10.88.77.88",
+ "ipPort": "18080",
+ "version": "Unknown",
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ }
+ ]
+ }
}
```
-## 获取设备信息
+## 设备在线状态
+ 请求命令
字段|内容
----|----
- Request URI|dispose/information/deviceinfo
+ Request URI|dispose/info/deviceLinkStatus
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589440046439,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1600739818013,"msgContent":"{\"id\":[\"571\",\"572\",\"573\"]}"}
```json
{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589440046439,
- "msgContent":"{\"id\":[\"1\",\"123\"]}"
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1600739818013,
+ "msgContent": {
+ "id": [
+ "571",
+ "572",
+ "573"
+ ]
+ }
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589440046555,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"vendor\":\"Virtual\",\"model\":\"Dispose_1000\",\"firmware\":\"Unknown\",\"os\":\"Unknown\",\"kernel\":\"Linux\",\"arch\":\"x86_64\",\"memory\":-1,\"freeMemory\":-1,\"cpuUsed\":-1,\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"memory\":0,\"freeMemory\":0,\"cpuUsed\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1600741828940,"code":200,"msgContent":"{\"items\":[{\"id\":\"571\",\"status\":19,\"message\":[\"没有这个设备\"]},{\"id\":\"572\",\"ipAddr\":\"10.88.77.15\",\"ipPort\":\"80\",\"online\":1,\"status\":0,\"message\":[\"成功\"]},{\"id\":\"573\",\"ipAddr\":\"10.88.77.88\",\"ipPort\":\"18080\",\"online\":1,\"status\":0,\"message\":[\"成功\"]} ]}"}
```json
{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589440046555,
- "code": 200,
- "msgContent":"{\"items\":[{\"id\":\"1\",\"vendor\":\"Virtual\",\"model\":\"Dispose_1000\",\"firmware\":\"Unknown\",\"os\":\"Unknown\",\"kernel\":\"Linux\",\"arch\":\"x86_64\",\"memory\":-1,\"freeMemory\":-1,\"cpuUsed\":-1,\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"memory\":0,\"freeMemory\":0,\"cpuUsed\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1600741828940,
+ "code": 200,
+ "msgContent": {
+ "items": [
+ {
+ "id": "571",
+ "status": 19,
+ "message": [
+ "没有这个设备"
+ ]
+ },
+ {
+ "id": "572",
+ "ipAddr": "10.88.77.15",
+ "ipPort": "80",
+ "online": 1,
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ },
+ {
+ "id": "573",
+ "ipAddr": "10.88.77.88",
+ "ipPort": "18080",
+ "online": 1,
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ }
+ ]
+ }
}
```
-## 获取链接状态
+## 启动处置任务
+ 请求命令
字段|内容
----|----
- Request URI|dispose/information/linkstatus
+ Request URI|dispose/task/start
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589440383391,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1598597142580,"msgContent":"{\"type\":0,\"disposeIp\":\"192.168.50.2\",\"disposeTime\":10,\"flowDirection\":2,\"attackType\":[1,2,3,4,5]}"}
```json
{
- "ver": 2,
+ "ver": 3,
"cryptoType": 0,
- "timeStamp": 1589440383391,
- "msgContent":"{\"id\":[\"1\",\"123\"]}"
+ "timeStamp": 1598597142580,
+ "msgContent": {
+ "type": 0,
+ "disposeIp": "192.168.50.2",
+ "disposeTime": 10,
+ "flowDirection": 2,
+ "attackType": [
+ 1, 2, 3, 4, 5
+ ]
+ }
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589440383488,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"online\":1,\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"online\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1600741958954,"code":200,"msgContent":"{\"taskId\":\"165\",\"disposeIp\":\"192.168.50.2\",\"expireTime\":\"2020-09-22 10:42:38\",\"status\":0,\"message\":[\"成功\"]}"}
```json
{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589440383488,
- "code": 200,
- "msgContent":"{\"items\":[{\"id\":\"1\",\"online\":1,\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"online\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1600741958954,
+ "code": 200,
+ "msgContent": {
+ "taskId": "165",
+ "disposeIp": "192.168.50.2",
+ "expireTime": "2020-09-22 10:42:38",
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ }
}
```
-## 获取节点能力信息
-+ 请求命令
- 字段|内容
- ----|----
- Request URI|dispose/information/capacity
- Content type|application/json;charset=UTF-8
- Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589440740686,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
-```json
-{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589440740686,
- "msgContent":"{\"id\":[\"1\",\"123\"]}"
-}
-```
-+ 响应消息
- 字段|内容
- ----|----
- Content type|application/json;charset=UTF-8
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589440740792,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"capacity\":[{\"type\":0,\"tolCapacity\":1024,\"usedCapacity\":0},{\"type\":3,\"tolCapacity\":0,\"usedCapacity\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"}
-```json
-{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589440740792,
- "code": 200,
- "msgContent":"{\"items\":[{\"id\":\"1\",\"capacity\":[{\"type\":0,\"tolCapacity\":1024,\"usedCapacity\":0},{\"type\":3,\"tolCapacity\":0,\"usedCapacity\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"
-}
-```
-
-## 获取节点防护IP
-+ 请求命令
- 字段|内容
- ----|----
- Request URI|dispose/information/protected_ip
- Content type|application/json;charset=UTF-8
- Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589440953311,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
-
-```json
-{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589440953311,
- "msgContent":"{\"id\":[\"1\",\"123\"]}"
-}
-```
-+ 响应消息
- 字段|内容
- ----|----
- Content type|application/json;charset=UTF-8
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589440953422,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"capacity\":[{\"type\":0,\"disposeIp\":\"192.168.3.2-192.168.3.5,192.168.5.2-192.168.5.10,192.168.4.2-192.168.4.5\"},{\"type\":3,\"disposeIp\":\"192.168.2.1,192.168.2.2\"}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"}
-```json
-{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589440953422,
- "code": 200,
- "msgContent":"{\"items\":[{\"id\":\"1\",\"capacity\":[{\"type\":0,\"disposeIp\":\"192.168.3.2-192.168.3.5,192.168.5.2-192.168.5.10,192.168.4.2-192.168.4.5\"},{\"type\":3,\"disposeIp\":\"192.168.2.1,192.168.2.2\"}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"
-}
-```
-
-## 获取能力节点处置中任务
+## 启动多IP处置
+ 请求命令
字段|内容
----|----
- Request URI|dispose/information/run_task
+ Request URI|dispose/task/startMulIp
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589441350918,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1598597142580,"msgContent":"{\"type\":0,\"mulDisposeIp\":[\"192.168.50.4\",\"192.168.50.3\"],\"disposeTime\":10}"}
```json
{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589441350918,
- "msgContent":"{\"id\":[\"1\",\"123\"]}"
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1598597142580,
+ "msgContent": {
+ "type": 0,
+ "mulDisposeIp": [
+ "192.168.50.4",
+ "192.168.50.3"
+ ],
+ "disposeTime": 10
+ }
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589441351042,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"taskArray\":[{\"taskId\":\"67\",\"type\":0,\"disposeIp\":\"192.168.5.8\",\"startTime\":1589425749,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"taskArray\":[],\"status\":19,\"message\":\"没有这个设备\"}]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1600742365811,"code":200,"msgContent":"{\"items\":[{\"taskId\":\"166\",\"disposeIp\":\"192.168.50.4\",\"expireTime\":\"2020-09-22 10:49:25\",\"status\":0,\"message\":[\"成功\"]},{\"taskId\":\"167\",\"disposeIp\":\"192.168.50.3\",\"expireTime\":\"2020-09-22 10:49:25\",\"status\":0,\"message\":[\"成功\"]}]}"}
```json
{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589441351042,
- "code": 200,
- "msgContent":"{\"items\":[{\"id\":\"1\",\"taskArray\":[{\"taskId\":\"67\",\"type\":0,\"disposeIp\":\"192.168.5.8\",\"startTime\":1589425749,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"taskArray\":[],\"status\":19,\"message\":\"没有这个设备\"}]}"
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1600742365811,
+ "code": 200,
+ "msgContent": {
+ "items": [
+ {
+ "taskId": "166",
+ "disposeIp": "192.168.50.4",
+ "expireTime": "2020-09-22 10:49:25",
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ },
+ {
+ "taskId": "167",
+ "disposeIp": "192.168.50.3",
+ "expireTime": "2020-09-22 10:49:25",
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ }
+ ]
+ }
}
```
-## 获取能力节点所有处置任务
+## 停止指定处置任务
+ 请求命令
字段|内容
----|----
- Request URI|dispose/information/all_task
+ Request URI|dispose/task/stop
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589441746230,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1598597142580,"msgContent":"{\"taskId\":[\"166\",\"167\",\"168\"]}"}
```json
{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589441746230,
- "msgContent":"{\"id\":[\"1\",\"123\"]}"
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1598597142580,
+ "msgContent": {
+ "taskId": [
+ "166",
+ "167",
+ "168"
+ ]
+ }
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589442276448,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"taskArray\":[{\"taskId\":\"66\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.7\",\"startTime\":1589425731,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0},{\"taskId\":\"67\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.8\",\"startTime\":1589425749,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0},{\"taskId\":\"63\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.2\",\"startTime\":1589422184,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"taskArray\":[],\"status\":19,\"message\":\"没有这个设备\"}]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1600742779563,"code":200,"msgContent":"{\"items\":[{\"taskId\":\"166\",\"disposeDevice\":[\"573\",\"621\"],\"type\":0,\"disposeIp\":\"192.168.50.4\",\"leftTime\":3,\"status\":0,\"message\":[\"成功\"]},{\"taskId\":\"167\",\"disposeDevice\":[\"573\",\"621\"],\"type\":0,\"disposeIp\":\"192.168.50.3\",\"leftTime\":3,\"status\":0,\"message\":[\"成功\"]},{\"taskId\":\"168\",\"status\":30,\"message\":[\"没有该任务\"]}]}"}
```json
{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589442276448,
- "code": 200,
- "msgContent":"{\"items\":[{\"id\":\"1\",\"taskArray\":[{\"taskId\":\"66\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.7\",\"startTime\":1589425731,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0},{\"taskId\":\"67\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.8\",\"startTime\":1589425749,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0},{\"taskId\":\"63\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.2\",\"startTime\":1589422184,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"taskArray\":[],\"status\":19,\"message\":\"没有这个设备\"}]}"
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1600742779563,
+ "code": 200,
+ "msgContent": {
+ "items": [
+ {
+ "taskId": "166",
+ "disposeDevice": [
+ "573",
+ "621"
+ ],
+ "type": 0,
+ "disposeIp": "192.168.50.4",
+ "leftTime": "3",
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ },
+ {
+ "taskId": "167",
+ "disposeDevice": [
+ "573",
+ "621"
+ ],
+ "type": 0,
+ "disposeIp": "192.168.50.3",
+ "leftTime": "3",
+ "status": 0,
+ "message": [
+ "成功"
+ ]
+ },
+ {
+ "taskId": "168",
+ "status": 30,
+ "message": [
+ "没有该任务"
+ ]
+ }
+ ]
+ }
}
```
-## 获取能力节点列表
+## 获取全部处置任务
+ 请求命令
字段|内容
----|----
- Request URI|dispose/information/node_list
+ Request URI|dispose/task/taskList
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589442707017,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1598596065234,"msgContent":"{\"startPage\":1,\"pageSize\":10}"}
```json
{
- "ver": 2,
+ "ver": 3,
"cryptoType": 0,
- "timeStamp": 1589442707017,
- "msgContent":"{\"id\":[\"1\",\"123\"]}"
+ "timeStamp": 1598596065234,
+ "msgContent": {
+ "startPage": 1,
+ "pageSize": 10
+ }
}
+
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
- Body|{"ver":2,"cryptoType":0,"timeStamp":1589442707130,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"type\":0,\"name\":\"中移杭研实验室清洗设备\",\"ip\":\"10.88.77.15\",\"areaCode\":0,\"manufacturer\":\"DPTech\",\"model\":\"UMC\",\"version\":\"Virtual_Device_1.0.0\",\"readme\":\"实验室测试设备\",\"status\":0,\"message\":\"成功\",\"capacity\":[{\"type\":0,\"disposeIp\":\"192.168.3.2-192.168.3.5,192.168.5.2-192.168.5.10,192.168.4.2-192.168.4.5\",\"tolCapacity\":1024,\"usedCapacity\":0},{\"type\":3,\"disposeIp\":\"192.168.2.1,192.168.2.2\",\"tolCapacity\":0,\"usedCapacity\":0}]},{\"id\":\"123\",\"type\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"}
+ Body|{"ver":3,"cryptoType":0,"timeStamp":1600743307130,"code":200,"msgContent":"{\"curPageNumber\":1,\"pageSize\":10,\"totalItems\":2,\"totalPages\":1,\"status\":0,\"message\":[\"成功\"],\"items\":[{\"taskId\":\"165\",\"accountId\":\"1\",\"disposeCapacity\":0,\"disposeIp\":\"192.168.50.2\",\"createTime\":\"2020-09-22 10:32:38\",\"planEndTime\":\"2020-09-22 10:42:38\",\"endTime\":\"2020-09-22 10:42:38\",\"flowDirection\":2,\"attackType\":\"62\",\"flowBandWidth\":1024,\"currentStatus\":5,\"deviceTask\":[{\"devTaskId\":129,\"devId\":\"573\",\"externId\":\"536\",\"status\":3},{\"devTaskId\":130,\"devId\":\"621\",\"externId\":\"null\",\"status\":3}]},{\"taskId\":\"166\",\"accountId\":\"1\",\"disposeCapacity\":0,\"disposeIp\":\"192.168.50.4\",\"createTime\":\"2020-09-22 10:39:25\",\"planEndTime\":\"2020-09-22 10:49:25\",\"endTime\":\"2020-09-22 10:46:19\",\"flowDirection\":2,\"attackType\":\"8796093022207\",\"flowBandWidth\":1024,\"currentStatus\":4,\"deviceTask\":[{\"devTaskId\":131,\"devId\":\"573\",\"externId\":\"537\",\"status\":3},{\"devTaskId\":132,\"devId\":\"621\",\"externId\":\"null\",\"status\":3}]}]}"}
```json
{
- "ver": 2,
- "cryptoType": 0,
- "timeStamp": 1589442707130,
- "code": 200,
- "msgContent":"{\"items\":[{\"id\":\"1\",\"type\":0,\"name\":\"中移杭研实验室清洗设备\",\"ip\":\"10.88.77.15\",\"areaCode\":0,\"manufacturer\":\"DPTech\",\"model\":\"UMC\",\"version\":\"Virtual_Device_1.0.0\",\"readme\":\"实验室测试设备\",\"status\":0,\"message\":\"成功\",\"capacity\":[{\"type\":0,\"disposeIp\":\"192.168.3.2-192.168.3.5,192.168.5.2-192.168.5.10,192.168.4.2-192.168.4.5\",\"tolCapacity\":1024,\"usedCapacity\":0},{\"type\":3,\"disposeIp\":\"192.168.2.1,192.168.2.2\",\"tolCapacity\":0,\"usedCapacity\":0}]},{\"id\":\"123\",\"type\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"
+ "ver": 3,
+ "cryptoType": 0,
+ "timeStamp": 1600743307130,
+ "code": 200,
+ "msgContent": {
+ "curPageNumber": 1,
+ "pageSize": 10,
+ "totalItems": 2,
+ "totalPages": 1,
+ "status": 0,
+ "message": [
+ "成功"
+ ],
+ "items": [
+ {
+ "taskId": "165",
+ "accountId": "1",
+ "disposeCapacity": 0,
+ "disposeIp": "192.168.50.2",
+ "createTime": "2020-09-22 10:32:38",
+ "planEndTime": "2020-09-22 10:42:38",
+ "endTime": "2020-09-22 10:42:38",
+ "flowDirection": 2,
+ "attackType": "62",
+ "flowBandWidth": 1024,
+ "currentStatus": 5,
+ "deviceTask": [
+ {
+ "devTaskId": "129",
+ "devId": "573",
+ "externId": "536",
+ "status": 3
+ },
+ {
+ "devTaskId": "130",
+ "devId": "621",
+ "externId": "null",
+ "status": 3
+ }
+ ]
+ },
+ {
+ "taskId": "166",
+ "accountId": "1",
+ "disposeCapacity": 0,
+ "disposeIp": "192.168.50.4",
+ "createTime": "2020-09-22 10:39:25",
+ "planEndTime": "2020-09-22 10:49:25",
+ "endTime": "2020-09-22 10:46:19",
+ "flowDirection": 2,
+ "attackType": "8796093022207",
+ "flowBandWidth": 1024,
+ "currentStatus": 4,
+ "deviceTask": [
+ {
+ "devTaskId": "131",
+ "devId": "573",
+ "externId": "537",
+ "status": 3
+ },
+ {
+ "devTaskId": "132",
+ "devId": "621",
+ "externId": "null",
+ "status": 3
+ }
+ ]
+ }
+ ]
+ }
}
```
-## 获取能力节点详细信息
+
\ No newline at end of file
diff --git a/config/application-dispose.properties b/config/application-dispose.properties
index 3be98aaa..1ecd6690 100644
--- a/config/application-dispose.properties
+++ b/config/application-dispose.properties
@@ -5,7 +5,8 @@ dispose.check-protocol-timeout=false
dispose.split_char=,
dispose.request-timeout-second=5
# 是否开启隐私保护
-dispose.used-privacy-protect=true
+dispose.used-privacy-protect=false
+
dispose.call-error-retry-times=3
# 分页配置项
# 最大每页数据条数
diff --git a/pom.xml b/pom.xml
index 0de89494..e3ac1ec4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,27 +3,29 @@
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.2.9.RELEASE
-
-
- com.dispose
- phoenix_ddos_handle
- 1.0.0
- phoenix_ddos_handle
- Demo project for Spring Boot
1.8
Greenwich.SR3
2.1.3.Final
UTF-8
+ 2.3.4.RELEASE
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.3.4.RELEASE
+
+
+ com.dispose
+ phoenix_ddos_handle
+ 2.0.1
+ phoenix_ddos_handle
+ Dispose Platform
org.springframework.boot
spring-boot-starter-actuator
+ ${spring.framework.version}
runtime
true
@@ -127,6 +129,7 @@
joda-time
joda-time
+ 2.10.6
cn.hutool
@@ -146,11 +149,6 @@
pagehelper-spring-boot-starter
1.2.9
-
- com.cmcc
- enc.dec
- 1.3.1
-
commons-codec
commons-codec
@@ -212,6 +210,12 @@
jasypt-spring-boot
3.0.3
+
+
+ org.hibernate
+ hibernate-validator
+ 6.1.5.Final
+
diff --git a/src/main/java/com/dispose/ability/impl/DpTechAbilityImpl.java b/src/main/java/com/dispose/ability/impl/DpTechAbilityImpl.java
index b29f8310..c628deb7 100644
--- a/src/main/java/com/dispose/ability/impl/DpTechAbilityImpl.java
+++ b/src/main/java/com/dispose/ability/impl/DpTechAbilityImpl.java
@@ -92,9 +92,6 @@ public class DpTechAbilityImpl implements DisposeAbility {
//读取超时
policy.setReceiveTimeout(DpTechConfigValue.SOAP_RECEIVE_TIMEOUT_SECOND);
conduit.setClient(policy);
-
- // 获取迪普设备防护IP
- getDisposeDeviceProtectObject();
}
/**
@@ -117,6 +114,11 @@ public class DpTechAbilityImpl implements DisposeAbility {
try {
log.debug("++++Begging DPTech Start Cleanup Task: {}, {}, {} ", ip, attackType, nfDirection);
+ if (capType != DisposeCapacityType.CLEANUP) {
+ log.error("----Error DPTech don't support dispose capacity type: {}", capType);
+ return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, null);
+ }
+
NtcRequestResultInfo ret = cleanTypePort.startAbnormalTaskForUMC(ip, attackType,
nfDirection.getValue());
@@ -160,6 +162,11 @@ public class DpTechAbilityImpl implements DisposeAbility {
try {
log.info("++++Begging DPTech Stop Cleanup Task: {}, {}, {} ", ip, attackType, nfDirection);
+ if (capType != DisposeCapacityType.CLEANUP) {
+ log.error("----Error DPTech don't support dispose capacity type: {}", capType);
+ return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, null);
+ }
+
NtcRequestResultInfo ret = cleanTypePort.stopAbnormalTaskForUMC(ip, attackType,
nfDirection.getValue());
@@ -266,16 +273,33 @@ public class DpTechAbilityImpl implements DisposeAbility {
*/
@Override
public boolean isCarryProtectIp(String ipAddr) {
+ boolean ret = false;
IPAddress addr = new IPAddressString(ipAddr).getAddress();
synchronized (this) {
if (addr.isIPv4()) {
- return protectIpV4.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
+ ret = protectIpV4.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
}
if (addr.isIPv6()) {
- return protectIpV6.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
+ ret = protectIpV6.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
}
}
- return false;
+
+ if (!ret) {
+ // 更新迪普设备防护IP
+ getDisposeDeviceProtectObject();
+
+ synchronized (this) {
+ if (addr.isIPv4()) {
+ ret = protectIpV4.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
+ }
+
+ if (addr.isIPv6()) {
+ ret = protectIpV6.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
+ }
+ }
+ }
+
+ return ret;
}
}
diff --git a/src/main/java/com/dispose/ability/impl/HaoHanAbilityImpl.java b/src/main/java/com/dispose/ability/impl/HaoHanAbilityImpl.java
index 651bd522..082c099b 100644
--- a/src/main/java/com/dispose/ability/impl/HaoHanAbilityImpl.java
+++ b/src/main/java/com/dispose/ability/impl/HaoHanAbilityImpl.java
@@ -65,28 +65,39 @@ public class HaoHanAbilityImpl implements DisposeAbility {
@Nullable NetflowDirection nfDirection,
@Nullable Integer attackType,
@Nullable Long duration) {
- log.info("++++Begging Haohan Start Cleanup Task: {}", ip);
+ try {
+ log.info("++++Begging Haohan Start Cleanup Task: {}", ip);
- // 适配处置时间参数, -1为不限制处置时间
- if (duration == null || duration < 0) {
- duration = -1L;
+ if (capType != DisposeCapacityType.CLEANUP) {
+ log.error("----Error Haohan don't support dispose capacity type: {}", capType);
+ return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, null);
+ }
+
+ // 适配处置时间参数, -1为不限制处置时间
+ if (duration == null || duration < 0) {
+ duration = -1L;
+ }
+
+ HaoHanStartCleanResp resp = restfulInterface.startClean(this.urlRootPath, ip,
+ Math.max(duration.intValue(), 0),
+ DISPOSE_PLATFORM_NAME);
+
+ if (resp == null) {
+ log.error("----Error Haohan start clean {} server return error", ip);
+ return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
+ }
+
+ if (resp.getState() != ErrorCode.ERR_OK.getCode()) {
+ log.error("----Error Haohan start clean {} return error: {}, {}", ip, resp.getState(), resp.getMsg());
+ return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
+ }
+
+ log.debug("----Finish Haohan Start Cleanup Task: {}", ip);
+ return new MulReturnType<>(ErrorCode.ERR_OK, (long) resp.getCleanTaskId());
+ } catch (Exception ex) {
+ log.error("----Exception Haohan Start Cleanup Task: {}, {}, {}", ip, nfDirection, duration);
+ return new MulReturnType<>(ErrorCode.ERR_SYSTEMEXCEPTION, null);
}
-
- HaoHanStartCleanResp resp = restfulInterface.startClean(this.urlRootPath, ip, Math.max(duration.intValue(), 0),
- DISPOSE_PLATFORM_NAME);
-
- if (resp == null) {
- log.error("----Error Haohan start clean {} server return error", ip);
- return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
- }
-
- if (resp.getState() != ErrorCode.ERR_OK.getCode()) {
- log.error("----Error Haohan start clean {} return error: {}, {}", ip, resp.getState(), resp.getMsg());
- return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
- }
-
- log.debug("----Finish Haohan Start Cleanup Task: {}", ip);
- return new MulReturnType<>(ErrorCode.ERR_OK, (long) resp.getCleanTaskId());
}
/**
@@ -104,22 +115,32 @@ public class HaoHanAbilityImpl implements DisposeAbility {
@Nullable NetflowDirection nfDirection,
@Nullable Integer attackType,
@Nullable Long taskId) {
- log.debug("++++Begging Haohan Stop Cleanup Task: {}", taskId);
+ try {
+ log.debug("++++Begging Haohan Stop Cleanup Task: {}", taskId);
- if (taskId == null) {
- return new MulReturnType<>(ErrorCode.ERR_PARAMS, null);
+ if (capType != DisposeCapacityType.CLEANUP) {
+ log.error("----Error Haohan don't support dispose capacity type: {}", capType);
+ return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, null);
+ }
+
+ if (taskId == null) {
+ return new MulReturnType<>(ErrorCode.ERR_PARAMS, null);
+ }
+
+ HaoHanStopCleanResp resp = restfulInterface.stopClean(this.urlRootPath, taskId.intValue(),
+ DISPOSE_PLATFORM_NAME);
+
+ if (resp == null) {
+ log.error("----Error Haohan stop task{} server return error", taskId);
+ return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
+ }
+
+ log.debug("----Finish Haohan Stop Cleanup Task: {}", taskId);
+ return new MulReturnType<>(ErrorCode.ERR_OK, null);
+ } catch (Exception ex) {
+ log.error("----Exception Haohan Stop Cleanup Task: {}, {}, {}", ip, nfDirection, taskId);
+ return new MulReturnType<>(ErrorCode.ERR_SYSTEMEXCEPTION, null);
}
-
- HaoHanStopCleanResp resp = restfulInterface.stopClean(this.urlRootPath, taskId.intValue(),
- DISPOSE_PLATFORM_NAME);
-
- if (resp == null) {
- log.error("----Error Haohan stop task{} server return error", taskId);
- return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
- }
-
- log.debug("----Finish Haohan Stop Cleanup Task: {}", taskId);
- return new MulReturnType<>(ErrorCode.ERR_OK, null);
}
/**
@@ -129,8 +150,14 @@ public class HaoHanAbilityImpl implements DisposeAbility {
*/
@Override
public boolean getDeviceLinkStatus() {
- // 获取任务信息接口调用成功认为设备心跳正常
- return (restfulInterface.getCleanTaskStatus(this.urlRootPath, -1) != null);
+ try {
+ // 获取任务信息接口调用成功认为设备心跳正常
+ return (restfulInterface.getCleanTaskStatus(this.urlRootPath, -1) != null);
+ } catch (Exception ex) {
+ log.error(ex.getMessage());
+ }
+
+ return false;
}
/**
@@ -141,18 +168,18 @@ public class HaoHanAbilityImpl implements DisposeAbility {
@Override
public MulReturnType getAbilityDeviceFireware() {
return new MulReturnType<>(ErrorCode.ERR_OK,
- DeviceFirewareInfo.builder()
- .vendor("HaoHan")
- .model("Unknown")
- .firmware("Unknown")
- .os("Linux Server")
- .kernel("Linux")
- .arch("x86_64")
- .version("Unknown")
- .memory(-1)
- .freeMemory(-1)
- .cpuUsed(-1)
- .build());
+ DeviceFirewareInfo.builder()
+ .vendor("HaoHan")
+ .model("Unknown")
+ .firmware("Unknown")
+ .os("Linux Server")
+ .kernel("Linux")
+ .arch("x86_64")
+ .version("Unknown")
+ .memory(-1)
+ .freeMemory(-1)
+ .cpuUsed(-1)
+ .build());
}
/**
diff --git a/src/main/java/com/dispose/common/DisposeCapacityType.java b/src/main/java/com/dispose/common/DisposeCapacityType.java
index 34614f93..f04c9d8a 100644
--- a/src/main/java/com/dispose/common/DisposeCapacityType.java
+++ b/src/main/java/com/dispose/common/DisposeCapacityType.java
@@ -6,7 +6,6 @@ package com.dispose.common;
* @author
*/
public enum DisposeCapacityType implements BaseEnum {
- //1.清洗,2.压制,3.高防
/**
* The Cleanup.
*/
diff --git a/src/main/java/com/dispose/common/DpTechAttackType.java b/src/main/java/com/dispose/common/DpTechAttackType.java
index 1eaef32e..04ad5839 100644
--- a/src/main/java/com/dispose/common/DpTechAttackType.java
+++ b/src/main/java/com/dispose/common/DpTechAttackType.java
@@ -3,7 +3,6 @@ package com.dispose.common;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.stream.Stream;
/**
* The enum Dp tech attack type.
@@ -103,10 +102,13 @@ public enum DpTechAttackType implements BaseEnum {
* @return the long
*/
public static Long formDdosAttackTypeMaks(Long ddosAttackMask) {
- return getTypeMaskFromAttackType(DDoSAttackType.maskToDdosAttackType(ddosAttackMask)
- .stream()
- .flatMap(DpTechAttackType::fromDdosAttackTypeValue)
- .distinct().toArray(DpTechAttackType[]::new));
+ List dpTechAttackTypes = new ArrayList<>();
+
+ for (DDoSAttackType a : DDoSAttackType.maskToDdosAttackType(ddosAttackMask)) {
+ dpTechAttackTypes.addAll(DpTechAttackType.fromDdosAttackTypeValue(a));
+ }
+
+ return getTypeMaskFromAttackType(dpTechAttackTypes.stream().distinct().toArray(DpTechAttackType[]::new));
}
/**
@@ -133,41 +135,34 @@ public enum DpTechAttackType implements BaseEnum {
* @param type the type
* @return the stream
*/
- public static Stream fromDdosAttackTypeValue(DDoSAttackType type) {
+ public static List fromDdosAttackTypeValue(DDoSAttackType type) {
List attackList = new ArrayList<>();
switch (type) {
case HOST_TOTAL_TRAFFIC:
+ case WIN_NUKE:
+ case SIP_FLOOD:
+ case DNS_FLOOD:
+ case IPV4_PROTOCOL0:
+ case IP_PRIVATE:
+ case LAND_FLOOD:
+ case IGMP_FLOOD:
attackList.add(HOST_TOTAL_TRAFFIC);
break;
case RST_FLOOD:
- case FIN_FLOOD:
- case SIP_FLOOD:
- attackList.add(TCP_FIN_FLOOD);
- break;
-
case SYN_FLOOD:
- attackList.add(TCP_SYN_FLOOD);
- break;
-
case ACK_FLOOD:
- attackList.add(TCP_ACK_FLOOD);
- break;
-
case TCP_NULL:
case SYN_ACK_AMPLIFICATION:
case TCP_MISUSE:
+ case FIN_FLOOD:
attackList.add(TCP_SYN_ACK_FLOOD);
break;
case TCP_FRAGMENT:
- case WIN_NUKE:
case UDP_FRAGMENT:
case ICMP_FRAGMENT:
- case IPV4_PROTOCOL0:
- case IP_PRIVATE:
- case LAND_FLOOD:
attackList.add(IP_FRAGMENT_FLOOD);
break;
@@ -176,11 +171,6 @@ public enum DpTechAttackType implements BaseEnum {
attackList.add(HTTP_FLOOD);
break;
- case DNS_FLOOD:
- attackList.add(DNS_REPLY_FLOOD);
- attackList.add(DNS_QUERY_FLOOD);
- break;
-
case CHARGED_AMPLIFICATION:
case L2TP_AMPLIFICATION:
case MDNS_AMPLIFICATION:
@@ -202,7 +192,6 @@ public enum DpTechAttackType implements BaseEnum {
case SENTINEL_AMPLIFICATION:
case FRAGGLE_FLOOD:
case UDP_FLOOD:
- case IGMP_FLOOD:
attackList.add(UDP_FLOOD);
break;
@@ -219,7 +208,7 @@ public enum DpTechAttackType implements BaseEnum {
break;
}
- return attackList.stream();
+ return attackList;
}
/**
diff --git a/src/main/java/com/dispose/common/ErrorCode.java b/src/main/java/com/dispose/common/ErrorCode.java
index 4291124b..d5484b64 100644
--- a/src/main/java/com/dispose/common/ErrorCode.java
+++ b/src/main/java/com/dispose/common/ErrorCode.java
@@ -164,7 +164,10 @@ public enum ErrorCode {
* The Err untrusttoken.
*/
ERR_UNTRUSTTOKEN(38, "未经授权的Token"),
-
+ /**
+ * Err unknowninterface error code.
+ */
+ ERR_UNKNOWNINTERFACE(39, "未提供该接口"),
/**
* The Err decrypt base 64.
*/
@@ -269,6 +272,7 @@ public enum ErrorCode {
case ERR_INPUTMISS:
return HttpServletResponse.SC_BAD_REQUEST;
case ERR_UNSUPPORT:
+ case ERR_UNKNOWNINTERFACE:
return HttpServletResponse.SC_METHOD_NOT_ALLOWED;
default:
return HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
diff --git a/src/main/java/com/dispose/controller/DisposeDeviceManagerController.java b/src/main/java/com/dispose/controller/DisposeDeviceManagerController.java
index 32366148..45151ed5 100644
--- a/src/main/java/com/dispose/controller/DisposeDeviceManagerController.java
+++ b/src/main/java/com/dispose/controller/DisposeDeviceManagerController.java
@@ -290,6 +290,7 @@ public class DisposeDeviceManagerController {
devInfo.setUrlType(v.getUrlType().getValue());
devInfo.setReadme(v.getReadme());
devInfo.setDevStatus(v.getStatus().getValue());
+ devInfo.setUrlPath(v.getUrlPath());
List capList = new ArrayList<>();
diff --git a/src/main/java/com/dispose/controller/DisposeInfoController.java b/src/main/java/com/dispose/controller/DisposeInfoController.java
index 8d5c8268..8048107f 100644
--- a/src/main/java/com/dispose/controller/DisposeInfoController.java
+++ b/src/main/java/com/dispose/controller/DisposeInfoController.java
@@ -99,6 +99,7 @@ public class DisposeInfoController {
.nodeId(areaCode.toString())
.totalNetflow(areaCodeManagerService.getAreaCodeGroupReserveNetflow(areaCode))
.onlineDevices(areaCodeManagerService.getAreaCodeOnlineDeviceNum(areaCode))
+ .totalDevices(areaCodeManagerService.getAreaCodeTotalDeviceNum(areaCode))
.capacityType(Arrays.stream(areaCodeManagerService.getAreaCodeSupportCapacity(areaCode))
.map(DisposeCapacityType::getValue)
.toArray(Integer[]::new))
diff --git a/src/main/java/com/dispose/controller/DisposeTaskController.java b/src/main/java/com/dispose/controller/DisposeTaskController.java
index 0c5ef841..5a836a0f 100644
--- a/src/main/java/com/dispose/controller/DisposeTaskController.java
+++ b/src/main/java/com/dispose/controller/DisposeTaskController.java
@@ -45,9 +45,12 @@ import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
* The type Dispose task controller.
@@ -93,30 +96,30 @@ public class DisposeTaskController {
// 构造处置任务参数
DisposeTask task = DisposeTask.builder()
- .deviceId(Long.parseLong(Optional.ofNullable(req.getId()).orElse("-1")))
- .accountId(userAccountService.getUserIdByAuthHead(Objects.requireNonNull(headers.get("Authorization"))
- .get(0)))
- .disposeCapacity(CommonEnumHandler.codeOf(DisposeCapacityType.class,
- req.getType()))
- .disposeIp(Helper.ipAddressNormalize(req.getDisposeIp()))
- .planEndTime(String.valueOf(req.getDisposeTime()))
- .flowDirection(CommonEnumHandler.codeOf(NetflowDirection.class,
- Optional.ofNullable(req.getFlowDirection())
- .orElse(2)))
- .attackType(DDoSAttackType.getTypeMaskFromAttackType(
- Optional.ofNullable(req.getAttackType())
- .orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})))
- .flowBandWidth(Optional.ofNullable(req.getFlowBandwidth())
- .orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH))
- .build();
+ .deviceId(Long.parseLong(Optional.ofNullable(req.getId()).orElse("-1")))
+ .accountId(userAccountService.getUserIdByAuthHead(Objects.requireNonNull(headers.get("Authorization"))
+ .get(0)))
+ .disposeCapacity(CommonEnumHandler.codeOf(DisposeCapacityType.class,
+ req.getType()))
+ .disposeIp(Helper.ipAddressNormalize(req.getDisposeIp()))
+ .planEndTime(String.valueOf(req.getDisposeTime()))
+ .flowDirection(CommonEnumHandler.codeOf(NetflowDirection.class,
+ Optional.ofNullable(req.getFlowDirection())
+ .orElse(2)))
+ .attackType(DDoSAttackType.getTypeMaskFromAttackType(
+ Optional.ofNullable(req.getAttackType())
+ .orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})))
+ .flowBandWidth(Optional.ofNullable(req.getFlowBandwidth())
+ .orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH))
+ .build();
// 创建处置任务
MulReturnType ret = disposeTaskService.createTask(task);
// 设置返回消息
TaskStartRsp rspInfo = TaskStartRsp.builder()
- .disposeIp(task.getDisposeIp())
- .build();
+ .disposeIp(task.getDisposeIp())
+ .build();
rspInfo.setStatus(ret.getFirstParam().getCode());
rspInfo.setMessage(new String[]{ret.getFirstParam().getMsg()});
@@ -154,40 +157,40 @@ public class DisposeTaskController {
DisposeCapacityType capType = CommonEnumHandler.codeOf(DisposeCapacityType.class, req.getType());
String endTime = String.valueOf(req.getDisposeTime());
NetflowDirection netDir = CommonEnumHandler.codeOf(NetflowDirection.class,
- Optional.ofNullable(req.getFlowDirection()).orElse(2));
+ Optional.ofNullable(req.getFlowDirection()).orElse(2));
Long attackType = DDoSAttackType.getTypeMaskFromAttackType(Optional.ofNullable(req.getAttackType())
- .orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()}));
+ .orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()}));
Integer flowBand = Optional.ofNullable(req.getFlowBandwidth())
- .orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH);
+ .orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH);
TaskStartMulRsp mulRsp = TaskStartMulRsp.builder()
- .items(new ArrayList<>())
- .build();
+ .items(new ArrayList<>())
+ .build();
for (String ip : req.getMulDisposeIp()) {
// 构造处置任务参数
DisposeTask task = DisposeTask.builder()
- .deviceId(devId)
- .accountId(aId)
- .disposeCapacity(capType)
- .disposeIp(Helper.ipAddressNormalize(ip))
- .planEndTime(endTime)
- .flowDirection(netDir)
- .attackType(attackType)
- .flowBandWidth(flowBand)
- .build();
+ .deviceId(devId)
+ .accountId(aId)
+ .disposeCapacity(capType)
+ .disposeIp(Helper.ipAddressNormalize(ip))
+ .planEndTime(endTime)
+ .flowDirection(netDir)
+ .attackType(attackType)
+ .flowBandWidth(flowBand)
+ .build();
// 创建处置任务
MulReturnType ret = disposeTaskService.createTask(task);
// 设置返回消息
TaskStartRsp rspInfo = TaskStartRsp.builder()
- .disposeIp(ip)
- .build();
+ .disposeIp(ip)
+ .build();
// 启动任务成功
if (ret.getFirstParam() == ErrorCode.ERR_OK ||
- ret.getFirstParam() == ErrorCode.ERR_TASKRUNNING) {
+ ret.getFirstParam() == ErrorCode.ERR_TASKRUNNING) {
rspInfo.setTaskId(ret.getSecondParam().getId().toString());
rspInfo.setExpireTime(ret.getSecondParam().getPlanEndTime());
}
@@ -228,13 +231,13 @@ public class DisposeTaskController {
// 停止成功
if (ret.getFirstParam() == ErrorCode.ERR_OK) {
rspInfo.setDisposeDevice(ret.getSecondParam().getDeviceTask().stream()
- .map(DeviceTask::getDeviceId)
- .map(String::valueOf)
- .toArray(String[]::new));
+ .map(DeviceTask::getDeviceId)
+ .map(String::valueOf)
+ .toArray(String[]::new));
rspInfo.setType(ret.getSecondParam().getDisposeCapacity().getValue());
rspInfo.setDisposeIp(ret.getSecondParam().getDisposeIp());
rspInfo.setLeftTime(String.valueOf(Math.abs(
- Helper.getTimestampDiffNow(ret.getSecondParam().getPlanEndTime())) / 60));
+ Helper.getTimestampDiffNow(ret.getSecondParam().getPlanEndTime())) / 60));
}
rspInfo.setTaskId(tId);
@@ -256,54 +259,82 @@ public class DisposeTaskController {
@PostMapping("/taskList")
@ResponseBody
@ApiOperation("获取处置任务")
- public ProtocolRespDTO extends BaseRespStatus> getAllDisposeTask(
- @Validated(ValidGroups.ProtocolCommonValid.class)
- @RequestBody ProtocolReqDTO mr
+ public ProtocolRespDTO getAllDisposeTask(
+ @Validated(ValidGroups.ProtocolCommonValid.class)
+ @RequestBody ProtocolReqDTO mr
) {
- GetTaskRsp rspInfo = new GetTaskRsp();
+ GetTaskRsp rspInfo = GetTaskRsp.builder().build();
+ List getTaskDetail = new ArrayList<>();
- MulReturnType, List> ret =
- disposeTaskService.getPageDisposeTask(mr.getMsgContent().getStartPage(),
- mr.getMsgContent().getPageSize());
+ //获取TaskId列表
+ List reqTaskIds = Arrays.stream(Optional.ofNullable(mr.getMsgContent().getTaskId()).orElse(new String[]{})).
+ map(Long::parseLong).collect(Collectors.toList());
- // 拼装返回数据
- rspInfo.setStatus(ErrorCode.ERR_OK.getCode());
- rspInfo.setMessage(new String[]{ErrorCode.ERR_OK.getMsg()});
+ //获取所有可用处置任务
+ List taskList = disposeTaskService.getAllDisposeTask();
+ List idArray = taskList.stream().filter(v -> reqTaskIds.size() == 0 || reqTaskIds.contains(v.getId()))
+ .map(DisposeTask::getId).collect(Collectors.toList());
- // 分页信息
- rspInfo.setCurPageNumber(ret.getFirstParam().getPageNum());
- rspInfo.setPageSize(ret.getFirstParam().getPageSize());
- rspInfo.setTotalItems((int) ret.getFirstParam().getTotal());
- rspInfo.setTotalPages(ret.getFirstParam().getPages());
+ if (idArray.size() > 0) {
+ MulReturnType, List> ret =
+ disposeTaskService.getPageDisposeTask(idArray,
+ mr.getMsgContent().getStartPage(),
+ mr.getMsgContent().getPageSize());
- ret.getSecondParam().forEach(v -> {
- GetTaskDetail taskDetail = GetTaskDetail.builder()
- .taskId(String.valueOf(v.getId()))
- .accountId(String.valueOf(v.getAccountId()))
- .disposeCapacity(v.getDisposeCapacity().getValue())
- .disposeIp(v.getDisposeIp())
- .createTime(v.getCreateTime())
- .planEndTime(v.getPlanEndTime())
- .endTime(v.getEndTime())
- .flowDirection(v.getFlowDirection().getValue())
- .attackType(v.getAttackType().toString())
- .flowBandWidth(v.getFlowBandWidth())
- .currentStatus(v.getCurrentStatus().getValue())
- .deviceTask(new ArrayList<>())
- .build();
- v.getDeviceTask().forEach(k -> {
- GetDeviceTaskDetail deviceTaskDetail = GetDeviceTaskDetail.builder()
- .devTaskId(String.valueOf(k.getId()))
- .devId(String.valueOf(k.getDeviceId()))
- .externId(String.valueOf(k.getExternId()))
- .status(k.getStatus())
- .build();
+ // 分页信息
+ rspInfo.setCurPageNumber(ret.getFirstParam().getPageNum());
+ rspInfo.setPageSize(ret.getFirstParam().getPageSize());
+ rspInfo.setTotalItems((int) ret.getFirstParam().getTotal());
+ rspInfo.setTotalPages(ret.getFirstParam().getPages());
- taskDetail.getDeviceTask().add(deviceTaskDetail);
+ ret.getSecondParam().forEach(v -> {
+ GetTaskDetail taskDetail = GetTaskDetail.builder()
+ .taskId(String.valueOf(v.getId()))
+ .accountId(String.valueOf(v.getAccountId()))
+ .disposeCapacity(v.getDisposeCapacity().getValue())
+ .disposeIp(v.getDisposeIp())
+ .createTime(v.getCreateTime())
+ .planEndTime(v.getPlanEndTime())
+ .endTime(v.getEndTime())
+ .flowDirection(v.getFlowDirection().getValue())
+ .attackType(v.getAttackType().toString())
+ .flowBandWidth(v.getFlowBandWidth())
+ .currentStatus(v.getCurrentStatus().getValue())
+ .deviceTask(new ArrayList<>())
+ .build();
+ taskDetail.setStatus(ErrorCode.ERR_OK.getCode());
+ taskDetail.setMessage(new String[]{ErrorCode.ERR_OK.getMsg()});
+
+ v.getDeviceTask().forEach(k -> {
+ GetDeviceTaskDetail deviceTaskDetail = GetDeviceTaskDetail.builder()
+ .devTaskId(String.valueOf(k.getId()))
+ .devId(String.valueOf(k.getDeviceId()))
+ .externId(String.valueOf(k.getExternId()))
+ .status(k.getStatus())
+ .build();
+ taskDetail.getDeviceTask().add(deviceTaskDetail);
+ });
+
+ getTaskDetail.add(taskDetail);
});
+ }
- rspInfo.getItems().add(taskDetail);
- });
+ // 设置不存在taskId的错误码
+ if (reqTaskIds.stream().anyMatch(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))) {
+ reqTaskIds.stream()
+ .filter(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))
+ .forEach(v -> {
+ GetTaskDetail td = GetTaskDetail.builder().build();
+ td.setTaskId(String.valueOf(v));
+ td.setStatus(ErrorCode.ERR_NOSUCHTASK.getCode());
+ td.setMessage(new String[]{ErrorCode.ERR_NOSUCHTASK.getMsg()});
+ getTaskDetail.add(td);
+ });
+ }
+
+ // 对返回的信息按照TaskID排序
+ rspInfo.setItems(getTaskDetail.stream().sorted(Comparator.comparing(GetTaskDetail::getTaskId))
+ .collect(Collectors.toList()));
return ProtocolRespDTO.result(ErrorCode.ERR_OK, rspInfo);
}
diff --git a/src/main/java/com/dispose/controller/ErrorController.java b/src/main/java/com/dispose/controller/ErrorController.java
new file mode 100644
index 00000000..a139093f
--- /dev/null
+++ b/src/main/java/com/dispose/controller/ErrorController.java
@@ -0,0 +1,48 @@
+package com.dispose.controller;
+
+import com.dispose.common.ErrorCode;
+import com.dispose.exception.ControllerNotSupportException;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
+import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * The type Error controller.
+ *
+ * @author
+ */
+@Controller
+public class ErrorController extends BasicErrorController {
+ /**
+ * Instantiates a new Error controller.
+ *
+ * @param serverProperties the server properties
+ */
+ public ErrorController(ServerProperties serverProperties) {
+ super(new DefaultErrorAttributes(), serverProperties.getError());
+ }
+
+ /**
+ * Error response entity.
+ *
+ * @param request the request
+ * @return the response entity
+ */
+ @Override
+ public ResponseEntity