summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJinghua <[email protected]>2023-05-29 15:10:46 +0800
committerJinghua <[email protected]>2023-05-29 15:10:46 +0800
commit8860199d618c78124ba3f6de77bce4f2c752821c (patch)
treeea7eaac76aab1837fae7d465a53e4822e82d022f
parent7fbe1093977d6a265b1f4fdf87930440eed35546 (diff)
23-0529
-rw-r--r--.idea/.gitignore8
-rw-r--r--.idea/compiler.xml14
-rw-r--r--.idea/dataSources.xml19
-rw-r--r--.idea/easyCodeTableSetting.xml520
-rw-r--r--.idea/encodings.xml9
-rw-r--r--.idea/jarRepositories.xml20
-rw-r--r--.idea/misc.xml14
-rw-r--r--.idea/uiDesigner.xml124
-rw-r--r--.idea/vcs.xml6
-rw-r--r--framework/pom.xml97
-rw-r--r--framework/src/main/java/org/example/ResponseResult.java122
-rw-r--r--framework/src/main/java/org/example/WebApplication.java15
-rw-r--r--framework/src/main/java/org/example/config/WebConfig.java26
-rw-r--r--framework/src/main/java/org/example/controller/IpController.java35
-rw-r--r--framework/src/main/java/org/example/controller/PortController.java26
-rw-r--r--framework/src/main/java/org/example/controller/PortscanController.java54
-rw-r--r--framework/src/main/java/org/example/controller/RdnsController.java33
-rw-r--r--framework/src/main/java/org/example/entity/Ip.java40
-rw-r--r--framework/src/main/java/org/example/entity/Port.java32
-rw-r--r--framework/src/main/java/org/example/entity/Portscan.java39
-rw-r--r--framework/src/main/java/org/example/entity/Rdns.java39
-rw-r--r--framework/src/main/java/org/example/enums/AppHttpCodeEnum.java29
-rw-r--r--framework/src/main/java/org/example/mapper/IpMapper.java18
-rw-r--r--framework/src/main/java/org/example/mapper/PortMapper.java15
-rw-r--r--framework/src/main/java/org/example/mapper/PortscanMapper.java19
-rw-r--r--framework/src/main/java/org/example/mapper/RdnsMapper.java15
-rw-r--r--framework/src/main/java/org/example/service/IpService.java18
-rw-r--r--framework/src/main/java/org/example/service/PortService.java15
-rw-r--r--framework/src/main/java/org/example/service/PortscanService.java23
-rw-r--r--framework/src/main/java/org/example/service/RdnsService.java17
-rw-r--r--framework/src/main/java/org/example/service/impl/IpServiceImpl.java91
-rw-r--r--framework/src/main/java/org/example/service/impl/PortServiceImpl.java18
-rw-r--r--framework/src/main/java/org/example/service/impl/PortscanServiceImpl.java163
-rw-r--r--framework/src/main/java/org/example/service/impl/RdnsServiceImpl.java77
-rw-r--r--framework/src/main/java/org/example/utils/BeanCopyUtils.java31
-rw-r--r--framework/src/main/java/org/example/vo/CountryListVo.java16
-rw-r--r--framework/src/main/java/org/example/vo/IpDetail.java54
-rw-r--r--framework/src/main/java/org/example/vo/IpDetailPort.java15
-rw-r--r--framework/src/main/java/org/example/vo/IpDetailRdns.java14
-rw-r--r--framework/src/main/java/org/example/vo/IpListVo.java17
-rw-r--r--framework/src/main/java/org/example/vo/PageVo.java15
-rw-r--r--framework/src/main/java/org/example/vo/PortListVo.java19
-rw-r--r--framework/src/main/java/org/example/vo/RdnsDetail.java29
-rw-r--r--framework/src/main/java/org/example/vo/RdnsDetailIp.java14
-rw-r--r--framework/src/main/java/org/example/vo/RdnsDetailPort.java15
-rw-r--r--framework/src/main/java/org/example/vo/RdnsListVo.java17
-rw-r--r--framework/src/main/resources/application.yml22
-rw-r--r--framework/target/classes/application.yml22
-rw-r--r--framework/target/classes/org/example/ResponseResult.classbin0 -> 4683 bytes
-rw-r--r--framework/target/classes/org/example/WebApplication.classbin0 -> 880 bytes
-rw-r--r--framework/target/classes/org/example/config/WebConfig.classbin0 -> 1503 bytes
-rw-r--r--framework/target/classes/org/example/constants/SystemConstants.classbin0 -> 654 bytes
-rw-r--r--framework/target/classes/org/example/controller/IpController.classbin0 -> 1042 bytes
-rw-r--r--framework/target/classes/org/example/controller/PortController.classbin0 -> 498 bytes
-rw-r--r--framework/target/classes/org/example/controller/PortscanController.classbin0 -> 1311 bytes
-rw-r--r--framework/target/classes/org/example/controller/RdnsController.classbin0 -> 1056 bytes
-rw-r--r--framework/target/classes/org/example/entity/Ip.classbin0 -> 4384 bytes
-rw-r--r--framework/target/classes/org/example/entity/Port.classbin0 -> 2652 bytes
-rw-r--r--framework/target/classes/org/example/entity/Portscan.classbin0 -> 4042 bytes
-rw-r--r--framework/target/classes/org/example/entity/Rdns.classbin0 -> 4164 bytes
-rw-r--r--framework/target/classes/org/example/enums/AppHttpCodeEnum.classbin0 -> 2067 bytes
-rw-r--r--framework/target/classes/org/example/mapper/IpMapper.classbin0 -> 351 bytes
-rw-r--r--framework/target/classes/org/example/mapper/PortMapper.classbin0 -> 292 bytes
-rw-r--r--framework/target/classes/org/example/mapper/PortscanMapper.classbin0 -> 369 bytes
-rw-r--r--framework/target/classes/org/example/mapper/RdnsMapper.classbin0 -> 292 bytes
-rw-r--r--framework/target/classes/org/example/service/IpService.classbin0 -> 368 bytes
-rw-r--r--framework/target/classes/org/example/service/PortService.classbin0 -> 303 bytes
-rw-r--r--framework/target/classes/org/example/service/PortscanService.classbin0 -> 446 bytes
-rw-r--r--framework/target/classes/org/example/service/RdnsService.classbin0 -> 375 bytes
-rw-r--r--framework/target/classes/org/example/service/impl/IpServiceImpl.classbin0 -> 7817 bytes
-rw-r--r--framework/target/classes/org/example/service/impl/PortServiceImpl.classbin0 -> 687 bytes
-rw-r--r--framework/target/classes/org/example/service/impl/PortscanServiceImpl.classbin0 -> 10921 bytes
-rw-r--r--framework/target/classes/org/example/service/impl/RdnsServiceImpl.classbin0 -> 5412 bytes
-rw-r--r--framework/target/classes/org/example/utils/BeanCopyUtils.classbin0 -> 2494 bytes
-rw-r--r--framework/target/classes/org/example/vo/CountryListVo.classbin0 -> 2062 bytes
-rw-r--r--framework/target/classes/org/example/vo/IpDetail.classbin0 -> 6824 bytes
-rw-r--r--framework/target/classes/org/example/vo/IpDetailPort.classbin0 -> 2093 bytes
-rw-r--r--framework/target/classes/org/example/vo/IpDetailRdns.classbin0 -> 2030 bytes
-rw-r--r--framework/target/classes/org/example/vo/IpListVo.classbin0 -> 2420 bytes
-rw-r--r--framework/target/classes/org/example/vo/PageVo.classbin0 -> 1857 bytes
-rw-r--r--framework/target/classes/org/example/vo/PortListVo.classbin0 -> 2416 bytes
-rw-r--r--framework/target/classes/org/example/vo/RdnsDetail.classbin0 -> 4946 bytes
-rw-r--r--framework/target/classes/org/example/vo/RdnsDetailIp.classbin0 -> 2016 bytes
-rw-r--r--framework/target/classes/org/example/vo/RdnsDetailPort.classbin0 -> 2101 bytes
-rw-r--r--framework/target/classes/org/example/vo/RdnsListVo.classbin0 -> 2442 bytes
-rw-r--r--framework/target/framework-1.0-SNAPSHOT.jarbin0 -> 50522 bytes
-rw-r--r--framework/target/maven-archiver/pom.properties5
-rw-r--r--framework/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst42
-rw-r--r--framework/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst43
-rw-r--r--framework/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst0
-rw-r--r--pom.xml97
91 files changed, 2297 insertions, 0 deletions
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..1c2fda5
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..b638fae
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="CompilerConfiguration">
+ <annotationProcessing>
+ <profile default="true" name="Default" enabled="true" />
+ <profile name="Maven default annotation processors profile" enabled="true">
+ <sourceOutputDir name="target/generated-sources/annotations" />
+ <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+ <outputRelativeToContentRoot value="true" />
+ <module name="framework" />
+ </profile>
+ </annotationProcessing>
+ </component>
+</project> \ No newline at end of file
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..81da308
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="DataSourceManagerImpl" format="xml" multifile-model="true">
+ <data-source source="LOCAL" name="@sgblog" uuid="78b513d7-6200-474b-882b-4f27eb165f11">
+ <driver-ref>mysql.8</driver-ref>
+ <synchronize>true</synchronize>
+ <jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
+ <jdbc-url>jdbc:mysql://192.168.107.20:3306/sg_blog</jdbc-url>
+ <working-dir>$ProjectFileDir$</working-dir>
+ </data-source>
+ <data-source source="LOCAL" name="windows" uuid="11d19adb-d127-4d66-9ce9-00489b039039">
+ <driver-ref>mysql.8</driver-ref>
+ <synchronize>true</synchronize>
+ <jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
+ <jdbc-url>jdbc:mysql://localhost:3306</jdbc-url>
+ <working-dir>$ProjectFileDir$</working-dir>
+ </data-source>
+ </component>
+</project> \ No newline at end of file
diff --git a/.idea/easyCodeTableSetting.xml b/.idea/easyCodeTableSetting.xml
new file mode 100644
index 0000000..577d514
--- /dev/null
+++ b/.idea/easyCodeTableSetting.xml
@@ -0,0 +1,520 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="EasyCodeTableSetting">
+ <option name="tableInfoMap">
+ <map>
+ <entry key="diplo.port">
+ <value>
+ <TableInfoDTO>
+ <option name="comment" value="端口表" />
+ <option name="fullColumn">
+ <list>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="id" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="端口号" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="portNum" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="扫描次数" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="scanCount" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ </list>
+ </option>
+ <option name="name" value="Port" />
+ <option name="preName" value="" />
+ <option name="saveModelName" value="framework" />
+ <option name="savePackageName" value="" />
+ <option name="savePath" value="./framework/src/main/java/org/example" />
+ <option name="templateGroupName" value="Default" />
+ </TableInfoDTO>
+ </value>
+ </entry>
+ <entry key="information_schema.COLUMN_PRIVILEGES">
+ <value>
+ <TableInfoDTO>
+ <option name="fullColumn">
+ <list>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="grantee" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="tableCatalog" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="tableSchema" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="tableName" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="columnName" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="privilegeType" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="isGrantable" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ </list>
+ </option>
+ <option name="name" value="ColumnPrivileges" />
+ <option name="preName" value="" />
+ <option name="saveModelName" value="" />
+ <option name="savePackageName" value="" />
+ <option name="savePath" value="" />
+ <option name="templateGroupName" value="" />
+ </TableInfoDTO>
+ </value>
+ </entry>
+ <entry key="mesa_portscan.ip">
+ <value>
+ <TableInfoDTO>
+ <option name="comment" value="扫描源IP表" />
+ <option name="fullColumn">
+ <list>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="id" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="IP" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="ip" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="rdns记录,扫描组织" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="rdns" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="IP所属国家" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="country" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="IP所属地区" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="region" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="IP所属城市" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="city" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="ASN号" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="asn" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ </list>
+ </option>
+ <option name="name" value="Ip" />
+ <option name="preName" value="" />
+ <option name="saveModelName" value="framework" />
+ <option name="savePackageName" value="" />
+ <option name="savePath" value="./framework/src/main/java" />
+ <option name="templateGroupName" value="MybatisPlus" />
+ </TableInfoDTO>
+ </value>
+ </entry>
+ <entry key="mesa_portscan.port">
+ <value>
+ <TableInfoDTO>
+ <option name="comment" value="端口表" />
+ <option name="fullColumn">
+ <list>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="id" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="端口号" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="portNum" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="协议" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="protocal" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ </list>
+ </option>
+ <option name="name" value="Port" />
+ <option name="preName" value="" />
+ <option name="saveModelName" value="framework" />
+ <option name="savePackageName" value="" />
+ <option name="savePath" value="./framework/src/main/java" />
+ <option name="templateGroupName" value="MybatisPlus" />
+ </TableInfoDTO>
+ </value>
+ </entry>
+ <entry key="mesa_portscan.portscan">
+ <value>
+ <TableInfoDTO>
+ <option name="comment" value="端口扫描记录表" />
+ <option name="fullColumn">
+ <list>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="id" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="timestamp" />
+ <option name="type" value="java.util.Date" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="扫描源IP" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="sip" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="扫描源端口" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="sport" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="扫描目的IP" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="dip" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="扫描目的端口" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="dport" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ </list>
+ </option>
+ <option name="name" value="Portscan" />
+ <option name="preName" value="" />
+ <option name="saveModelName" value="framework" />
+ <option name="savePackageName" value="" />
+ <option name="savePath" value="./framework/src/main/java" />
+ <option name="templateGroupName" value="MybatisPlus" />
+ </TableInfoDTO>
+ </value>
+ </entry>
+ <entry key="mesa_portscan.rdns">
+ <value>
+ <TableInfoDTO>
+ <option name="comment" value="扫描组织表" />
+ <option name="fullColumn">
+ <list>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="id" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="rdns记录,扫描组织" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="rdns" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="注册者" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="registrar" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="国家" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="country" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="注册时间" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="creationDate" />
+ <option name="type" value="java.util.Date" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="到期时间" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="expirationDate" />
+ <option name="type" value="java.util.Date" />
+ </ColumnInfoDTO>
+ </list>
+ </option>
+ <option name="name" value="Rdns" />
+ <option name="preName" value="" />
+ <option name="saveModelName" value="framework" />
+ <option name="savePackageName" value="" />
+ <option name="savePath" value="./framework/src/main/java" />
+ <option name="templateGroupName" value="MybatisPlus" />
+ </TableInfoDTO>
+ </value>
+ </entry>
+ <entry key="sg_blog.sg_article">
+ <value>
+ <TableInfoDTO>
+ <option name="comment" value="文章表" />
+ <option name="fullColumn">
+ <list>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="id" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="标题" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="title" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="文章内容" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="content" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="文章摘要" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="summary" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="所属分类id" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="categoryId" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="缩略图" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="thumbnail" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="是否置顶(0否,1是)" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="isTop" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="状态(0已发布,1草稿)" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="status" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="访问量" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="viewCount" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="是否允许评论 1是,0否" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="isComment" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="createBy" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="createTime" />
+ <option name="type" value="java.util.Date" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="updateBy" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="updateTime" />
+ <option name="type" value="java.util.Date" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="删除标志(0代表未删除,1代表已删除)" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="delFlag" />
+ <option name="type" value="java.lang.Integer" />
+ </ColumnInfoDTO>
+ </list>
+ </option>
+ <option name="name" value="SgArticle" />
+ <option name="preName" value="sg_" />
+ <option name="saveModelName" value="framework" />
+ <option name="savePackageName" value="" />
+ <option name="savePath" value="./framework/src/main/java" />
+ <option name="templateGroupName" value="Default" />
+ </TableInfoDTO>
+ </value>
+ </entry>
+ <entry key="sg_blog.sg_category">
+ <value>
+ <TableInfoDTO>
+ <option name="comment" value="分类表" />
+ <option name="fullColumn">
+ <list>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="id" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="分类名" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="name" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="父分类id,如果没有父分类为-1" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="pid" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="描述" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="description" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="状态0:正常,1禁用" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="status" />
+ <option name="type" value="java.lang.String" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="createBy" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="createTime" />
+ <option name="type" value="java.util.Date" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="updateBy" />
+ <option name="type" value="java.lang.Long" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="updateTime" />
+ <option name="type" value="java.util.Date" />
+ </ColumnInfoDTO>
+ <ColumnInfoDTO>
+ <option name="comment" value="删除标志(0代表未删除,1代表已删除)" />
+ <option name="custom" value="false" />
+ <option name="ext" value="{}" />
+ <option name="name" value="delFlag" />
+ <option name="type" value="java.lang.Integer" />
+ </ColumnInfoDTO>
+ </list>
+ </option>
+ <option name="name" value="SgCategory" />
+ <option name="preName" value="sg_" />
+ <option name="saveModelName" value="framework" />
+ <option name="savePackageName" value="" />
+ <option name="savePath" value="./framework/src/main/java" />
+ <option name="templateGroupName" value="MybatisPlus" />
+ </TableInfoDTO>
+ </value>
+ </entry>
+ </map>
+ </option>
+ </component>
+</project> \ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..0442c3a
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="Encoding">
+ <file url="file://$PROJECT_DIR$/framework/src/main/java" charset="UTF-8" />
+ <file url="file://$PROJECT_DIR$/framework/src/main/resources" charset="UTF-8" />
+ <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
+ <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
+ </component>
+</project> \ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..3016d79
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="RemoteRepositoriesConfiguration">
+ <remote-repository>
+ <option name="id" value="central" />
+ <option name="name" value="Maven Central repository" />
+ <option name="url" value="https://repo1.maven.org/maven2" />
+ </remote-repository>
+ <remote-repository>
+ <option name="id" value="jboss.community" />
+ <option name="name" value="JBoss Community repository" />
+ <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+ </remote-repository>
+ <remote-repository>
+ <option name="id" value="central" />
+ <option name="name" value="Central Repository" />
+ <option name="url" value="https://maven.aliyun.com/repository/public" />
+ </remote-repository>
+ </component>
+</project> \ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..0c41917
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ExternalStorageConfigurationManager" enabled="true" />
+ <component name="MavenProjectsManager">
+ <option name="originalFiles">
+ <list>
+ <option value="$PROJECT_DIR$/pom.xml" />
+ </list>
+ </option>
+ </component>
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+ <output url="file://$PROJECT_DIR$/out" />
+ </component>
+</project> \ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..6d50cd4
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="Palette2">
+ <group name="Swing">
+ <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+ </item>
+ <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+ </item>
+ <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
+ <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+ <initial-values>
+ <property name="text" value="Button" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="RadioButton" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="CheckBox" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="Label" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+ <preferred-size width="200" height="200" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+ <preferred-size width="200" height="200" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+ </item>
+ <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+ <preferred-size width="-1" height="20" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+ </item>
+ <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+ </item>
+ </group>
+ </component>
+</project> \ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..2e3f692
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="VcsDirectoryMappings">
+ <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+ </component>
+</project> \ No newline at end of file
diff --git a/framework/pom.xml b/framework/pom.xml
new file mode 100644
index 0000000..5f6388a
--- /dev/null
+++ b/framework/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>MESA-portscan-detection</artifactId>
+ <groupId>org.example</groupId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>framework</artifactId>
+
+ <properties>
+ <maven.compiler.source>8</maven.compiler.source>
+ <maven.compiler.target>8</maven.compiler.target>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ </dependency>
+ <!--lombk-->
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <!--junit-->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <!--SpringSecurity启动器-->
+<!-- <dependency>-->
+<!-- <groupId>org.springframework.boot</groupId>-->
+<!-- <artifactId>spring-boot-starter-security</artifactId>-->
+<!-- </dependency>-->
+ <!--redis依赖-->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-redis</artifactId>
+ </dependency>
+ <!--fastjson依赖-->
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>fastjson</artifactId>
+ </dependency>
+ <!--jwt依赖-->
+ <dependency>
+ <groupId>io.jsonwebtoken</groupId>
+ <artifactId>jjwt</artifactId>
+ </dependency>
+ <!--mybatisPlus依赖-->
+ <dependency>
+ <groupId>com.github.yulichang</groupId>
+ <artifactId>mybatis-plus-join</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.baomidou</groupId>
+ <artifactId>mybatis-plus-boot-starter</artifactId>
+ </dependency>
+ <!--mysql数据库驱动-->
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ </dependency>
+
+ <!--阿里云OSS-->
+ <dependency>
+ <groupId>com.aliyun.oss</groupId>
+ <artifactId>aliyun-sdk-oss</artifactId>
+ </dependency>
+
+ <!--AOP-->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-aop</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>easyexcel</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger-ui</artifactId>
+ </dependency>
+
+ </dependencies>
+
+</project>
diff --git a/framework/src/main/java/org/example/ResponseResult.java b/framework/src/main/java/org/example/ResponseResult.java
new file mode 100644
index 0000000..c735c82
--- /dev/null
+++ b/framework/src/main/java/org/example/ResponseResult.java
@@ -0,0 +1,122 @@
+package org.example;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import org.example.enums.AppHttpCodeEnum;
+
+import java.io.Serializable;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ResponseResult<T> implements Serializable {
+ private Integer code;
+ private String msg;
+ private T data;
+
+ public ResponseResult() {
+ this.code = AppHttpCodeEnum.SUCCESS.getCode();
+ this.msg = AppHttpCodeEnum.SUCCESS.getMsg();
+ }
+
+ public ResponseResult(Integer code, T data) {
+ this.code = code;
+ this.data = data;
+ }
+
+ public ResponseResult(Integer code, String msg, T data) {
+ this.code = code;
+ this.msg = msg;
+ this.data = data;
+ }
+
+ public ResponseResult(Integer code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ public static ResponseResult errorResult(int code, String msg) {
+ ResponseResult result = new ResponseResult();
+ return result.error(code, msg);
+ }
+ public static ResponseResult okResult() {
+ ResponseResult result = new ResponseResult();
+ return result;
+ }
+ public static ResponseResult okResult(int code, String msg) {
+ ResponseResult result = new ResponseResult();
+ return result.ok(code, null, msg);
+ }
+
+ public static ResponseResult okResult(Object data) {
+ ResponseResult result = setAppHttpCodeEnum(AppHttpCodeEnum.SUCCESS, AppHttpCodeEnum.SUCCESS.getMsg());
+ if(data!=null) {
+ result.setData(data);
+ }
+ return result;
+ }
+
+ public static ResponseResult errorResult(AppHttpCodeEnum enums){
+ return setAppHttpCodeEnum(enums,enums.getMsg());
+ }
+
+ public static ResponseResult errorResult(AppHttpCodeEnum enums, String msg){
+ return setAppHttpCodeEnum(enums,msg);
+ }
+
+ public static ResponseResult setAppHttpCodeEnum(AppHttpCodeEnum enums){
+ return okResult(enums.getCode(),enums.getMsg());
+ }
+
+ private static ResponseResult setAppHttpCodeEnum(AppHttpCodeEnum enums, String msg){
+ return okResult(enums.getCode(),msg);
+ }
+
+ public ResponseResult<?> error(Integer code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ return this;
+ }
+
+ public ResponseResult<?> ok(Integer code, T data) {
+ this.code = code;
+ this.data = data;
+ return this;
+ }
+
+ public ResponseResult<?> ok(Integer code, T data, String msg) {
+ this.code = code;
+ this.data = data;
+ this.msg = msg;
+ return this;
+ }
+
+ public ResponseResult<?> ok(T data) {
+ this.data = data;
+ return this;
+ }
+
+ public Integer getCode() {
+ return code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public T getData() {
+ return data;
+ }
+
+ public void setData(T data) {
+ this.data = data;
+ }
+
+
+
+}
diff --git a/framework/src/main/java/org/example/WebApplication.java b/framework/src/main/java/org/example/WebApplication.java
new file mode 100644
index 0000000..3de4a8e
--- /dev/null
+++ b/framework/src/main/java/org/example/WebApplication.java
@@ -0,0 +1,15 @@
+package org.example;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@MapperScan("org.example.mapper")
+@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
+public class WebApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(WebApplication.class,args);
+ }
+}
diff --git a/framework/src/main/java/org/example/config/WebConfig.java b/framework/src/main/java/org/example/config/WebConfig.java
new file mode 100644
index 0000000..96ea818
--- /dev/null
+++ b/framework/src/main/java/org/example/config/WebConfig.java
@@ -0,0 +1,26 @@
+package org.example.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+ @Override
+ public void addCorsMappings(CorsRegistry registry) {
+ // 设置允许跨域的路径
+ registry.addMapping("/**")
+ // 设置允许跨域请求的域名
+ .allowedOriginPatterns("*")
+ // 是否允许cookie
+ .allowCredentials(true)
+ // 设置允许的请求方式
+ .allowedMethods("GET", "POST", "DELETE", "PUT")
+ // 设置允许的header属性
+ .allowedHeaders("*")
+ // 跨域允许时间
+ .maxAge(3600);
+ }
+
+}
diff --git a/framework/src/main/java/org/example/controller/IpController.java b/framework/src/main/java/org/example/controller/IpController.java
new file mode 100644
index 0000000..e5e0b7e
--- /dev/null
+++ b/framework/src/main/java/org/example/controller/IpController.java
@@ -0,0 +1,35 @@
+package org.example.controller;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.example.ResponseResult;
+import org.example.entity.Ip;
+import org.example.service.IpService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 扫描源IP表(Ip)表控制层
+ *
+ * @author makejava
+ * @since 2023-04-19 17:19:10
+ */
+@RestController
+@RequestMapping("/ip")
+public class IpController {
+
+ @Autowired
+ private IpService ipService;
+ @GetMapping("/getIpDetail/{id}")
+ public ResponseResult getIpDetail(@PathVariable("id") Long id){
+
+ return ipService.getIpDetail(id);
+ }
+}
+
diff --git a/framework/src/main/java/org/example/controller/PortController.java b/framework/src/main/java/org/example/controller/PortController.java
new file mode 100644
index 0000000..68292d7
--- /dev/null
+++ b/framework/src/main/java/org/example/controller/PortController.java
@@ -0,0 +1,26 @@
+package org.example.controller;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.example.entity.Port;
+import org.example.service.PortService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 端口表(Port)表控制层
+ *
+ * @author makejava
+ * @since 2023-04-21 09:44:03
+ */
+@RestController
+@RequestMapping("port")
+public class PortController{
+
+}
+
diff --git a/framework/src/main/java/org/example/controller/PortscanController.java b/framework/src/main/java/org/example/controller/PortscanController.java
new file mode 100644
index 0000000..c5d5404
--- /dev/null
+++ b/framework/src/main/java/org/example/controller/PortscanController.java
@@ -0,0 +1,54 @@
+package org.example.controller;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.example.ResponseResult;
+import org.example.entity.Portscan;
+import org.example.mapper.PortscanMapper;
+import org.example.service.PortscanService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 端口扫描记录表(Portscan)表控制层
+ *
+ * @author makejava
+ * @since 2023-04-19 17:17:44
+ */
+@RestController
+@RequestMapping("/portscan")
+public class PortscanController {
+
+ @Autowired
+ private PortscanService portscanService;
+
+ @GetMapping("/getTopPorts")
+ public ResponseResult getTopPorts(){
+ return portscanService.getTopPorts();
+ }
+
+ @GetMapping("/getTopCountries")
+ public ResponseResult getTopCountries(){
+ return portscanService.getTopCountries();
+ }
+
+ @GetMapping("/getIpList")
+ public ResponseResult getIpList(){
+
+ return portscanService.getIpList();
+ }
+
+ @GetMapping("/getOrganizationList")
+ public ResponseResult getOrganizationList(){
+ return portscanService.getOrganizationList();
+ }
+
+
+}
+
diff --git a/framework/src/main/java/org/example/controller/RdnsController.java b/framework/src/main/java/org/example/controller/RdnsController.java
new file mode 100644
index 0000000..bd8d248
--- /dev/null
+++ b/framework/src/main/java/org/example/controller/RdnsController.java
@@ -0,0 +1,33 @@
+package org.example.controller;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.example.ResponseResult;
+import org.example.entity.Rdns;
+import org.example.service.RdnsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 扫描组织表(Rdns)表控制层
+ *
+ * @author makejava
+ * @since 2023-04-21 09:35:52
+ */
+@RestController
+@RequestMapping("org")
+public class RdnsController{
+ @Autowired
+ private RdnsService rdnsService;
+ @GetMapping("/getOrgDetail/{id}")
+ public ResponseResult getOrgDetail(@PathVariable("id") Long id){
+ return rdnsService.getOrgDetail(id);
+ }
+}
+
diff --git a/framework/src/main/java/org/example/entity/Ip.java b/framework/src/main/java/org/example/entity/Ip.java
new file mode 100644
index 0000000..fec002a
--- /dev/null
+++ b/framework/src/main/java/org/example/entity/Ip.java
@@ -0,0 +1,40 @@
+package org.example.entity;
+
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+/**
+ * 扫描源IP表(Ip)表实体类
+ *
+ * @author makejava
+ * @since 2023-04-19 17:19:12
+ */
+@SuppressWarnings("serial")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("ip")
+public class Ip {
+ @TableId
+ private Long id;
+
+ //IP
+ private String ip;
+ //rdns记录,扫描组织
+ private String rdns;
+ //IP所属国家
+ private String country;
+ //IP所属地区
+ private String region;
+ //IP所属城市
+ private String city;
+ //ASN号
+ private String asn;
+
+
+
+}
diff --git a/framework/src/main/java/org/example/entity/Port.java b/framework/src/main/java/org/example/entity/Port.java
new file mode 100644
index 0000000..7474c21
--- /dev/null
+++ b/framework/src/main/java/org/example/entity/Port.java
@@ -0,0 +1,32 @@
+package org.example.entity;
+
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+/**
+ * 端口表(Port)表实体类
+ *
+ * @author makejava
+ * @since 2023-04-21 09:44:04
+ */
+@SuppressWarnings("serial")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("port")
+public class Port {
+ @TableId
+ private Long id;
+
+ //端口号
+ private Long portNum;
+ //协议
+ private String protocol;
+
+
+
+}
diff --git a/framework/src/main/java/org/example/entity/Portscan.java b/framework/src/main/java/org/example/entity/Portscan.java
new file mode 100644
index 0000000..b6520c4
--- /dev/null
+++ b/framework/src/main/java/org/example/entity/Portscan.java
@@ -0,0 +1,39 @@
+package org.example.entity;
+
+import java.util.Date;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+/**
+ * 端口扫描记录表(Portscan)表实体类
+ *
+ * @author makejava
+ * @since 2023-04-19 17:17:47
+ */
+@SuppressWarnings("serial")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("portscan")
+public class Portscan {
+ @TableId
+ private Long id;
+
+
+ private Date timestamp;
+ //扫描源IP
+ private String sip;
+ //扫描源端口
+ private Long sport;
+ //扫描目的IP
+ private String dip;
+ //扫描目的端口
+ private Long dport;
+
+
+
+}
diff --git a/framework/src/main/java/org/example/entity/Rdns.java b/framework/src/main/java/org/example/entity/Rdns.java
new file mode 100644
index 0000000..b577bb9
--- /dev/null
+++ b/framework/src/main/java/org/example/entity/Rdns.java
@@ -0,0 +1,39 @@
+package org.example.entity;
+
+import java.util.Date;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+/**
+ * 扫描组织表(Rdns)表实体类
+ *
+ * @author makejava
+ * @since 2023-04-21 09:35:54
+ */
+@SuppressWarnings("serial")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("rdns")
+public class Rdns {
+ @TableId
+ private Long id;
+
+ //rdns记录,扫描组织
+ private String rdns;
+ //注册者
+ private String registrar;
+ //国家
+ private String country;
+ //注册时间
+ private Date creationDate;
+ //到期时间
+ private Date expirationDate;
+
+
+
+}
diff --git a/framework/src/main/java/org/example/enums/AppHttpCodeEnum.java b/framework/src/main/java/org/example/enums/AppHttpCodeEnum.java
new file mode 100644
index 0000000..04b7c9a
--- /dev/null
+++ b/framework/src/main/java/org/example/enums/AppHttpCodeEnum.java
@@ -0,0 +1,29 @@
+package org.example.enums;
+
+public enum AppHttpCodeEnum {
+ // 成功
+ SUCCESS(200,"操作成功"),
+ // 登录
+ NEED_LOGIN(401,"需要登录后操作"),
+ NO_OPERATOR_AUTH(403,"无权限操作"),
+ SYSTEM_ERROR(500,"出现错误"),
+ USERNAME_EXIST(501,"用户名已存在"),
+ PHONENUMBER_EXIST(502,"手机号已存在"), EMAIL_EXIST(503, "邮箱已存在"),
+ REQUIRE_USERNAME(504, "必需填写用户名"),
+ LOGIN_ERROR(505,"用户名或密码错误");
+ int code;
+ String msg;
+
+ AppHttpCodeEnum(int code, String errorMessage){
+ this.code = code;
+ this.msg = errorMessage;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+}
diff --git a/framework/src/main/java/org/example/mapper/IpMapper.java b/framework/src/main/java/org/example/mapper/IpMapper.java
new file mode 100644
index 0000000..8afaa8d
--- /dev/null
+++ b/framework/src/main/java/org/example/mapper/IpMapper.java
@@ -0,0 +1,18 @@
+package org.example.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.example.entity.Ip;
+
+
+/**
+ * 扫描源IP表(Ip)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-04-19 17:19:13
+ */
+@Mapper
+public interface IpMapper extends MPJBaseMapper<Ip> {
+
+}
diff --git a/framework/src/main/java/org/example/mapper/PortMapper.java b/framework/src/main/java/org/example/mapper/PortMapper.java
new file mode 100644
index 0000000..921e387
--- /dev/null
+++ b/framework/src/main/java/org/example/mapper/PortMapper.java
@@ -0,0 +1,15 @@
+package org.example.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.example.entity.Port;
+
+
+/**
+ * 端口表(Port)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-04-21 09:44:05
+ */
+public interface PortMapper extends BaseMapper<Port> {
+
+}
diff --git a/framework/src/main/java/org/example/mapper/PortscanMapper.java b/framework/src/main/java/org/example/mapper/PortscanMapper.java
new file mode 100644
index 0000000..8d45956
--- /dev/null
+++ b/framework/src/main/java/org/example/mapper/PortscanMapper.java
@@ -0,0 +1,19 @@
+package org.example.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.example.entity.Portscan;
+
+
+
+/**
+ * 端口扫描记录表(Portscan)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-04-19 17:17:49
+ */
+@Mapper
+public interface PortscanMapper extends MPJBaseMapper<Portscan> {
+
+}
diff --git a/framework/src/main/java/org/example/mapper/RdnsMapper.java b/framework/src/main/java/org/example/mapper/RdnsMapper.java
new file mode 100644
index 0000000..ce47936
--- /dev/null
+++ b/framework/src/main/java/org/example/mapper/RdnsMapper.java
@@ -0,0 +1,15 @@
+package org.example.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.example.entity.Rdns;
+
+
+/**
+ * 扫描组织表(Rdns)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-04-21 09:35:55
+ */
+public interface RdnsMapper extends BaseMapper<Rdns> {
+
+}
diff --git a/framework/src/main/java/org/example/service/IpService.java b/framework/src/main/java/org/example/service/IpService.java
new file mode 100644
index 0000000..b0ba8bf
--- /dev/null
+++ b/framework/src/main/java/org/example/service/IpService.java
@@ -0,0 +1,18 @@
+package org.example.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.example.ResponseResult;
+import org.example.entity.Ip;
+
+
+/**
+ * 扫描源IP表(Ip)表服务接口
+ *
+ * @author makejava
+ * @since 2023-04-19 17:19:13
+ */
+public interface IpService extends IService<Ip> {
+ ResponseResult getIpDetail(Long id);
+
+// ResponseResult getIpList();
+}
diff --git a/framework/src/main/java/org/example/service/PortService.java b/framework/src/main/java/org/example/service/PortService.java
new file mode 100644
index 0000000..b68845c
--- /dev/null
+++ b/framework/src/main/java/org/example/service/PortService.java
@@ -0,0 +1,15 @@
+package org.example.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.example.entity.Port;
+
+
+/**
+ * 端口表(Port)表服务接口
+ *
+ * @author makejava
+ * @since 2023-04-21 09:44:04
+ */
+public interface PortService extends IService<Port> {
+
+}
diff --git a/framework/src/main/java/org/example/service/PortscanService.java b/framework/src/main/java/org/example/service/PortscanService.java
new file mode 100644
index 0000000..110b436
--- /dev/null
+++ b/framework/src/main/java/org/example/service/PortscanService.java
@@ -0,0 +1,23 @@
+package org.example.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.example.ResponseResult;
+import org.example.entity.Portscan;
+
+
+/**
+ * 端口扫描记录表(Portscan)表服务接口
+ *
+ * @author makejava
+ * @since 2023-04-19 17:17:49
+ */
+public interface PortscanService extends IService<Portscan> {
+
+ ResponseResult getIpList();
+
+ ResponseResult getTopPorts();
+
+ ResponseResult getTopCountries();
+
+ ResponseResult getOrganizationList();
+}
diff --git a/framework/src/main/java/org/example/service/RdnsService.java b/framework/src/main/java/org/example/service/RdnsService.java
new file mode 100644
index 0000000..4cb88bc
--- /dev/null
+++ b/framework/src/main/java/org/example/service/RdnsService.java
@@ -0,0 +1,17 @@
+package org.example.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.example.ResponseResult;
+import org.example.entity.Rdns;
+
+
+/**
+ * 扫描组织表(Rdns)表服务接口
+ *
+ * @author makejava
+ * @since 2023-04-21 09:35:54
+ */
+public interface RdnsService extends IService<Rdns> {
+
+ ResponseResult getOrgDetail(Long id);
+}
diff --git a/framework/src/main/java/org/example/service/impl/IpServiceImpl.java b/framework/src/main/java/org/example/service/impl/IpServiceImpl.java
new file mode 100644
index 0000000..810dea1
--- /dev/null
+++ b/framework/src/main/java/org/example/service/impl/IpServiceImpl.java
@@ -0,0 +1,91 @@
+package org.example.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.example.ResponseResult;
+import org.example.entity.Ip;
+import org.example.entity.Port;
+import org.example.entity.Portscan;
+import org.example.entity.Rdns;
+import org.example.mapper.IpMapper;
+import org.example.mapper.PortscanMapper;
+import org.example.service.IpService;
+import org.example.service.PortService;
+import org.example.service.PortscanService;
+import org.example.service.RdnsService;
+import org.example.utils.BeanCopyUtils;
+import org.example.vo.IpDetail;
+import org.example.vo.IpDetailPort;
+import org.example.vo.IpDetailRdns;
+import org.example.vo.IpListVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 扫描源IP表(Ip)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-04-19 17:19:13
+ */
+@Service("ipService")
+public class IpServiceImpl extends ServiceImpl<IpMapper, Ip> implements IpService {
+
+ @Autowired
+ private RdnsService rdnsService;
+ @Autowired
+ private PortscanService portscanService;
+ @Autowired
+ private PortService portService;
+ @Override
+ public ResponseResult getIpDetail(Long id) {
+ IpDetail ipDetail = new IpDetail();
+ //根据id查询ip表中ip的详细信息
+ Ip ip = getById(id);
+ ipDetail.setId(ip.getId());
+ ipDetail.setIp(ip.getIp());
+ ipDetail.setCountry(ip.getCountry());
+ ipDetail.setRegion(ip.getRegion());
+ ipDetail.setCity(ip.getCity());
+ ipDetail.setAsn(ip.getAsn());
+ //从rdns表补充ip的rdns信息
+ LambdaQueryWrapper<Rdns> rdnsWrapper= new LambdaQueryWrapper<>();
+ rdnsWrapper.eq(Rdns::getRdns,ip.getRdns());
+ Rdns rdns = rdnsService.getOne(rdnsWrapper);
+ IpDetailRdns ipDetailRdns = BeanCopyUtils.copyBean(rdns,IpDetailRdns.class);
+ ipDetail.setIpDetailRdns(ipDetailRdns);
+ //从portscan表补充ip的port信息
+ LambdaQueryWrapper<Portscan> portscanWrapper = new LambdaQueryWrapper<>();
+ portscanWrapper.eq(Portscan::getSip,ip.getIp());
+ List<Portscan> portscanList = portscanService.list(portscanWrapper);
+ //获取port列表
+ Set<Long> dports = portscanList.stream()
+ .map(portscan -> portscan.getDport())
+ .collect(Collectors.toSet());
+ //获取port列表
+ LambdaQueryWrapper<Port> portWrapper = new LambdaQueryWrapper<>();
+ portWrapper.in(Port::getPortNum,dports);
+ List<Port> portList = portService.list(portWrapper);
+ List<IpDetailPort> ipDetailPortList = BeanCopyUtils.copyBeanList(portList,IpDetailPort.class);
+ ipDetail.setIpDetailPortList(ipDetailPortList);
+
+ //补充ip第一次和最后一次出现时间
+ portscanList.sort((t1,t2) ->t2.getTimestamp().compareTo(t1.getTimestamp()));
+ //System.out.println(portscanList);
+ if(portscanList.size()<2){
+ ipDetail.setFirstSeen(portscanList.get(0).getTimestamp());
+ ipDetail.setLastSeen(portscanList.get(0).getTimestamp());
+ }else{
+ ipDetail.setFirstSeen(portscanList.get(portscanList.size()-1).getTimestamp());
+ ipDetail.setLastSeen(portscanList.get(0).getTimestamp());
+ }
+ System.out.println(ipDetail);
+ return ResponseResult.okResult(ipDetail);
+ }
+
+}
diff --git a/framework/src/main/java/org/example/service/impl/PortServiceImpl.java b/framework/src/main/java/org/example/service/impl/PortServiceImpl.java
new file mode 100644
index 0000000..c8f2490
--- /dev/null
+++ b/framework/src/main/java/org/example/service/impl/PortServiceImpl.java
@@ -0,0 +1,18 @@
+package org.example.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.example.entity.Port;
+import org.example.mapper.PortMapper;
+import org.example.service.PortService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 端口表(Port)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-04-21 09:44:04
+ */
+@Service("portService")
+public class PortServiceImpl extends ServiceImpl<PortMapper, Port> implements PortService {
+
+}
diff --git a/framework/src/main/java/org/example/service/impl/PortscanServiceImpl.java b/framework/src/main/java/org/example/service/impl/PortscanServiceImpl.java
new file mode 100644
index 0000000..9fd67eb
--- /dev/null
+++ b/framework/src/main/java/org/example/service/impl/PortscanServiceImpl.java
@@ -0,0 +1,163 @@
+package org.example.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.example.ResponseResult;
+import org.example.entity.Ip;
+import org.example.entity.Port;
+import org.example.entity.Portscan;
+import org.example.entity.Rdns;
+import org.example.mapper.PortscanMapper;
+import org.example.service.PortscanService;
+import org.example.service.RdnsService;
+import org.example.utils.BeanCopyUtils;
+import org.example.vo.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 端口扫描记录表(Portscan)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-04-19 17:17:49
+ */
+@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);
+ }
+
+ @Override
+ public ResponseResult getTopPorts() {
+ //联表查询,查询portscan中dport在port表中对应的id
+ MPJLambdaWrapper<Portscan> wrapper = new MPJLambdaWrapper<Portscan>()
+ .selectAs(Portscan::getDport, PortListVo::getPortNum)
+ .select(Port::getId)
+ .leftJoin(Port.class,Port::getPortNum,Portscan::getDport);
+ List<PortListVo> portListVoList = portscanMapper.selectJoinList(PortListVo.class,wrapper);
+ //统计portListVoList中每个port出现的次数
+ HashMap<Long,Long> portNum = new HashMap<>();
+ for (PortListVo portListVo : portListVoList) {
+ if(!portNum.containsKey(portListVo.getPortNum())){
+ portNum.put(portListVo.getPortNum(),1L);
+ }else{
+ portNum.replace(portListVo.getPortNum(),portNum.get(portListVo.getPortNum())+1);
+ }
+ }
+ //将port出现的次数赋值给num
+ for (PortListVo portListVo : portListVoList) {
+ portListVo.setNum(portNum.get(portListVo.getPortNum()));
+ }
+ //list去重
+ List<PortListVo> finalPortList = portListVoList.stream().distinct().collect(Collectors.toList());
+ //根据num排序
+ finalPortList.sort(Comparator.comparing(PortListVo::getNum).reversed());
+ //封装结果返回
+ PageVo pageVo = new PageVo(finalPortList, finalPortList.size());
+ return ResponseResult.okResult(pageVo);
+ }
+
+ @Override
+ public ResponseResult getTopCountries() {
+ //portscan联合ip表,查询所有IP对应的国家
+ MPJLambdaWrapper<Portscan> wrapper = new MPJLambdaWrapper<Portscan>()
+ //.select(Portscan::getSip)
+ .selectAs(Ip::getCountry, CountryListVo::getCountry)
+ .leftJoin(Ip.class,Ip::getIp,Portscan::getSip);
+ List<CountryListVo> countryListVos = portscanMapper.selectJoinList(CountryListVo.class,wrapper);
+ //统计countryListVos中每个国家出现的次数
+ HashMap<String,Long> countryNum = new HashMap<>();
+ for (CountryListVo countryListVo : countryListVos) {
+ if(!countryNum.containsKey(countryListVo.getCountry())){
+ countryNum.put(countryListVo.getCountry(),1L);
+ }else{
+ countryNum.replace(countryListVo.getCountry(),countryNum.get(countryListVo.getCountry())+1);
+ }
+ }
+ //将country出现的次数赋值给num
+ for (CountryListVo countryListVo : countryListVos) {
+ countryListVo.setNum(countryNum.get(countryListVo.getCountry()));
+ }
+ //list去重
+ List<CountryListVo> finalCountryList = countryListVos.stream().distinct().collect(Collectors.toList());
+ //根据num排序
+ finalCountryList.sort(Comparator.comparing(CountryListVo::getNum).reversed());
+ //截取前五个对象
+ //countryListVos.subList(0,5);
+ //封装返回
+ PageVo pageVo = new PageVo(finalCountryList,finalCountryList.size());
+ return ResponseResult.okResult(pageVo);
+ }
+
+ @Override
+ public ResponseResult getOrganizationList() {
+ //portscan表联查ip表获取rdns列表
+ MPJLambdaWrapper<Portscan> wrapper = new MPJLambdaWrapper<Portscan>()
+ .select(Rdns::getId)
+ .select(Ip::getRdns)
+ .leftJoin(Ip.class,Ip::getIp,Portscan::getSip)
+ .leftJoin(Rdns.class,Rdns::getRdns,Ip::getRdns);
+ List<RdnsListVo> rdnsListVoList = portscanMapper.selectJoinList(RdnsListVo.class,wrapper);
+
+ //去掉list中空的对象
+ rdnsListVoList.removeAll(Collections.singleton(null));
+ //统计每个rdns出现的次数
+ HashMap<String,Long> rdnsNum = new HashMap<>();
+ for (RdnsListVo rdnsListVo : rdnsListVoList) {
+ //System.out.println(rdnsListVo);
+ if(!rdnsNum.containsKey(rdnsListVo.getRdns())){
+ rdnsNum.put(rdnsListVo.getRdns(),1L);
+ }else{
+ rdnsNum.replace(rdnsListVo.getRdns(),rdnsNum.get(rdnsListVo.getRdns())+1);
+ }
+ }
+ //将country出现的次数赋值给num
+ for (RdnsListVo rdnsListVo : rdnsListVoList) {
+ rdnsListVo.setNum(rdnsNum.get(rdnsListVo.getRdns()));
+ }
+ //list去重
+ List<RdnsListVo> finalRdnsList = rdnsListVoList.stream().distinct().collect(Collectors.toList());
+ //根据num排序
+ finalRdnsList.sort(Comparator.comparing(RdnsListVo::getNum).reversed());
+ //截取前五个对象
+ //countryListVos.subList(0,5);
+ //封装返回
+ PageVo pageVo = new PageVo(finalRdnsList,finalRdnsList.size());
+ return ResponseResult.okResult(pageVo);
+ }
+}
diff --git a/framework/src/main/java/org/example/service/impl/RdnsServiceImpl.java b/framework/src/main/java/org/example/service/impl/RdnsServiceImpl.java
new file mode 100644
index 0000000..142d479
--- /dev/null
+++ b/framework/src/main/java/org/example/service/impl/RdnsServiceImpl.java
@@ -0,0 +1,77 @@
+package org.example.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.example.ResponseResult;
+import org.example.entity.Ip;
+import org.example.entity.Rdns;
+import org.example.mapper.RdnsMapper;
+import org.example.service.IpService;
+import org.example.service.RdnsService;
+import org.example.utils.BeanCopyUtils;
+import org.example.vo.IpDetail;
+import org.example.vo.IpDetailPort;
+import org.example.vo.RdnsDetail;
+import org.example.vo.RdnsDetailIp;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 扫描组织表(Rdns)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-04-21 09:35:54
+ */
+@Service("rdnsService")
+public class RdnsServiceImpl extends ServiceImpl<RdnsMapper, Rdns> implements RdnsService {
+
+ @Autowired
+ private IpService ipService;
+ @Override
+ public ResponseResult getOrgDetail(Long id) {
+ RdnsDetail rdnsDetail = new RdnsDetail();
+ Rdns rdns = getById(id);
+ rdnsDetail.setRdns(rdns.getRdns());
+ rdnsDetail.setCountry(rdns.getCountry());
+ //根据rdns查询ip
+ LambdaQueryWrapper<Ip> ipLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ ipLambdaQueryWrapper.eq(Ip::getRdns,rdnsDetail.getRdns());
+ List<Ip> ipList = ipService.list(ipLambdaQueryWrapper);
+ List<RdnsDetailIp> rdnsDetailIpList = BeanCopyUtils.copyBeanList(ipList,RdnsDetailIp.class);
+ rdnsDetail.setRdnsDetailIpList(rdnsDetailIpList);
+ //根据ip.id获取每个IP的信息补充rdns的端口列表
+ for (RdnsDetailIp rdnsDetailIp : rdnsDetail.getRdnsDetailIpList()) {
+ ResponseResult IpDetailResult = ipService.getIpDetail(rdnsDetailIp.getId());
+ IpDetail ipDetail = (IpDetail) IpDetailResult.getData();
+ //添加端口列表
+ if(rdnsDetail.getIpDetailPortList()!=null){
+ for (IpDetailPort ipDetailPort : ipDetail.getIpDetailPortList()) {
+ //System.out.println(ipDetailPort);
+ rdnsDetail.getIpDetailPortList().add(ipDetailPort);
+ }
+ }else{
+ List<IpDetailPort> ipDetailPortList = ipDetail.getIpDetailPortList();
+ rdnsDetail.setIpDetailPortList(ipDetailPortList);
+ }
+ //添加首次出现时间
+ if(rdnsDetail.getFirstSeen()!=null){
+ if(rdnsDetail.getFirstSeen().after(ipDetail.getFirstSeen())){
+ rdnsDetail.setFirstSeen(ipDetail.getFirstSeen());
+ }
+ }else{
+ rdnsDetail.setFirstSeen(ipDetail.getFirstSeen());
+ }
+ //添加最后出现时间
+ if(rdnsDetail.getLastSeen()!=null){
+ if(rdnsDetail.getLastSeen().before(ipDetail.getLastSeen())){
+ rdnsDetail.setLastSeen(ipDetail.getLastSeen());
+ }
+ }else{
+ rdnsDetail.setLastSeen(ipDetail.getLastSeen());
+ }
+ }
+ return ResponseResult.okResult(rdnsDetail);
+ }
+}
diff --git a/framework/src/main/java/org/example/utils/BeanCopyUtils.java b/framework/src/main/java/org/example/utils/BeanCopyUtils.java
new file mode 100644
index 0000000..f1f99dd
--- /dev/null
+++ b/framework/src/main/java/org/example/utils/BeanCopyUtils.java
@@ -0,0 +1,31 @@
+package org.example.utils;
+
+import org.springframework.beans.BeanUtils;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class BeanCopyUtils {
+
+ private BeanCopyUtils() {
+ }
+
+ public static <V> V copyBean(Object source,Class<V> clazz) {
+ //创建目标对象
+ V result = null;
+ try {
+ result = clazz.newInstance();
+ //实现属性copy
+ BeanUtils.copyProperties(source, result);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ //返回结果
+ return result;
+ }
+ public static <O,V> List<V> copyBeanList(List<O> list,Class<V> clazz){
+ return list.stream()
+ .map(o -> copyBean(o, clazz))
+ .collect(Collectors.toList());
+ }
+}
diff --git a/framework/src/main/java/org/example/vo/CountryListVo.java b/framework/src/main/java/org/example/vo/CountryListVo.java
new file mode 100644
index 0000000..853959f
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/CountryListVo.java
@@ -0,0 +1,16 @@
+package org.example.vo;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CountryListVo {
+ //国家名称
+ private String country;
+ //出现的次数
+ private Long num;
+}
diff --git a/framework/src/main/java/org/example/vo/IpDetail.java b/framework/src/main/java/org/example/vo/IpDetail.java
new file mode 100644
index 0000000..d209c8b
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/IpDetail.java
@@ -0,0 +1,54 @@
+package org.example.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IpDetail {
+ private Long id;
+
+ //IP
+ private String ip;
+ //rdns记录,扫描组织
+ private IpDetailRdns ipDetailRdns;
+ //第一次出现时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
+ private Date firstSeen;
+ //最后一次出现时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
+ private Date lastSeen;
+ //IP所属国家
+ private String country;
+ //IP所属地区
+ private String region;
+ //IP所属城市
+ private String city;
+ //ASN号
+ private String asn;
+ //端口列表
+ private List<IpDetailPort> ipDetailPortList;
+
+
+ @Override
+ public String toString() {
+ return "IpDetail{" +
+ "id=" + id +
+ ", ip='" + ip + '\'' +
+ ", ipDetailRdns=" + ipDetailRdns +
+ ", firstSeen=" + firstSeen +
+ ", lastSeen=" + lastSeen +
+ ", country='" + country + '\'' +
+ ", region='" + region + '\'' +
+ ", city='" + city + '\'' +
+ ", asn='" + asn + '\'' +
+ ", ipDetailPortList=" + ipDetailPortList +
+ '}';
+ }
+}
diff --git a/framework/src/main/java/org/example/vo/IpDetailPort.java b/framework/src/main/java/org/example/vo/IpDetailPort.java
new file mode 100644
index 0000000..88b3be0
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/IpDetailPort.java
@@ -0,0 +1,15 @@
+package org.example.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IpDetailPort {
+ //端口号
+ private Long portNum;
+ //协议
+ private String protocol;
+}
diff --git a/framework/src/main/java/org/example/vo/IpDetailRdns.java b/framework/src/main/java/org/example/vo/IpDetailRdns.java
new file mode 100644
index 0000000..b22b12c
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/IpDetailRdns.java
@@ -0,0 +1,14 @@
+package org.example.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IpDetailRdns {
+ private Long id;
+ //rdns记录,扫描组织
+ private String rdns;
+}
diff --git a/framework/src/main/java/org/example/vo/IpListVo.java b/framework/src/main/java/org/example/vo/IpListVo.java
new file mode 100644
index 0000000..bd8ecd8
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/IpListVo.java
@@ -0,0 +1,17 @@
+package org.example.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IpListVo {
+
+ private Long id;
+ //IP
+ private String ip;
+ //出现次数
+ private Long num;
+}
diff --git a/framework/src/main/java/org/example/vo/PageVo.java b/framework/src/main/java/org/example/vo/PageVo.java
new file mode 100644
index 0000000..7c17ffa
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/PageVo.java
@@ -0,0 +1,15 @@
+package org.example.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PageVo {
+ private List rows;
+ private int total;
+}
diff --git a/framework/src/main/java/org/example/vo/PortListVo.java b/framework/src/main/java/org/example/vo/PortListVo.java
new file mode 100644
index 0000000..9d5537c
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/PortListVo.java
@@ -0,0 +1,19 @@
+package org.example.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PortListVo {
+
+ //端口在port表中的id
+ private Long id;
+ //端口号
+ private Long portNum;
+ //出现次数
+ private Long num;
+
+}
diff --git a/framework/src/main/java/org/example/vo/RdnsDetail.java b/framework/src/main/java/org/example/vo/RdnsDetail.java
new file mode 100644
index 0000000..edbd134
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/RdnsDetail.java
@@ -0,0 +1,29 @@
+package org.example.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RdnsDetail {
+ //rdns记录,扫描组织
+ private String rdns;
+ //国家
+ private String country;
+ //第一次出现时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
+ private Date firstSeen;
+ //最后一次出现时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
+ private Date lastSeen;
+ //IP列表
+ private List<RdnsDetailIp> rdnsDetailIpList;
+ //端口列表
+ private List<IpDetailPort> ipDetailPortList;
+}
diff --git a/framework/src/main/java/org/example/vo/RdnsDetailIp.java b/framework/src/main/java/org/example/vo/RdnsDetailIp.java
new file mode 100644
index 0000000..348bcd7
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/RdnsDetailIp.java
@@ -0,0 +1,14 @@
+package org.example.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RdnsDetailIp {
+ private Long id;
+ //IP
+ private String ip;
+}
diff --git a/framework/src/main/java/org/example/vo/RdnsDetailPort.java b/framework/src/main/java/org/example/vo/RdnsDetailPort.java
new file mode 100644
index 0000000..d251163
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/RdnsDetailPort.java
@@ -0,0 +1,15 @@
+package org.example.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RdnsDetailPort {
+ //端口号
+ private Long portNum;
+ //协议
+ private String protocol;
+}
diff --git a/framework/src/main/java/org/example/vo/RdnsListVo.java b/framework/src/main/java/org/example/vo/RdnsListVo.java
new file mode 100644
index 0000000..e312b29
--- /dev/null
+++ b/framework/src/main/java/org/example/vo/RdnsListVo.java
@@ -0,0 +1,17 @@
+package org.example.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RdnsListVo {
+ private Long id;
+
+ //rdns记录,扫描组织
+ private String rdns;
+ //出现次数
+ private Long num;
+}
diff --git a/framework/src/main/resources/application.yml b/framework/src/main/resources/application.yml
new file mode 100644
index 0000000..69dd470
--- /dev/null
+++ b/framework/src/main/resources/application.yml
@@ -0,0 +1,22 @@
+server:
+ port: 7777
+spring:
+ datasource:
+ url: jdbc:mysql://localhost:3306/mesa_portscan?characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+ username: root
+ password: password
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ servlet:
+ multipart:
+ max-file-size: 2MB
+ max-request-size: 5MB
+mybatis-plus:
+ configuration:
+ # 日志
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ global-config:
+ db-config:
+ #logic-delete-field: delFlag
+ #logic-delete-value: 1
+ #logic-not-delete-value: 0
+ id-type: auto
diff --git a/framework/target/classes/application.yml b/framework/target/classes/application.yml
new file mode 100644
index 0000000..69dd470
--- /dev/null
+++ b/framework/target/classes/application.yml
@@ -0,0 +1,22 @@
+server:
+ port: 7777
+spring:
+ datasource:
+ url: jdbc:mysql://localhost:3306/mesa_portscan?characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+ username: root
+ password: password
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ servlet:
+ multipart:
+ max-file-size: 2MB
+ max-request-size: 5MB
+mybatis-plus:
+ configuration:
+ # 日志
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ global-config:
+ db-config:
+ #logic-delete-field: delFlag
+ #logic-delete-value: 1
+ #logic-not-delete-value: 0
+ id-type: auto
diff --git a/framework/target/classes/org/example/ResponseResult.class b/framework/target/classes/org/example/ResponseResult.class
new file mode 100644
index 0000000..75fc0d2
--- /dev/null
+++ b/framework/target/classes/org/example/ResponseResult.class
Binary files differ
diff --git a/framework/target/classes/org/example/WebApplication.class b/framework/target/classes/org/example/WebApplication.class
new file mode 100644
index 0000000..7717bf2
--- /dev/null
+++ b/framework/target/classes/org/example/WebApplication.class
Binary files differ
diff --git a/framework/target/classes/org/example/config/WebConfig.class b/framework/target/classes/org/example/config/WebConfig.class
new file mode 100644
index 0000000..55eff23
--- /dev/null
+++ b/framework/target/classes/org/example/config/WebConfig.class
Binary files differ
diff --git a/framework/target/classes/org/example/constants/SystemConstants.class b/framework/target/classes/org/example/constants/SystemConstants.class
new file mode 100644
index 0000000..98861b5
--- /dev/null
+++ b/framework/target/classes/org/example/constants/SystemConstants.class
Binary files differ
diff --git a/framework/target/classes/org/example/controller/IpController.class b/framework/target/classes/org/example/controller/IpController.class
new file mode 100644
index 0000000..5b3d852
--- /dev/null
+++ b/framework/target/classes/org/example/controller/IpController.class
Binary files differ
diff --git a/framework/target/classes/org/example/controller/PortController.class b/framework/target/classes/org/example/controller/PortController.class
new file mode 100644
index 0000000..96eac7b
--- /dev/null
+++ b/framework/target/classes/org/example/controller/PortController.class
Binary files differ
diff --git a/framework/target/classes/org/example/controller/PortscanController.class b/framework/target/classes/org/example/controller/PortscanController.class
new file mode 100644
index 0000000..aa4f7c4
--- /dev/null
+++ b/framework/target/classes/org/example/controller/PortscanController.class
Binary files differ
diff --git a/framework/target/classes/org/example/controller/RdnsController.class b/framework/target/classes/org/example/controller/RdnsController.class
new file mode 100644
index 0000000..6f188b1
--- /dev/null
+++ b/framework/target/classes/org/example/controller/RdnsController.class
Binary files differ
diff --git a/framework/target/classes/org/example/entity/Ip.class b/framework/target/classes/org/example/entity/Ip.class
new file mode 100644
index 0000000..c959799
--- /dev/null
+++ b/framework/target/classes/org/example/entity/Ip.class
Binary files differ
diff --git a/framework/target/classes/org/example/entity/Port.class b/framework/target/classes/org/example/entity/Port.class
new file mode 100644
index 0000000..bfffad6
--- /dev/null
+++ b/framework/target/classes/org/example/entity/Port.class
Binary files differ
diff --git a/framework/target/classes/org/example/entity/Portscan.class b/framework/target/classes/org/example/entity/Portscan.class
new file mode 100644
index 0000000..8d0a210
--- /dev/null
+++ b/framework/target/classes/org/example/entity/Portscan.class
Binary files differ
diff --git a/framework/target/classes/org/example/entity/Rdns.class b/framework/target/classes/org/example/entity/Rdns.class
new file mode 100644
index 0000000..dd25312
--- /dev/null
+++ b/framework/target/classes/org/example/entity/Rdns.class
Binary files differ
diff --git a/framework/target/classes/org/example/enums/AppHttpCodeEnum.class b/framework/target/classes/org/example/enums/AppHttpCodeEnum.class
new file mode 100644
index 0000000..38a6711
--- /dev/null
+++ b/framework/target/classes/org/example/enums/AppHttpCodeEnum.class
Binary files differ
diff --git a/framework/target/classes/org/example/mapper/IpMapper.class b/framework/target/classes/org/example/mapper/IpMapper.class
new file mode 100644
index 0000000..78409fe
--- /dev/null
+++ b/framework/target/classes/org/example/mapper/IpMapper.class
Binary files differ
diff --git a/framework/target/classes/org/example/mapper/PortMapper.class b/framework/target/classes/org/example/mapper/PortMapper.class
new file mode 100644
index 0000000..83dc4b9
--- /dev/null
+++ b/framework/target/classes/org/example/mapper/PortMapper.class
Binary files differ
diff --git a/framework/target/classes/org/example/mapper/PortscanMapper.class b/framework/target/classes/org/example/mapper/PortscanMapper.class
new file mode 100644
index 0000000..dcae8bc
--- /dev/null
+++ b/framework/target/classes/org/example/mapper/PortscanMapper.class
Binary files differ
diff --git a/framework/target/classes/org/example/mapper/RdnsMapper.class b/framework/target/classes/org/example/mapper/RdnsMapper.class
new file mode 100644
index 0000000..19bb2f8
--- /dev/null
+++ b/framework/target/classes/org/example/mapper/RdnsMapper.class
Binary files differ
diff --git a/framework/target/classes/org/example/service/IpService.class b/framework/target/classes/org/example/service/IpService.class
new file mode 100644
index 0000000..4e499b6
--- /dev/null
+++ b/framework/target/classes/org/example/service/IpService.class
Binary files differ
diff --git a/framework/target/classes/org/example/service/PortService.class b/framework/target/classes/org/example/service/PortService.class
new file mode 100644
index 0000000..715284e
--- /dev/null
+++ b/framework/target/classes/org/example/service/PortService.class
Binary files differ
diff --git a/framework/target/classes/org/example/service/PortscanService.class b/framework/target/classes/org/example/service/PortscanService.class
new file mode 100644
index 0000000..966c430
--- /dev/null
+++ b/framework/target/classes/org/example/service/PortscanService.class
Binary files differ
diff --git a/framework/target/classes/org/example/service/RdnsService.class b/framework/target/classes/org/example/service/RdnsService.class
new file mode 100644
index 0000000..23104e2
--- /dev/null
+++ b/framework/target/classes/org/example/service/RdnsService.class
Binary files differ
diff --git a/framework/target/classes/org/example/service/impl/IpServiceImpl.class b/framework/target/classes/org/example/service/impl/IpServiceImpl.class
new file mode 100644
index 0000000..9447dd7
--- /dev/null
+++ b/framework/target/classes/org/example/service/impl/IpServiceImpl.class
Binary files differ
diff --git a/framework/target/classes/org/example/service/impl/PortServiceImpl.class b/framework/target/classes/org/example/service/impl/PortServiceImpl.class
new file mode 100644
index 0000000..04bdfc1
--- /dev/null
+++ b/framework/target/classes/org/example/service/impl/PortServiceImpl.class
Binary files differ
diff --git a/framework/target/classes/org/example/service/impl/PortscanServiceImpl.class b/framework/target/classes/org/example/service/impl/PortscanServiceImpl.class
new file mode 100644
index 0000000..7e6100f
--- /dev/null
+++ b/framework/target/classes/org/example/service/impl/PortscanServiceImpl.class
Binary files differ
diff --git a/framework/target/classes/org/example/service/impl/RdnsServiceImpl.class b/framework/target/classes/org/example/service/impl/RdnsServiceImpl.class
new file mode 100644
index 0000000..47f7294
--- /dev/null
+++ b/framework/target/classes/org/example/service/impl/RdnsServiceImpl.class
Binary files differ
diff --git a/framework/target/classes/org/example/utils/BeanCopyUtils.class b/framework/target/classes/org/example/utils/BeanCopyUtils.class
new file mode 100644
index 0000000..ac881be
--- /dev/null
+++ b/framework/target/classes/org/example/utils/BeanCopyUtils.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/CountryListVo.class b/framework/target/classes/org/example/vo/CountryListVo.class
new file mode 100644
index 0000000..92ce0bf
--- /dev/null
+++ b/framework/target/classes/org/example/vo/CountryListVo.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/IpDetail.class b/framework/target/classes/org/example/vo/IpDetail.class
new file mode 100644
index 0000000..41cf724
--- /dev/null
+++ b/framework/target/classes/org/example/vo/IpDetail.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/IpDetailPort.class b/framework/target/classes/org/example/vo/IpDetailPort.class
new file mode 100644
index 0000000..28daa20
--- /dev/null
+++ b/framework/target/classes/org/example/vo/IpDetailPort.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/IpDetailRdns.class b/framework/target/classes/org/example/vo/IpDetailRdns.class
new file mode 100644
index 0000000..4b7eb50
--- /dev/null
+++ b/framework/target/classes/org/example/vo/IpDetailRdns.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/IpListVo.class b/framework/target/classes/org/example/vo/IpListVo.class
new file mode 100644
index 0000000..39349a1
--- /dev/null
+++ b/framework/target/classes/org/example/vo/IpListVo.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/PageVo.class b/framework/target/classes/org/example/vo/PageVo.class
new file mode 100644
index 0000000..d3d1a84
--- /dev/null
+++ b/framework/target/classes/org/example/vo/PageVo.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/PortListVo.class b/framework/target/classes/org/example/vo/PortListVo.class
new file mode 100644
index 0000000..83ca262
--- /dev/null
+++ b/framework/target/classes/org/example/vo/PortListVo.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/RdnsDetail.class b/framework/target/classes/org/example/vo/RdnsDetail.class
new file mode 100644
index 0000000..37bda5a
--- /dev/null
+++ b/framework/target/classes/org/example/vo/RdnsDetail.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/RdnsDetailIp.class b/framework/target/classes/org/example/vo/RdnsDetailIp.class
new file mode 100644
index 0000000..71bb170
--- /dev/null
+++ b/framework/target/classes/org/example/vo/RdnsDetailIp.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/RdnsDetailPort.class b/framework/target/classes/org/example/vo/RdnsDetailPort.class
new file mode 100644
index 0000000..e21c01c
--- /dev/null
+++ b/framework/target/classes/org/example/vo/RdnsDetailPort.class
Binary files differ
diff --git a/framework/target/classes/org/example/vo/RdnsListVo.class b/framework/target/classes/org/example/vo/RdnsListVo.class
new file mode 100644
index 0000000..3c64afb
--- /dev/null
+++ b/framework/target/classes/org/example/vo/RdnsListVo.class
Binary files differ
diff --git a/framework/target/framework-1.0-SNAPSHOT.jar b/framework/target/framework-1.0-SNAPSHOT.jar
new file mode 100644
index 0000000..61b194b
--- /dev/null
+++ b/framework/target/framework-1.0-SNAPSHOT.jar
Binary files differ
diff --git a/framework/target/maven-archiver/pom.properties b/framework/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..e4258fd
--- /dev/null
+++ b/framework/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Apr 20 14:25:08 CST 2023
+version=1.0-SNAPSHOT
+groupId=org.example
+artifactId=framework
diff --git a/framework/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/framework/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..d8cedde
--- /dev/null
+++ b/framework/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,42 @@
+org\example\controller\ArticleController.class
+org\example\service\impl\CategoryServiceImpl.class
+org\example\WebApplication.class
+org\example\mapper\IpMapper.class
+org\example\mapper\PortMapper.class
+org\example\mapper\ArticleMapper.class
+org\example\mapper\RdnsMapper.class
+org\example\service\impl\PortscanServiceImpl.class
+org\example\ResponseResult.class
+org\example\service\impl\IpServiceImpl.class
+org\example\vo\HotArticleVo.class
+org\example\service\impl\ArticleServiceImpl.class
+org\example\service\impl\PortServiceImpl.class
+org\example\controller\CategoryController.class
+org\example\service\PortscanService.class
+org\example\vo\IpDetailPort.class
+org\example\entity\Portscan.class
+org\example\service\ArticleService.class
+org\example\entity\Port.class
+org\example\service\impl\RdnsServiceImpl.class
+org\example\vo\IpDetail.class
+org\example\enums\AppHttpCodeEnum.class
+org\example\controller\RdnsController.class
+org\example\utils\BeanCopyUtils.class
+org\example\constants\SystemConstants.class
+org\example\controller\IpController.class
+org\example\mapper\PortscanMapper.class
+org\example\service\IpService.class
+org\example\vo\IpDetailRdns.class
+org\example\service\PortService.class
+org\example\entity\Ip.class
+org\example\entity\Rdns.class
+org\example\vo\IpListVo.class
+org\example\controller\PortController.class
+org\example\entity\Category.class
+org\example\mapper\CategoryMapper.class
+org\example\config\WebConfig.class
+org\example\entity\Article.class
+org\example\vo\CategoryVo.class
+org\example\controller\PortscanController.class
+org\example\service\CategoryService.class
+org\example\service\RdnsService.class
diff --git a/framework/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/framework/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..2cef8a3
--- /dev/null
+++ b/framework/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,43 @@
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\entity\Category.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\mapper\IpMapper.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\mapper\PortMapper.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\impl\PortscanServiceImpl.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\vo\IpDetailPort.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\controller\ArticleController.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\mapper\ArticleMapper.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\impl\PortServiceImpl.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\vo\HotArticleVo.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\mapper\PortscanMapper.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\entity\Portscan.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\impl\RdnsServiceImpl.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\config\WebConfig.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\controller\PortController.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\vo\IpDetailRdns.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\constants\SystemConstants.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\entity\Port.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\vo\CategoryVo.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\impl\CategoryServiceImpl.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\WebApplication.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\mapper\CategoryMapper.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\controller\CategoryController.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\entity\Article.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\impl\ArticleServiceImpl.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\PortscanService.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\IpService.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\controller\PortscanController.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\CategoryService.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\RdnsService.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\PortService.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\entity\Ip.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\mapper\RdnsMapper.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\ArticleService.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\vo\IpDetail.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\enums\AppHttpCodeEnum.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\entity\Rdns.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\service\impl\IpServiceImpl.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\vo\IpListVo.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\vo\PageVo.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\controller\RdnsController.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\ResponseResult.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\controller\IpController.java
+D:\workplace\VS-Code-JAVA\MESA-portscan-detection\framework\src\main\java\org\example\utils\BeanCopyUtils.java
diff --git a/framework/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/framework/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/framework/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..eb4a362
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.example</groupId>
+ <artifactId>MESA-portscan-detection</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0-SNAPSHOT</version>
+ <modules>
+ <module>framework</module>
+ </modules>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <java.version>1.8</java.version>
+ </properties>
+ <dependencyManagement>
+
+
+ <dependencies>
+ <!-- SpringBoot的依赖配置-->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-dependencies</artifactId>
+ <version>2.5.0</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ <!--fastjson依赖-->
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>fastjson</artifactId>
+ <version>1.2.33</version>
+ </dependency>
+ <!--jwt依赖-->
+ <dependency>
+ <groupId>io.jsonwebtoken</groupId>
+ <artifactId>jjwt</artifactId>
+ <version>0.9.0</version>
+ </dependency>
+ <!--mybatisPlus依赖-->
+ <dependency>
+ <groupId>com.github.yulichang</groupId>
+ <artifactId>mybatis-plus-join</artifactId>
+ <version>1.2.4</version>
+ </dependency>
+ <dependency>
+ <groupId>com.baomidou</groupId>
+ <artifactId>mybatis-plus-boot-starter</artifactId>
+ <version>3.5.1</version>
+ </dependency>
+
+ <!--阿里云OSS-->
+ <dependency>
+ <groupId>com.aliyun.oss</groupId>
+ <artifactId>aliyun-sdk-oss</artifactId>
+ <version>3.10.2</version>
+ </dependency>
+
+
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>easyexcel</artifactId>
+ <version>3.0.5</version>
+ </dependency>
+
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger2</artifactId>
+ <version>2.9.2</version>
+ </dependency>
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger-ui</artifactId>
+ <version>2.9.2</version>
+ </dependency>
+ </dependencies>
+
+
+ </dependencyManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.1</version>
+ <configuration>
+ <source>${java.version}</source>
+ <target>${java.version}</target>
+ <encoding>${project.build.sourceEncoding}</encoding>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>