blob: b35b03da3468b562c192394da6b352022ac10ea4 (
plain)
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
|
# MESA-traffic-identification
技术栈:springboot+mybatisplus
## Getting started
1. 根据数据库信息更新\mesa-traffic-identification\framework\src\main\resources中application.yml中数据库的信息
包括访问数据库所需的:url、username、password
2. 启动mesa-traffic-identification\framework\src\main\java\org\example\WebApplication.java即可
## 依赖管理
本项目中所有依赖的版本号在mesa-traffic-identification\pom.xml中统一管理
1. 整个项目所需的依赖在mesa-traffic-identification\pom.xml,该文件不仅引入依赖,还确定了依赖的具体版本
2. mesa-traffic-identification下其他目标的pom.xml文件只需要写入依赖的名称,不需要添加版本号
## 功能实现
以请求源IP列表为例
### 请求源IP列表
#### 1. 需求
查询所有扫描源IP,并按照扫描次数排序。
#### 2. 接口设计
见接口文档
#### 3. 代码实现
1)从前端接收请求
mesa-traffic-identification\framework\src\main\java\org\example\controller这个包中定义的函数用于接收前端的请求。
当前端请求http://localhost:7777/portscan/getIpList这个url时
controller\PortscanController.java中getIpList()这个函数会响应这个请求,并且调用portscanService.getIpList()这个函数实现请求的功能
```java
@RequestMapping("/portscan")
public class PortscanController {
@Autowired
private PortscanService portscanService;
@GetMapping("/getIpList")
public ResponseResult getIpList(){
return portscanService.getIpList();
}
}
```
2)service\PortscanService.java是一个接口函数,用于定义所有函数,具体实现在service\impl\PortscanServiceImpl.java这个函数中
3)在service\impl\PortscanServiceImpl.java这个函数中实现功能
```java
@Service("portscanService")
public class PortscanServiceImpl extends ServiceImpl<PortscanMapper, Portscan> implements PortscanService {
@Autowired
private PortscanMapper portscanMapper;
private RdnsService rdnsService;
@Override
public ResponseResult getIpList() {
//联表查询,查询portscan中sip在ip表中对应的id
MPJLambdaWrapper<Portscan> wrapper = new MPJLambdaWrapper<Portscan>()
.selectAs(Portscan::getSip,IpListVo::getIp)
.select(Ip::getId)
.leftJoin(Ip.class,Ip::getIp,Portscan::getSip);
List<IpListVo> ipListVoList = portscanMapper.selectJoinList(IpListVo.class,wrapper);
//统计ipListVoList中每个ip出现的次数
HashMap<String,Long> ipNum = new HashMap<>();
for (IpListVo ipListVo : ipListVoList) {
if(!ipNum.containsKey(ipListVo.getIp())){
ipNum.put(ipListVo.getIp(), 1L);
}else{
ipNum.replace(ipListVo.getIp(),ipNum.get(ipListVo.getIp())+1);
}
}
//将ip出现的次数赋值给num
for (IpListVo ipListVo : ipListVoList) {
ipListVo.setNum(ipNum.get(ipListVo.getIp()));
}
//list去重
List<IpListVo> finalIpList = ipListVoList.stream().distinct().collect(Collectors.toList());
PageVo pageVo = new PageVo(finalIpList,finalIpList.size());
return ResponseResult.okResult(pageVo);
}
}
```
|