summaryrefslogtreecommitdiff
path: root/README.md
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);
    }
}
```