diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f14b74d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+################################################################################
+# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。
+################################################################################
+
+/.vs
diff --git a/Daemon.ico b/Daemon.ico
deleted file mode 100644
index c426844..0000000
Binary files a/Daemon.ico and /dev/null differ
diff --git a/DaemonService.pro b/DaemonService.pro
deleted file mode 100644
index 9ca2324..0000000
--- a/DaemonService.pro
+++ /dev/null
@@ -1,60 +0,0 @@
-#-------------------------------------------------
-#
-# Project created by QtCreator 2018-12-27T16:26:24
-#
-#-------------------------------------------------
-
-QT += core gui network sql
-RESOURCES += res.qrc
-RC_ICONS = Daemon.ico
-
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
-TARGET = DaemonService
-TEMPLATE = app
-
-# The following define makes your compiler emit warnings if you use
-# any feature of Qt which has been marked as deprecated (the exact warnings
-# depend on your compiler). Please consult the documentation of the
-# deprecated API in order to know how to port your code away from it.
-DEFINES += QT_DEPRECATED_WARNINGS
-
-# You can also make your code fail to compile if you use deprecated APIs.
-# In order to do so, uncomment the following line.
-# You can also select to disable deprecated APIs only up to a certain version of Qt.
-#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
-
-CONFIG += c++11
-
-SOURCES += \
- main.cpp \
- mainwindow.cpp \
- daemonservice.cpp \
- worker.cpp \
- md5.cpp \
- dal.cpp \
- log.cpp \
- ipsechelper.cpp
-
-HEADERS += \
- mainwindow.h \
- daemonservice.h \
- worker.h \
- md5.h \
- dal.h \
- model.h \
- log.h \
- ipsechelper.h
-
-FORMS += \
- mainwindow.ui
-
-RC_FILE = uac.rc
-
-# Default rules for deployment.
-qnx: target.path = /tmp/$${TARGET}/bin
-else: unix:!android: target.path = /opt/$${TARGET}/bin
-!isEmpty(target.path): INSTALLS += target
-
-RESOURCES += \
- res.qrc
diff --git a/DaemonService.pro.user b/DaemonService.pro.user
deleted file mode 100644
index d6aca7d..0000000
--- a/DaemonService.pro.user
+++ /dev/null
@@ -1,568 +0,0 @@
-
-
-
-
-
- EnvironmentId
- {2d03fc4c-541a-4fa5-8f5c-ae92a1998dce}
-
-
- ProjectExplorer.Project.ActiveTarget
- 1
-
-
- ProjectExplorer.Project.EditorSettings
-
- true
- false
- true
-
- Cpp
-
- CppGlobal
-
-
-
- QmlJS
-
- QmlJSGlobal
-
-
- 2
- UTF-8
- false
- 4
- false
- 80
- true
- true
- 1
- true
- false
- 0
- true
- true
- 0
- 8
- true
- 1
- true
- true
- true
- false
-
-
-
- ProjectExplorer.Project.PluginSettings
-
-
- -fno-delayed-template-parsing
-
- true
-
-
-
- ProjectExplorer.Project.Target.0
-
- Desktop Qt 5.11.2 MinGW 32bit
- Desktop Qt 5.11.2 MinGW 32bit
- qt.qt5.5112.win32_mingw53_kit
- 0
- 0
- 0
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Debug
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- true
-
- false
- false
- false
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Debug
- Debug
- Qt4ProjectManager.Qt4BuildConfiguration
- 2
- true
-
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Release
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- false
-
- false
- false
- true
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Release
- Release
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
- true
-
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Profile
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- true
-
- false
- true
- true
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Profile
- Profile
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
- true
-
- 3
-
-
- 0
- 部署
-
- ProjectExplorer.BuildSteps.Deploy
-
- 1
- Deploy Configuration
-
- ProjectExplorer.DefaultDeployConfiguration
-
- 1
-
-
- false
- false
- 1000
-
- true
-
- false
- false
- false
- false
- true
- 0.01
- 10
- true
- 1
- 25
-
- 1
- true
- false
- true
- valgrind
-
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
-
- 2
-
- DaemonService
-
- Qt4ProjectManager.Qt4RunConfiguration:E:/C++/Qt/DaemonService/DaemonService.pro
- true
-
- DaemonService.pro
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Debug
- 3768
- false
- true
- false
- false
- true
-
- 1
-
-
-
- ProjectExplorer.Project.Target.1
-
- Desktop Qt 5.6.2 MinGW 32bit2
- Desktop Qt 5.6.2 MinGW 32bit2
- qt.56.win32_mingw49_kit
- 1
- 0
- 0
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit2-Debug
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- true
-
- false
- false
- false
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Debug
- Debug
- Qt4ProjectManager.Qt4BuildConfiguration
- 2
- true
-
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit2-Release
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- false
-
- false
- false
- false
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Release
- Release
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
- true
-
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit2-Profile
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- true
-
- false
- true
- false
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Profile
- Profile
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
- true
-
- 3
-
-
- 0
- 部署
-
- ProjectExplorer.BuildSteps.Deploy
-
- 1
- Deploy Configuration
-
- ProjectExplorer.DefaultDeployConfiguration
-
- 1
-
-
- false
- false
- 1000
-
- true
-
- false
- false
- false
- false
- true
- 0.01
- 10
- true
- 1
- 25
-
- 1
- true
- false
- true
- valgrind
-
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
-
- 2
-
- DaemonService
-
- Qt4ProjectManager.Qt4RunConfiguration:E:/C++/Qt/DaemonService/DaemonService.pro
- true
-
- DaemonService.pro
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit2-Release
- 3768
- false
- true
- false
- false
- true
-
- 1
-
-
-
- ProjectExplorer.Project.TargetCount
- 2
-
-
- ProjectExplorer.Project.Updater.FileVersion
- 18
-
-
- Version
- 18
-
-
diff --git a/DaemonService.pro.user.2d03fc4.4.8-pre1 b/DaemonService.pro.user.2d03fc4.4.8-pre1
deleted file mode 100644
index 0451085..0000000
--- a/DaemonService.pro.user.2d03fc4.4.8-pre1
+++ /dev/null
@@ -1,322 +0,0 @@
-
-
-
-
-
- EnvironmentId
- {2d03fc4c-541a-4fa5-8f5c-ae92a1998dce}
-
-
- ProjectExplorer.Project.ActiveTarget
- 0
-
-
- ProjectExplorer.Project.EditorSettings
-
- true
- false
- true
-
- Cpp
-
- CppGlobal
-
-
-
- QmlJS
-
- QmlJSGlobal
-
-
- 2
- UTF-8
- false
- 4
- false
- 80
- true
- true
- 1
- true
- false
- 0
- true
- true
- 0
- 8
- true
- 1
- true
- true
- true
- false
-
-
-
- ProjectExplorer.Project.PluginSettings
-
-
- -fno-delayed-template-parsing
-
- true
-
-
-
- ProjectExplorer.Project.Target.0
-
- Desktop Qt 5.11.2 MinGW 32bit
- Desktop Qt 5.11.2 MinGW 32bit
- qt.qt5.5112.win32_mingw53_kit
- 0
- 0
- 0
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Debug
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- true
-
- false
- false
- false
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Debug
- Debug
- Qt4ProjectManager.Qt4BuildConfiguration
- 2
- true
-
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Release
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- false
-
- false
- false
- true
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Release
- Release
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
- true
-
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Profile
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- true
-
- false
- true
- true
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Profile
- Profile
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
- true
-
- 3
-
-
- 0
- 部署
-
- ProjectExplorer.BuildSteps.Deploy
-
- 1
- Deploy Configuration
-
- ProjectExplorer.DefaultDeployConfiguration
-
- 1
-
-
- false
- false
- 1000
-
- true
-
- false
- false
- false
- false
- true
- 0.01
- 10
- true
- 1
- 25
-
- 1
- true
- false
- true
- valgrind
-
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
-
- 2
-
- DaemonService
-
- Qt4ProjectManager.Qt4RunConfiguration:E:/C++/Qt/DaemonService/DaemonService.pro
- true
-
- DaemonService.pro
-
- E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Debug
- 3768
- false
- true
- false
- false
- true
-
- 1
-
-
-
- ProjectExplorer.Project.TargetCount
- 1
-
-
- ProjectExplorer.Project.Updater.FileVersion
- 18
-
-
- Version
- 18
-
-
diff --git a/DaemonService/DaemonService.pro.user b/DaemonService/DaemonService.pro.user
index bf619a6..d6aca7d 100644
--- a/DaemonService/DaemonService.pro.user
+++ b/DaemonService/DaemonService.pro.user
@@ -1,14 +1,14 @@
-
+
EnvironmentId
- {6a2adf44-d351-4499-8d66-24024cfa2d9d}
+ {2d03fc4c-541a-4fa5-8f5c-ae92a1998dce}
ProjectExplorer.Project.ActiveTarget
- 0
+ 1
ProjectExplorer.Project.EditorSettings
@@ -64,14 +64,14 @@
ProjectExplorer.Project.Target.0
- Desktop Qt 5.6.2 MinGW 32bit
- Desktop Qt 5.6.2 MinGW 32bit
- qt.56.win32_mingw49_kit
- 1
+ Desktop Qt 5.11.2 MinGW 32bit
+ Desktop Qt 5.11.2 MinGW 32bit
+ qt.qt5.5112.win32_mingw53_kit
+ 0
0
0
- F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Debug
+ E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Debug
true
@@ -89,11 +89,10 @@
Make
Qt4ProjectManager.MakeStep
-
+
false
- false
2
Build
@@ -106,11 +105,10 @@
Make
Qt4ProjectManager.MakeStep
-
+
true
clean
- false
1
Clean
@@ -127,7 +125,7 @@
true
- F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Release
+ E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Release
true
@@ -138,18 +136,17 @@
false
false
- false
+ true
true
Make
Qt4ProjectManager.MakeStep
-
+
false
- false
2
Build
@@ -162,11 +159,10 @@
Make
Qt4ProjectManager.MakeStep
-
+
true
clean
- false
1
Clean
@@ -183,7 +179,7 @@
true
- F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Profile
+ E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Profile
true
@@ -194,18 +190,17 @@
false
true
- false
+ true
true
Make
Qt4ProjectManager.MakeStep
-
+
false
- false
2
Build
@@ -218,11 +213,10 @@
Make
Qt4ProjectManager.MakeStep
-
+
true
clean
- false
1
Clean
@@ -297,32 +291,278 @@
DaemonService
- Qt4ProjectManager.Qt4RunConfiguration:F:/Qt/DaemonService/DaemonService.pro
+ Qt4ProjectManager.Qt4RunConfiguration:E:/C++/Qt/DaemonService/DaemonService.pro
+ true
+
DaemonService.pro
-
+
+ E:/C++/Qt/build-DaemonService-Desktop_Qt_5_11_2_MinGW_32bit-Debug
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ 1
+
+
+
+ ProjectExplorer.Project.Target.1
+
+ Desktop Qt 5.6.2 MinGW 32bit2
+ Desktop Qt 5.6.2 MinGW 32bit2
+ qt.56.win32_mingw49_kit
+ 1
+ 0
+ 0
+
+ E:/C++/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit2-Debug
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ false
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Debug
+ Debug
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+ true
+
+
+ E:/C++/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit2-Release
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+
+ false
+ false
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Release
+ Release
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ true
+
+
+ E:/C++/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit2-Profile
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ true
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Profile
+ Profile
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ true
+
+ 3
+
+
+ 0
+ 部署
+
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+ Deploy Configuration
+
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+ DaemonService
+
+ Qt4ProjectManager.Qt4RunConfiguration:E:/C++/Qt/DaemonService/DaemonService.pro
+ true
+
+ DaemonService.pro
+
+ E:/C++/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit2-Release
3768
false
true
- true
false
false
true
-
- F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Release
1
ProjectExplorer.Project.TargetCount
- 1
+ 2
ProjectExplorer.Project.Updater.FileVersion
- 20
+ 18
Version
- 20
+ 18
diff --git a/DaemonService.pro.user.6a2adf4.20 b/DaemonService/DaemonService.pro.user.6a2adf4.20
similarity index 98%
rename from DaemonService.pro.user.6a2adf4.20
rename to DaemonService/DaemonService.pro.user.6a2adf4.20
index bf619a6..8ffe7ca 100644
--- a/DaemonService.pro.user.6a2adf4.20
+++ b/DaemonService/DaemonService.pro.user.6a2adf4.20
@@ -1,328 +1,328 @@
-
-
-
-
-
- EnvironmentId
- {6a2adf44-d351-4499-8d66-24024cfa2d9d}
-
-
- ProjectExplorer.Project.ActiveTarget
- 0
-
-
- ProjectExplorer.Project.EditorSettings
-
- true
- false
- true
-
- Cpp
-
- CppGlobal
-
-
-
- QmlJS
-
- QmlJSGlobal
-
-
- 2
- UTF-8
- false
- 4
- false
- 80
- true
- true
- 1
- true
- false
- 0
- true
- true
- 0
- 8
- true
- 1
- true
- true
- true
- false
-
-
-
- ProjectExplorer.Project.PluginSettings
-
-
- -fno-delayed-template-parsing
-
- true
-
-
-
- ProjectExplorer.Project.Target.0
-
- Desktop Qt 5.6.2 MinGW 32bit
- Desktop Qt 5.6.2 MinGW 32bit
- qt.56.win32_mingw49_kit
- 1
- 0
- 0
-
- F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Debug
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- true
-
- false
- false
- false
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
- false
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
- false
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Debug
- Debug
- Qt4ProjectManager.Qt4BuildConfiguration
- 2
- true
-
-
- F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Release
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- false
-
- false
- false
- false
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
- false
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
- false
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Release
- Release
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
- true
-
-
- F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Profile
-
-
- true
- qmake
-
- QtProjectManager.QMakeBuildStep
- true
-
- false
- true
- false
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- false
-
-
- false
-
- 2
- Build
-
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Make
-
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
- false
-
- 1
- Clean
-
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Profile
- Profile
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
- true
-
- 3
-
-
- 0
- 部署
-
- ProjectExplorer.BuildSteps.Deploy
-
- 1
- Deploy Configuration
-
- ProjectExplorer.DefaultDeployConfiguration
-
- 1
-
-
- false
- false
- 1000
-
- true
-
- false
- false
- false
- false
- true
- 0.01
- 10
- true
- 1
- 25
-
- 1
- true
- false
- true
- valgrind
-
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
-
- 2
-
- DaemonService
-
- Qt4ProjectManager.Qt4RunConfiguration:F:/Qt/DaemonService/DaemonService.pro
- DaemonService.pro
-
- 3768
- false
- true
- true
- false
- false
- true
-
- F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Release
-
- 1
-
-
-
- ProjectExplorer.Project.TargetCount
- 1
-
-
- ProjectExplorer.Project.Updater.FileVersion
- 20
-
-
- Version
- 20
-
-
+
+
+
+
+
+ EnvironmentId
+ {6a2adf44-d351-4499-8d66-24024cfa2d9d}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ 80
+ true
+ true
+ 1
+ true
+ false
+ 0
+ true
+ true
+ 0
+ 8
+ true
+ 1
+ true
+ true
+ true
+ false
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+ -fno-delayed-template-parsing
+
+ true
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop Qt 5.6.2 MinGW 32bit
+ Desktop Qt 5.6.2 MinGW 32bit
+ qt.56.win32_mingw49_kit
+ 1
+ 0
+ 0
+
+ F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Debug
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ false
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+ false
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+ false
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Debug
+ Debug
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+ true
+
+
+ F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Release
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+
+ false
+ false
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+ false
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+ false
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Release
+ Release
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ true
+
+
+ F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Profile
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ true
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+ false
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+ false
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Profile
+ Profile
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ true
+
+ 3
+
+
+ 0
+ 部署
+
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+ Deploy Configuration
+
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+ DaemonService
+
+ Qt4ProjectManager.Qt4RunConfiguration:F:/Qt/DaemonService/DaemonService.pro
+ DaemonService.pro
+
+ 3768
+ false
+ true
+ true
+ false
+ false
+ true
+
+ F:/Qt/build-DaemonService-Desktop_Qt_5_6_2_MinGW_32bit-Release
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 20
+
+
+ Version
+ 20
+
+
diff --git a/LICENSE b/DaemonService/LICENSE
similarity index 100%
rename from LICENSE
rename to DaemonService/LICENSE
diff --git a/DaemonService/dal.cpp b/DaemonService/dal.cpp
index 0e31dcf..64bf092 100644
--- a/DaemonService/dal.cpp
+++ b/DaemonService/dal.cpp
@@ -88,6 +88,29 @@ QList DAL::getWhiteList(QString ip)
return whitelist;
}
+void DAL::removeFromWhiteList(QString ip)
+{
+ QString sql = QString("DELETE FROM whitelist WHERE IP=?");
+ QSqlQuery query;
+ query.prepare(sql);
+ query.addBindValue(ip);
+ if(!query.exec())
+ qCritical()< ports)
+{
+ QString portStr = QString("%1").arg(ports[0]);
+ for (int i = 0; i < ports.length(); ++i)
+ portStr += QString(",%1").arg(ports[i]);
+ QString sql = QString("DELETE FROM whitelist WHERE IP=? AND Port in (%1)").arg(portStr);
+ QSqlQuery query;
+ query.prepare(sql);
+ query.addBindValue(ip);
+ if(!query.exec())
+ qCritical()< portList);
QList getWhiteList(QString ip);
+ void removeFromWhiteList(QString ip);
+ void removeFromWhiteList(QString ip, QList ports);
bool isExistsBlackList(int port);
bool isExistsBlackList(QString ip);
bool addItemToBlackList(int port);
+ bool addItemToBlackList(QString ip);
bool addItemToBlackList(QString ip, int port);
+ void removeFromBlackList(QString ip);
QString getPortList();
void setPortList(QString portList);
diff --git a/DaemonService/ipsechelper.cpp b/DaemonService/ipsechelper.cpp
index 0261eb0..b98bd5a 100644
--- a/DaemonService/ipsechelper.cpp
+++ b/DaemonService/ipsechelper.cpp
@@ -16,12 +16,18 @@ void IpsecHelper::addItemToBlackList(QString ip, int port)
{
ExeCmd("add", "blacklist", ip, port);
}
-
+void IpsecHelper::addItemToBlackList(QString ip)
+{
+ ExeCmd("add", "blacklist", ip);
+}
void IpsecHelper::removeItemFromBlackList(QString ip, int port)
{
ExeCmd("delete", "blacklist", ip, port);
}
-
+void IpsecHelper::removeItemFromBlackList(QString ip)
+{
+ ExeCmd("delete", "blacklist", ip);
+}
void IpsecHelper::addItemToBlackList(int port)
{
ExeCmd("add", "blacklist", "any", port);
diff --git a/DaemonService/ipsechelper.h b/DaemonService/ipsechelper.h
index bb3722b..2e5a5f2 100644
--- a/DaemonService/ipsechelper.h
+++ b/DaemonService/ipsechelper.h
@@ -15,11 +15,13 @@ public:
static void removeItemFromWhiteList(QString ip, int port);
static void addItemToBlackList(QString ip, int port);
+ static void addItemToBlackList(QString ip);
static void removeItemFromBlackList(QString ip, int port);
+ static void removeItemFromBlackList(QString ip);
static void addItemToBlackList(int port);
private:
- static void ExeCmd(QString cmd, QString filterlist, QString srcaddr, int port);
+ static void ExeCmd(QString cmd, QString filterlist, QString srcaddr, int port = 0);
};
#endif // IPSECHELPER_H
diff --git a/DaemonService/main.cpp b/DaemonService/main.cpp
index cce5077..b256d9a 100644
--- a/DaemonService/main.cpp
+++ b/DaemonService/main.cpp
@@ -37,19 +37,19 @@ void customMessageHandler(QtMsgType type, const QMessageLogContext &, const QStr
switch (type)
{
case QtDebugMsg: //调试信息提示
- txtMessage = QString("%1 Debug(调试):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss.zzz")).arg(str);
+ txtMessage = QString("%1 Debug(调试):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss")).arg(str);
break;
case QtWarningMsg: //一般的warning提示
- txtMessage = QString("%1 Warning(警告):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss.zzz")).arg(str);
+ txtMessage = QString("%1 Warning(警告):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss")).arg(str);
break;
case QtCriticalMsg: //严重错误提示
- txtMessage = QString("%1 Critical(错误):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss.zzz")).arg(str);
+ txtMessage = QString("%1 Critical(错误):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss")).arg(str);
break;
case QtFatalMsg: //致命错误提示
- txtMessage = QString("%1 Fatal(致命错误):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss.zzz")).arg(str);
+ txtMessage = QString("%1 Fatal(致命错误):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss")).arg(str);
break;
default:
diff --git a/DaemonService/mainwindow.cpp b/DaemonService/mainwindow.cpp
index d327808..275c5ba 100644
--- a/DaemonService/mainwindow.cpp
+++ b/DaemonService/mainwindow.cpp
@@ -156,3 +156,90 @@ void MainWindow::on_btnAddIP_clicked()
else
qWarning("添加失败");
}
+
+void MainWindow::on_btnRemoveIP_clicked()
+{
+ QString ip = ui->txtIP->text();
+ if (ip.isEmpty())
+ {
+ log_append("请输入要移除白名单的IP");
+ return;
+ }
+ QList portList = getInputPortList();
+ auto list = DAL::instance().getWhiteList(ip);
+ for (int i = portList.length() - 1; i >= 0; --i)
+ {
+ bool flag = false;
+ for (const auto &item : list)
+ {
+ if (item.Port == portList[i])
+ {
+ flag = true;
+ break;
+ }
+ }
+ if (flag)
+ {
+ IpsecHelper::removeItemFromWhiteList(ip, portList[i]);
+ }
+ else
+ {
+ portList.removeAt(i);
+ }
+ }
+ if (portList.length() < 1)
+ qDebug("IP:%s 不存在白名单中", ip.toStdString().data());
+ else
+ {
+ DAL::instance().removeFromWhiteList(ip, portList);
+ qDebug("IP:%s 已移出指定端口白名单", ip.toStdString().data());
+ }
+}
+
+void MainWindow::on_btnAddBlackIP_clicked()
+{
+ QString ip = ui->txtBlackIP->text();
+ if (ip.isEmpty())
+ {
+ log_append("请输入要加入黑名单的IP");
+ return;
+ }
+ if (DAL::instance().isExistsBlackList(ip))
+ {
+ log_append("该IP已存在黑名单");
+ return;
+ }
+
+ auto list = DAL::instance().getWhiteList(ip);
+ if (list.length() > 0)
+ {
+ log_append("正在将该ip从白名单中移出...");
+ for (int i = 0; i < list.length(); ++i)
+ IpsecHelper::removeItemFromWhiteList(ip, list[i].Port);
+ DAL::instance().removeFromWhiteList(ip);
+ log_append("移出白名单完成");
+ }
+
+ IpsecHelper::addItemToBlackList(ip);
+ DAL::instance().addItemToBlackList(ip);
+ log_append("黑名单添加完成");
+}
+
+void MainWindow::on_btnRemoveBlackIP_clicked()
+{
+ QString ip = ui->txtBlackIP->text();
+ if (ip.isEmpty())
+ {
+ log_append("请输入要移出黑名单的IP");
+ return;
+ }
+ if (!DAL::instance().isExistsBlackList(ip))
+ {
+ log_append("该IP不存在于黑名单");
+ return;
+ }
+
+ IpsecHelper::addItemToBlackList(ip);
+ DAL::instance().removeFromBlackList(ip);
+ log_append("黑名单移出完成");
+}
diff --git a/DaemonService/mainwindow.h b/DaemonService/mainwindow.h
index fdfe206..3248035 100644
--- a/DaemonService/mainwindow.h
+++ b/DaemonService/mainwindow.h
@@ -27,6 +27,12 @@ private slots:
void on_btnAddIP_clicked();
+ void on_btnRemoveIP_clicked();
+
+ void on_btnAddBlackIP_clicked();
+
+ void on_btnRemoveBlackIP_clicked();
+
private:
Ui::MainWindow *ui;
};
diff --git a/DaemonService/mainwindow.ui b/DaemonService/mainwindow.ui
index 481c2e8..5e8a7b3 100644
--- a/DaemonService/mainwindow.ui
+++ b/DaemonService/mainwindow.ui
@@ -7,19 +7,19 @@
0
0
700
- 320
+ 400
700
- 320
+ 400
700
- 320
+ 400
@@ -32,7 +32,7 @@
130
30
561
- 281
+ 361
@@ -60,7 +60,7 @@ p, li { white-space: pre-wrap; }
10
- 270
+ 350
111
41
@@ -125,7 +125,7 @@ p, li { white-space: pre-wrap; }
10
- 170
+ 190
111
20
@@ -135,13 +135,88 @@ p, li { white-space: pre-wrap; }
10
- 190
- 111
+ 210
+ 51
23
- 将IP加入白名单
+ +
+
+
+
+
+
+ 70
+ 210
+ 51
+ 23
+
+
+
+ -
+
+
+
+
+
+ 10
+ 170
+ 54
+ 12
+
+
+
+ 白名单IP:
+
+
+
+
+
+ 10
+ 250
+ 54
+ 12
+
+
+
+ 黑名单IP:
+
+
+
+
+
+ 10
+ 290
+ 51
+ 23
+
+
+
+ +
+
+
+
+
+
+ 10
+ 270
+ 111
+ 20
+
+
+
+
+
+
+ 70
+ 290
+ 51
+ 23
+
+
+
+ -
diff --git a/DaemonService/worker.cpp b/DaemonService/worker.cpp
index 07a8eae..e8ed537 100644
--- a/DaemonService/worker.cpp
+++ b/DaemonService/worker.cpp
@@ -37,33 +37,68 @@ void Worker::run()
// + "sjavlkc907*$!@(.12i.dy1").toStr())
QString password = ip + "asdfas35.v;cxv-123ioer6719024yosjavlkc907*$!@(.12i.dy1iuew6f178934056xck3dy$^@1309uyrew";
- if (MD5Check(const_cast(data.toStdString().data()), const_cast(password.toStdString().data()), password.toStdString().length()))
+ if (1 // 不校验了
+ || MD5Check(const_cast(data.toStdString().data()), const_cast(password.toStdString().data()), password.toStdString().length())
+ || data.length() == password.length())
{
//qDebug("Verify successful!(校验成功!)");
auto list = DAL::instance().getWhiteList(ip);
- for (int port : this->m_portList)
+
+
+ // 为了防止短时间内多次连接,检查最后一次连接的时间距离现在有多久
+ // 如果不超过30秒,则将其从白名单中移除
+
+ for (int i = this->m_portList.length() - 1; i >= 0; --i)
{
- bool flag = false;
- for (const auto &item : list)
+ int port = this->m_portList[i];
+ int index;
+ for (index = 0; index < list.length(); ++index)
{
- if (item.Port == port)
- {
- flag = true;
+ if (list[index].Port == port)
break;
- }
}
- if (!flag)
+ if (index == list.length())
{
//qDebug("Add to whitelists...(正在将该IP添加到白名单...)");
IpsecHelper::addItemToWhitelist(ip, port);
}
else
{
+ // 如果这个IP已经在白名单了,检查时间间隔
+ // 如果时间大于当前时间,说明是被手动禁止的(当前时间+10年+禁止时间)
+ if (list[index].LastUpdateTime > QDateTime::currentDateTime())
+ {
+ // 如果倒退十年,时间还没到,说明禁止时间未结束,直接结束本次处理
+ if (list[index].LastUpdateTime.addYears(-10) > QDateTime::currentDateTime())
+ {
+ qDebug("IP:%s 已拒绝", ip.toStdString().data());
+ goto end;
+ }
+ else
+ {
+ qDebug("IP:%s port:%d 恢复白名单", ip.toStdString().data(), port);
+ // 否则说明禁止时间已经结束了,可以恢复其白名单了
+ IpsecHelper::addItemToWhitelist(ip, port);
+ DAL::instance().updateWhiteList(list[index].ID, QDateTime::currentDateTime());
+ // 移除这个端口,防止下面再次更新
+ this->m_portList.removeAt(i);
+ }
+ }
+ // 否则判断上一次更新是不是在30秒内
+ // 如果是的话就将它移出白名单,并且设置禁止时间
+ else if (list[index].LastUpdateTime.addSecs(30) > QDateTime::currentDateTime())
+ {
+ qDebug("IP:%s port:%d 移出白名单", ip.toStdString().data(), port);
+ IpsecHelper::removeItemFromWhiteList(ip, port);
+ DAL::instance().updateWhiteList(list[index].ID, QDateTime::currentDateTime().addYears(10).addSecs(30));
+ this->m_portList.removeAt(i);
+ }
+
//qDebug("Update last login time...(检测到该IP已在白名单,更新其最后上线时间...)");
}
}
- if (DAL::instance().updateWhiteList(ip, this->m_portList))
+ if (this->m_portList.length() == 0 || DAL::instance().updateWhiteList(ip, this->m_portList))
qDebug("IP:%s 已连接", ip.toStdString().data());
else
qWarning("Update failed!(更新失败)");
@@ -89,7 +124,7 @@ void Worker::run()
DAL::instance().addItemToBlackList(ip, 8796);
qDebug("IP:%s 已拉黑", ip.toStdString().data());
}
-
+end:
// qDebug("Close Socket connection(关闭Socket连接)");
// 关闭socket连接
this->m_socket->close();
diff --git a/DaemonServiceInitializer.bat b/DaemonServiceInitializer.bat
deleted file mode 100644
index 6c8a73e..0000000
--- a/DaemonServiceInitializer.bat
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-echo Daemon Service Initialize Start...
-
-netsh ipsec static add policy name=DaemonService
-netsh ipsec static add filterlist name=whitelist
-netsh ipsec static add filterlist name=blacklist
-netsh ipsec static add filter filterlist=whitelist srcaddr=192.169.0.100 dstaddr=me protocol=ICMP
-netsh ipsec static add filter filterlist=blacklist srcaddr=192.169.0.100 dstaddr=me protocol=ICMP
-netsh ipsec static add filteraction name=permit action=permit
-netsh ipsec static add filteraction name=block action=block
-netsh ipsec static add rule name=permitRule policy=DaemonService filterlist=whitelist filteraction=permit
-netsh ipsec static add rule name=blockRule policy=DaemonService filterlist=blacklist filteraction=block
-netsh ipsec static delete filter filterlist=whitelist srcaddr=192.169.0.100 dstaddr=me protocol=ICMP
-netsh ipsec static delete filter filterlist=blacklist srcaddr=192.169.0.100 dstaddr=me protocol=ICMP
-netsh ipsec static set policy name=DaemonService assign=y
-
-rem ֹκͨTcpָ˿ڣʹ䣬dstportijɶӦ˿
-rem netsh ipsec static add filter filterlist=blacklist srcaddr=any dstaddr=me protocol=TCP dstport=9876
-
-echo End of initialization
-pause
\ No newline at end of file
diff --git a/README.md b/README.md
index 3ebd5f9..f011be5 100644
--- a/README.md
+++ b/README.md
@@ -1,38 +1,37 @@
# DaemonService
-ݿ
-dal.cpp
-dal.h
+ʹ**Qt 5.6** ݿʹ**SQLite**
-
-ipsechelper.cpp
-ipsechelper.h
+ԭDz**windowsذȫ**
-߳
-worker.cpp
-worker.h
+нͼ
+
-־
-log.cpp
-log.h
-
-md5ࣨδʹã
-md5.cpp
-md5.h
-
-ӳء̷߳䡢
-daemonservice.cpp
-daemonservice.h
-
-ػʼű
-DaemonServiceInitializer.bat
-
-QtĿļ
-DaemonService.pro
-
-Դļ
-res.qrc
-uac.rc
-
-ͼļ
-Daemon.ico
\ No newline at end of file
+#### ļṹ
+- ݿ
+ - dal.cpp
+ - dal.h
+-
+ - ipsechelper.cpp
+ - ipsechelper.h
+- ߳
+ - worker.cpp
+ - worker.h
+- ־
+ - log.cpp
+ - log.h
+- md5ࣨδʹã
+ - md5.cpp
+ - md5.h
+- ӳء̷߳䡢
+ - daemonservice.cpp
+ - daemonservice.h
+- ػʼű
+ - DaemonServiceInitializer.bat
+- QtĿļ
+ - DaemonService.pro
+- Դļ
+ - res.qrc
+ - uac.rc
+- ͼļ
+ - Daemon.ico
\ No newline at end of file
diff --git a/ReadMe.png b/ReadMe.png
deleted file mode 100644
index 93935e9..0000000
Binary files a/ReadMe.png and /dev/null differ
diff --git a/UAC.manifest b/UAC.manifest
deleted file mode 100644
index b9b1f7f..0000000
--- a/UAC.manifest
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/daemonservice.cpp b/daemonservice.cpp
deleted file mode 100644
index 13cd81e..0000000
--- a/daemonservice.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "daemonservice.h"
-#include
-#include
-#include
-#include
-#include "worker.h"
-
-//DaemonService::DaemonService()
-//{
-// if (this->listen(QHostAddress::AnyIPv4, 9876))
-// qDebug("The server started successfully!");
-// else
-// qCritical("Server failed to start!Error message:%s", this->errorString().toStdString().data()); //错误信息
-//}
-
-/**
- * @brief 当有新连接进入时
- */
-void DaemonService::incomingConnection(qintptr socketDescriptor)
-{
- // qDebug("new connect is connect %d(有新的连接进入!)", socketDescriptor);
- Worker *worker = new Worker(socketDescriptor, this->m_portList);
- QThreadPool::globalInstance()->start(worker);
-}
-
diff --git a/daemonservice.h b/daemonservice.h
deleted file mode 100644
index 976661c..0000000
--- a/daemonservice.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef DAEMONSERVICE_H
-#define DAEMONSERVICE_H
-
-#include
-#include
-#include
-#include
-#include
-
-/**
- * @brief 守护服务类,单例实现
- */
-class DaemonService : public QTcpServer
-{
- Q_OBJECT
-public:
- /**
- * @brief 单例对象
- * @return 唯一对象
- */
- static DaemonService& instance()
- {
- static DaemonService obj;
- return obj;
- }
-
- void setPortList(QList portList)
- {
- this->m_portList = portList;
- }
-
-private:
- explicit DaemonService() = default;
- DaemonService(const DaemonService&) = delete;
- DaemonService& operator=(const DaemonService&) = delete;
-protected:
- /**
- * @brief 当有新连接进入时
- */
- virtual void incomingConnection(qintptr socketDescriptor);
-private:
- QList m_portList;
-};
-
-#endif // DAEMONSERVICE_H
diff --git a/dal.cpp b/dal.cpp
deleted file mode 100644
index 64bf092..0000000
--- a/dal.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-#include "dal.h"
-#include
-#include
-#include
-#include
-#include
-#include "model.h"
-
-bool DAL::updateWhiteList(QString ip, QList portList)
-{
- if (portList.empty())
- return false;
- // 先找找看指定项存不存在
- QString sql = QString("SELECT * FROM whitelist WHERE IP=? AND Port in (%1").arg(portList[0]);
- for (int i = 1; i < portList.size(); ++i)
- sql += QString(",%1").arg(portList[i]);
- sql += ");";
- QSqlQuery query;
- query.prepare(sql);
- query.addBindValue(ip);
- if(!query.exec())
- {
- qCritical()< whitelist;
- while(query.next())
- whitelist.append(WhiteListItem(query.value(0).toInt(), query.value(1).toString(), query.value(2).toInt(), query.value(3).toDateTime()));
-
- // 开始事务
- QSqlDatabase database = QSqlDatabase::database(QSqlDatabase::defaultConnection);
- database.transaction();
-
- // 检查数据库中的白名单
- for (int i = 0; i < whitelist.size(); ++i)
- {
- // 如果要更新的已经存在,则update
- if (portList.contains(whitelist[i].Port))
- {
- query.prepare("UPDATE whitelist SET LastUpdateTime = datetime(CURRENT_TIMESTAMP,'localtime') WHERE IP=? AND Port=?");
- query.addBindValue(ip);
- query.addBindValue(whitelist[i].Port);
- if(!query.exec())
- {
- qCritical()< DAL::getWhiteList(QString ip)
-{
- QList whitelist;
-
- QString sql = QString("SELECT * FROM whitelist WHERE IP=?");
- QSqlQuery query;
- query.prepare(sql);
- query.addBindValue(ip);
- if(!query.exec())
- {
- qCritical()< ports)
-{
- QString portStr = QString("%1").arg(ports[0]);
- for (int i = 0; i < ports.length(); ++i)
- portStr += QString(",%1").arg(ports[i]);
- QString sql = QString("DELETE FROM whitelist WHERE IP=? AND Port in (%1)").arg(portStr);
- QSqlQuery query;
- query.prepare(sql);
- query.addBindValue(ip);
- if(!query.exec())
- qCritical()<
-#include
-#include "model.h"
-
-class DAL
-{
-public:
- static DAL &instance()
- {
- static DAL obj;
- return obj;
- }
-
- bool updateWhiteList(int id, QDateTime lastUpdateTime);
- /**
- * @brief 更新白名单用户
- * @param ip地址
- * @param 端口列表
- * @return 是否成功
- */
- bool updateWhiteList(QString ip, QList portList);
-
- QList getWhiteList(QString ip);
- void removeFromWhiteList(QString ip);
- void removeFromWhiteList(QString ip, QList ports);
-
- bool isExistsBlackList(int port);
- bool isExistsBlackList(QString ip);
-
- bool addItemToBlackList(int port);
- bool addItemToBlackList(QString ip);
- bool addItemToBlackList(QString ip, int port);
- void removeFromBlackList(QString ip);
-
- QString getPortList();
- void setPortList(QString portList);
-private:
- DAL();
-};
-
-#endif // DAL_H
diff --git a/images/DeamonService.png b/images/DeamonService.png
new file mode 100644
index 0000000..6154e9e
Binary files /dev/null and b/images/DeamonService.png differ
diff --git a/ipsechelper.cpp b/ipsechelper.cpp
deleted file mode 100644
index b98bd5a..0000000
--- a/ipsechelper.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-#include "ipsechelper.h"
-#include
-#include
-
-void IpsecHelper::addItemToWhitelist(QString ip, int port)
-{
- ExeCmd("add", "whitelist", ip, port);
-}
-
-void IpsecHelper::removeItemFromWhiteList(QString ip, int port)
-{
- ExeCmd("delete", "whitelist", ip, port);
-}
-
-void IpsecHelper::addItemToBlackList(QString ip, int port)
-{
- ExeCmd("add", "blacklist", ip, port);
-}
-void IpsecHelper::addItemToBlackList(QString ip)
-{
- ExeCmd("add", "blacklist", ip);
-}
-void IpsecHelper::removeItemFromBlackList(QString ip, int port)
-{
- ExeCmd("delete", "blacklist", ip, port);
-}
-void IpsecHelper::removeItemFromBlackList(QString ip)
-{
- ExeCmd("delete", "blacklist", ip);
-}
-void IpsecHelper::addItemToBlackList(int port)
-{
- ExeCmd("add", "blacklist", "any", port);
-}
-
-void IpsecHelper::ExeCmd(QString cmd, QString filterlist, QString srcaddr, int port)
-{
- QProcess p(nullptr);
- p.start("netsh",
- QStringList() << "ipsec"
- << "static"
- << cmd
- << "filter"
- << ("filterlist=" + filterlist)
- << ("srcaddr=" + srcaddr)
- << "dstaddr=me"
- << "protocol=tcp"
- << "mirrored=yes"
- << QString("dstport=%1").arg(port)
- );
- p.waitForStarted();
- p.waitForFinished();
-}
diff --git a/ipsechelper.h b/ipsechelper.h
deleted file mode 100644
index 2e5a5f2..0000000
--- a/ipsechelper.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef IPSECHELPER_H
-#define IPSECHELPER_H
-
-#include
-
-class IpsecHelper
-{
-public:
- IpsecHelper() = delete;
- IpsecHelper(IpsecHelper&) = delete;
- IpsecHelper& operator=(const IpsecHelper&) = delete;
-
-
- static void addItemToWhitelist(QString ip, int port);
- static void removeItemFromWhiteList(QString ip, int port);
-
- static void addItemToBlackList(QString ip, int port);
- static void addItemToBlackList(QString ip);
- static void removeItemFromBlackList(QString ip, int port);
- static void removeItemFromBlackList(QString ip);
-
- static void addItemToBlackList(int port);
-private:
- static void ExeCmd(QString cmd, QString filterlist, QString srcaddr, int port = 0);
-};
-
-#endif // IPSECHELPER_H
diff --git a/log.cpp b/log.cpp
deleted file mode 100644
index 1d04e98..0000000
--- a/log.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#include
-#include
-#include "log.h"
-
-void Log::append(QString msg)
-{
- //保存输出相关信息到指定文件
- QFile outputFile("DaemonServiceLog.txt");
- outputFile.open(QIODevice::WriteOnly | QIODevice::Append);
- QTextStream textStream(&outputFile);
- textStream << msg << endl;
-
- emit appendEvent(msg);
-}
diff --git a/log.h b/log.h
deleted file mode 100644
index 91a1848..0000000
--- a/log.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef LOG_H
-#define LOG_H
-
-#include
-
-class Log : public QObject
-{
- Q_OBJECT
-public:
- static Log& instance()
- {
- static Log obj;
- return obj;
- }
- void append(QString msg);
-signals:
- void appendEvent(QString msg);
-
-private:
- explicit Log(QObject *parent = nullptr)
- : QObject(parent) { }
- Log(const Log&) = delete;
- Log& operator=(const Log&) = delete;
-};
-
-#endif // LOG_H
diff --git a/main.cpp b/main.cpp
deleted file mode 100644
index b256d9a..0000000
--- a/main.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "mainwindow.h"
-#include
-#include
-#include
-#include
-#include
-#include
-#include "daemonservice.h"
-#include "log.h"
-
-void customMessageHandler(QtMsgType type, const QMessageLogContext &, const QString & str);
-
-int main(int argc, char *argv[])
-{
- QApplication a(argc, argv);
- // 使用共享内存,防止程序重复启动
- QSharedMemory singleton(a.applicationName());
- if(!singleton.create(1))
- {
- QMessageBox::warning(nullptr, "Waring", "Program already running!(服务已经启动,请不要重复启动服务)");
- return 1;
- }
-
- //注册MsgHandler回调函数
- qInstallMessageHandler(customMessageHandler);
-
- MainWindow w;
- w.show();
- return a.exec();
-}
-
-// 日志
-void customMessageHandler(QtMsgType type, const QMessageLogContext &, const QString & str)
-{
- QString txtMessage;
-
- switch (type)
- {
- case QtDebugMsg: //调试信息提示
- txtMessage = QString("%1 Debug(调试):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss")).arg(str);
- break;
-
- case QtWarningMsg: //一般的warning提示
- txtMessage = QString("%1 Warning(警告):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss")).arg(str);
- break;
-
- case QtCriticalMsg: //严重错误提示
- txtMessage = QString("%1 Critical(错误):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss")).arg(str);
- break;
-
- case QtFatalMsg: //致命错误提示
- txtMessage = QString("%1 Fatal(致命错误):\t%2").arg(QDateTime::currentDateTime().toString("yy/MM/dd HH:mm:ss")).arg(str);
- break;
-
- default:
- return;
- }
-
- Log::instance().append(txtMessage);
-
- if (type == QtFatalMsg)
- abort();
-}
diff --git a/mainwindow.cpp b/mainwindow.cpp
deleted file mode 100644
index 275c5ba..0000000
--- a/mainwindow.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-#include "mainwindow.h"
-#include "ui_mainwindow.h"
-#include "daemonservice.h"
-#include "log.h"
-#include
-#include
-#include "dal.h"
-#include "ipsechelper.h"
-
-MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
-{
- ui->setupUi(this);
- setWindowIcon(QIcon(":/Daemon.ico"));
- connect(&Log::instance(), &Log::appendEvent, this, &MainWindow::log_append);
-
- ui->txtPortList->setPlainText(DAL::instance().getPortList());
-}
-
-MainWindow::~MainWindow()
-{
- delete ui;
-}
-
-QList MainWindow::getInputPortList()
-{
- QList portList;
- QString temp = ui->txtPortList->toPlainText().trimmed();
- if (temp.isEmpty())
- {
- log_append("Please enter the port number to be guarded!(请输入要保护的端口号!)");
- return portList;
- }
- QTextStream ts(&temp);
- int port = 0;
- while (!ts.atEnd())
- {
- ts >> port;
-
- if (port < 1 || port > 65535)
- {
- log_append("Illegal input detected! Please enter the correct port number!(检测到非法输入! 请输入正确的端口号!)");
- return portList;
- }
-
- portList.append(port);
- }
- return portList;
-}
-
-void MainWindow::on_pushButton_clicked()
-{
- if (ui->pushButton->text() == "启动服务")
- {
- QList portList = getInputPortList();
- if (portList.isEmpty())
- {
- log_append("Please enter the port number to be guarded!(请输入要保护的端口号!)");
- return;
- }
- DaemonService::instance().setPortList(portList);
- qDebug("The service is starting up...(服务正在启动中...)");
- // 开始监听,绑定端口为8796
- if (DaemonService::instance().listen(QHostAddress::AnyIPv4, 8796))
- {
- DAL::instance().setPortList(ui->txtPortList->toPlainText());
- qDebug("Service started successfully!(服务启动成功!)");
- ui->txtPortList->setReadOnly(true);
- ui->pushButton->setText("关闭服务");
- }
- else
- {
- qCritical() << ("Service startup failed with error message(服务启动失败,错误消息:):" + DaemonService::instance().errorString());
- }
- }
- else
- {
- qDebug("The service is shutting down...(服务正在关闭...)");
- DaemonService::instance().close();
- ui->txtPortList->setReadOnly(false);
- ui->pushButton->setText("启动服务");
- qDebug("Service closed!(服务已关闭)");
- }
-}
-
-void MainWindow::log_append(QString msg)
-{
- ui->txtLog->append(msg);
-}
-
-void MainWindow::on_btnClosePort_clicked()
-{
- QList portList = getInputPortList();
- if (portList.isEmpty())
- {
- log_append("Please enter the port number to be closed!(请输入要拦截的端口号!)");
- return;
- }
- for (int port : portList)
- {
- qDebug("正在检查端口:%d 是否已存在拦截列表", port);
- if (DAL::instance().isExistsBlackList(port))
- {
- qDebug("该端口已存在拦截列表,跳过操作");
- continue;
- }
- else
- {
- qDebug("该端口不存在拦截列表,开始添加到安全策略...");
- IpsecHelper::addItemToBlackList(port);
- DAL::instance().addItemToBlackList(port);
- qDebug("添加完成");
- }
- }
-}
-
-void MainWindow::on_BtnClear_clicked()
-{
- ui->txtLog->clear();
-}
-
-void MainWindow::on_btnAddIP_clicked()
-{
- QString ip = ui->txtIP->text();
- if (ip.isEmpty())
- {
- log_append("请输入要加入白名单的IP");
- return;
- }
- QList portList = getInputPortList();
- auto list = DAL::instance().getWhiteList(ip);
- for (int port : portList)
- {
- bool flag = false;
- for (const auto &item : list)
- {
- if (item.Port == port)
- {
- flag = true;
- break;
- }
- }
- if (!flag)
- {
- //qDebug("Add to whitelists...(正在将该IP添加到白名单...)");
- IpsecHelper::addItemToWhitelist(ip, port);
- }
- else
- {
- //qDebug("Update last login time...(检测到该IP已在白名单,更新其最后上线时间...)");
- }
- }
- if (DAL::instance().updateWhiteList(ip, portList))
- qDebug("IP:%s 已经添加", ip.toStdString().data());
- else
- qWarning("添加失败");
-}
-
-void MainWindow::on_btnRemoveIP_clicked()
-{
- QString ip = ui->txtIP->text();
- if (ip.isEmpty())
- {
- log_append("请输入要移除白名单的IP");
- return;
- }
- QList portList = getInputPortList();
- auto list = DAL::instance().getWhiteList(ip);
- for (int i = portList.length() - 1; i >= 0; --i)
- {
- bool flag = false;
- for (const auto &item : list)
- {
- if (item.Port == portList[i])
- {
- flag = true;
- break;
- }
- }
- if (flag)
- {
- IpsecHelper::removeItemFromWhiteList(ip, portList[i]);
- }
- else
- {
- portList.removeAt(i);
- }
- }
- if (portList.length() < 1)
- qDebug("IP:%s 不存在白名单中", ip.toStdString().data());
- else
- {
- DAL::instance().removeFromWhiteList(ip, portList);
- qDebug("IP:%s 已移出指定端口白名单", ip.toStdString().data());
- }
-}
-
-void MainWindow::on_btnAddBlackIP_clicked()
-{
- QString ip = ui->txtBlackIP->text();
- if (ip.isEmpty())
- {
- log_append("请输入要加入黑名单的IP");
- return;
- }
- if (DAL::instance().isExistsBlackList(ip))
- {
- log_append("该IP已存在黑名单");
- return;
- }
-
- auto list = DAL::instance().getWhiteList(ip);
- if (list.length() > 0)
- {
- log_append("正在将该ip从白名单中移出...");
- for (int i = 0; i < list.length(); ++i)
- IpsecHelper::removeItemFromWhiteList(ip, list[i].Port);
- DAL::instance().removeFromWhiteList(ip);
- log_append("移出白名单完成");
- }
-
- IpsecHelper::addItemToBlackList(ip);
- DAL::instance().addItemToBlackList(ip);
- log_append("黑名单添加完成");
-}
-
-void MainWindow::on_btnRemoveBlackIP_clicked()
-{
- QString ip = ui->txtBlackIP->text();
- if (ip.isEmpty())
- {
- log_append("请输入要移出黑名单的IP");
- return;
- }
- if (!DAL::instance().isExistsBlackList(ip))
- {
- log_append("该IP不存在于黑名单");
- return;
- }
-
- IpsecHelper::addItemToBlackList(ip);
- DAL::instance().removeFromBlackList(ip);
- log_append("黑名单移出完成");
-}
diff --git a/mainwindow.h b/mainwindow.h
deleted file mode 100644
index 3248035..0000000
--- a/mainwindow.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef MAINWINDOW_H
-#define MAINWINDOW_H
-
-#include
-
-namespace Ui {
-class MainWindow;
-}
-
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-
-public:
- explicit MainWindow(QWidget *parent = nullptr);
- ~MainWindow();
-
-private:
- QList getInputPortList();
-
-private slots:
- void on_pushButton_clicked();
- void log_append(QString msg);
- void on_btnClosePort_clicked();
-
- void on_BtnClear_clicked();
-
- void on_btnAddIP_clicked();
-
- void on_btnRemoveIP_clicked();
-
- void on_btnAddBlackIP_clicked();
-
- void on_btnRemoveBlackIP_clicked();
-
-private:
- Ui::MainWindow *ui;
-};
-
-#endif // MAINWINDOW_H
diff --git a/mainwindow.ui b/mainwindow.ui
deleted file mode 100644
index 5e8a7b3..0000000
--- a/mainwindow.ui
+++ /dev/null
@@ -1,227 +0,0 @@
-
-
- MainWindow
-
-
-
- 0
- 0
- 700
- 400
-
-
-
-
- 700
- 400
-
-
-
-
- 700
- 400
-
-
-
- DaemonService
-
-
-
-
-
- 130
- 30
- 561
- 361
-
-
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html>
-
-
-
-
-
- 10
- 30
- 111
- 71
-
-
-
- 7001
-
-
-
-
-
- 10
- 350
- 111
- 41
-
-
-
- 启动服务
-
-
-
-
-
- 10
- 10
- 91
- 16
-
-
-
- 守护端口列表:
-
-
-
-
-
- 130
- 10
- 71
- 16
-
-
-
- 日志信息:
-
-
-
-
-
- 10
- 110
- 111
- 31
-
-
-
- 封锁以上端口
-
-
-
-
-
- 650
- 10
- 41
- 21
-
-
-
- 清空
-
-
-
-
-
- 10
- 190
- 111
- 20
-
-
-
-
-
-
- 10
- 210
- 51
- 23
-
-
-
- +
-
-
-
-
-
- 70
- 210
- 51
- 23
-
-
-
- -
-
-
-
-
-
- 10
- 170
- 54
- 12
-
-
-
- 白名单IP:
-
-
-
-
-
- 10
- 250
- 54
- 12
-
-
-
- 黑名单IP:
-
-
-
-
-
- 10
- 290
- 51
- 23
-
-
-
- +
-
-
-
-
-
- 10
- 270
- 111
- 20
-
-
-
-
-
-
- 70
- 290
- 51
- 23
-
-
-
- -
-
-
-
-
-
-
-
-
diff --git a/md5.cpp b/md5.cpp
deleted file mode 100644
index ab7370d..0000000
--- a/md5.cpp
+++ /dev/null
@@ -1,394 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-#include "md5.h"
-
-/* POINTER defines a generic pointer type */
-typedef unsigned char *POINTER;
-
-/* UINT2 defines a two byte word */
-typedef unsigned short int UINT2;
-
-/* UINT4 defines a four byte word */
-typedef unsigned long int UINT4;
-
-#define PROTO_LIST(list) list
-
-/* MD5 context. */
-typedef struct _MD5_CTX
-{
- UINT4 state[4]; /* state (ABCD) */
- UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-} MD5_CTX;
-
-/* Constants for MD5Transform routine.
-*/
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-static unsigned char PADDING[64] = {
-0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-/* F, G, H and I are basic MD5 functions.
-*/
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/* ROTATE_LEFT rotates x left n bits.
-*/
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
-Rotation is separate from addition to prevent recomputation.
-*/
-#define FF(a, b, c, d, x, s, ac) { (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac);(a) = ROTATE_LEFT ((a), (s)); (a) += (b);}
-#define GG(a, b, c, d, x, s, ac) {(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac);(a) = ROTATE_LEFT ((a), (s)); (a) += (b); }
-#define HH(a, b, c, d, x, s, ac) {(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac);(a) = ROTATE_LEFT ((a), (s)); (a) += (b);}
-#define II(a, b, c, d, x, s, ac) {(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac);(a) = ROTATE_LEFT ((a), (s));(a) += (b);}
-
-#define TEST_BLOCK_LEN 1000
-#define TEST_BLOCK_COUNT 1000
-
-static void MD5Transform PROTO_LIST((UINT4[4], unsigned char[64]));
-static void Encode PROTO_LIST((unsigned char *, UINT4 *, unsigned int));
-static void Decode PROTO_LIST((UINT4 *, unsigned char *, unsigned int));
-static void MD5_memcpy PROTO_LIST((POINTER, POINTER, unsigned int));
-static void MD5_memset PROTO_LIST((POINTER, int, unsigned int));
-static void MD5Init PROTO_LIST((MD5_CTX *));
-static void MD5Update PROTO_LIST((MD5_CTX *, unsigned char *, unsigned int));
-static void MD5Final PROTO_LIST((unsigned char[16], MD5_CTX *));
-static void MDTimeTrial PROTO_LIST((void));
-static void StringAddOne PROTO_LIST((char *));
-static void Encode PROTO_LIST((unsigned char *, UINT4 *, unsigned int));
-static void Decode PROTO_LIST((UINT4 *, unsigned char *, unsigned int));
-
-/* MD5 initialization. Begins an MD5 operation, writing a new context.
-*/
-static void MD5Init(MD5_CTX *context)
-{
- context->count[0] = context->count[1] = 0;
- /* Load magic initialization constants.
- */
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
-}
-
-/* MD5 block update operation. Continues an MD5 message-digest
-operation, processing another message block, and updating the
-context.
-*/
-static void MD5Update(
- MD5_CTX *context, /* context */
- unsigned char *input, /* input block */
- unsigned int inputLen /* length of input block */
-)
-{
- unsigned int i, index, partLen;
-
- /* Compute number of bytes mod 64 */
- index = (unsigned int)((context->count[0] >> 3) & 0x3F);
-
- /* Update number of bits */
- if ((context->count[0] += ((UINT4)inputLen << 3))
- < ((UINT4)inputLen << 3))
- context->count[1]++;
- context->count[1] += ((UINT4)inputLen >> 29);
-
- partLen = 64 - index;
-
- /* Transform as many times as possible.
- */
- if (inputLen >= partLen) {
- MD5_memcpy
- ((POINTER)&context->buffer[index], (POINTER)input, partLen);
- MD5Transform(context->state, context->buffer);
-
- for (i = partLen; i + 63 < inputLen; i += 64)
- MD5Transform(context->state, &input[i]);
-
- index = 0;
- }
- else
- i = 0;
-
- /* Buffer remaining input */
- MD5_memcpy
- ((POINTER)&context->buffer[index], (POINTER)&input[i],
- inputLen - i);
-}
-
-/* MD5 finalization. Ends an MD5 message-digest operation, writing the
-the message digest and zeroizing the context.
-*/
-static void MD5Final(
- unsigned char digest[16], /* message digest */
- MD5_CTX *context /* context */
-)
-{
- unsigned char bits[8];
- unsigned int index, padLen;
-
- /* Save number of bits */
- Encode(bits, context->count, 8);
-
- /* Pad out to 56 mod 64.
- */
- index = (unsigned int)((context->count[0] >> 3) & 0x3f);
- padLen = (index < 56) ? (56 - index) : (120 - index);
- MD5Update(context, PADDING, padLen);
-
- /* Append length (before padding) */
- MD5Update(context, bits, 8);
-
- /* Store state in digest */
- Encode(digest, context->state, 16);
-
- /* Zeroize sensitive information.
- */
- MD5_memset((POINTER)context, 0, sizeof(*context));
-}
-
-/* MD5 basic transformation. Transforms state based on block.
-*/
-static void MD5Transform(
- UINT4 state[4],
- unsigned char block[64]
-)
-{
- UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
- Decode(x, block, 64);
-
- /* Round 1 */
- FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
- FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
- FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
- FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
- FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
- FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
- FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
- FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
- FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
- FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
- FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
- FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
- FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
- FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
- FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
- FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
- GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
- GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
- GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
- GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
- GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
- GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
- GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
- GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
- GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
- GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
- GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
- GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
- GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
- GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
- GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
- GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
- /* Round 3 */
- HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
- HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
- HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
- HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
- HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
- HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
- HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
- HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
- HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
- HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
- HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
- HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
- HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
- HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
- HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
- HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
-
- /* Round 4 */
- II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
- II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
- II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
- II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
- II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
- II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
- II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
- II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
- II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
- II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
- II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
- II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
- II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
- II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
- II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
- II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
-
- /* Zeroize sensitive information.
- */
- MD5_memset((POINTER)x, 0, sizeof(x));
-}
-
-/* Encodes input (UINT4) into output (unsigned char). Assumes len is
-a multiple of 4.
-*/
-static void Encode(
- unsigned char *output,
- UINT4 *input,
- unsigned int len
-)
-{
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4) {
- output[j] = (unsigned char)(input[i] & 0xff);
- output[j + 1] = (unsigned char)((input[i] >> 8) & 0xff);
- output[j + 2] = (unsigned char)((input[i] >> 16) & 0xff);
- output[j + 3] = (unsigned char)((input[i] >> 24) & 0xff);
- }
-}
-
-/* Decodes input (unsigned char) into output (UINT4). Assumes len is
-a multiple of 4.
-*/
-static void Decode(
- UINT4 *output,
- unsigned char *input,
- unsigned int len
-)
-{
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((UINT4)input[j]) | (((UINT4)input[j + 1]) << 8) |
- (((UINT4)input[j + 2]) << 16) | (((UINT4)input[j + 3]) << 24);
-}
-
-/* Note: Replace "for loop" with standard memcpy if possible.
-*/
-static void MD5_memcpy(
- POINTER output,
- POINTER input,
- unsigned int len
-)
-{
- unsigned int i;
-
- for (i = 0; i < len; i++)
- output[i] = input[i];
-}
-
-/* Note: Replace "for loop" with standard memset if possible.
-*/
-static void MD5_memset(
- POINTER output,
- int value,
- unsigned int len
-)
-{
- unsigned int i;
-
- for (i = 0; i < len; i++)
- ((char *)output)[i] = (char)value;
-}
-
-/* Digests a string and prints the result.
-*/
-char* MD5String(char *string, unsigned int len)
-{
- MD5_CTX context;
- unsigned char digest[16];
- char output1[33];
- static char output[33] = { "" };
- int i;
-
- MD5Init(&context);
- MD5Update(&context, (unsigned char*)string, len);
- MD5Final(digest, &context);
-
- for (i = 0; i < 16; i++)
- {
- sprintf(&(output1[2 * i]), "%02x", (unsigned char)digest[i]);
- sprintf(&(output1[2 * i + 1]), "%02x", (unsigned char)(digest[i] << 4));
- }
- for (i = 0; i < 32; i++)
- {
- output[i] = output1[i];
- }
- return output;
-}
-
-/* get the string add one.
-*/
-static void StringAddOne(char * orstring)
-{
- unsigned int len;
- int i, n;
-
- len = strlen(orstring);
- n = len - 1;
- for (i = n; i >= 0; i--)
- {
- if (orstring[i] == '9')
- {
- orstring[i] = 'A';
- break;
- }
- else if (orstring[i] == 'Z')
- {
- orstring[i] = 'a';
- break;
- }
- else if (orstring[i] == 'z')
- {
- orstring[i] = '0';
- continue;
- }
- else
- orstring[i] += 1;
- break;
- }
-}
-
-/* check the md5 strings one by one,get the password.
-*/
-bool MD5Check(char *md5string, char* string, unsigned int stringlen)
-{
- return strcmp(md5string, MD5String(string, stringlen)) == 0;
-}
diff --git a/md5.h b/md5.h
deleted file mode 100644
index 67ec8b5..0000000
--- a/md5.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __MD5_H_
-#define __MD5_H_
-
-
-char* MD5String( char* string ,unsigned int stringlen);
-
-
-bool MD5Check( char *md5string, char* string ,unsigned int stringlen);
-
-#endif //_MD5_H_
diff --git a/model.h b/model.h
deleted file mode 100644
index 5aeac4e..0000000
--- a/model.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef MODEL_H
-#define MODEL_H
-#include
-#include
-
-struct BlackListItem
-{
- BlackListItem(){}
- BlackListItem(int id, QString ip, QDateTime time, QString remarks)
- : ID(id), IP(ip), Time(time), Remarks(remarks) {}
- int ID;
- QString IP;
- QDateTime Time;
- QString Remarks;
-};
-struct WhiteListItem
-{
- WhiteListItem(){}
- WhiteListItem(int id, QString ip, int port, QDateTime time)
- : ID(id), IP(ip), Port(port), LastUpdateTime(time) {}
- int ID;
- QString IP;
- int Port;
- QDateTime LastUpdateTime;
-};
-#endif // MODEL_H
diff --git a/res.qrc b/res.qrc
deleted file mode 100644
index 4e72c4f..0000000
--- a/res.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- Daemon.ico
-
-
diff --git a/uac.rc b/uac.rc
deleted file mode 100644
index 686301f..0000000
--- a/uac.rc
+++ /dev/null
@@ -1 +0,0 @@
-1 24 DISCARDABLE "UAC.manifest"
\ No newline at end of file
diff --git a/worker.cpp b/worker.cpp
deleted file mode 100644
index e8ed537..0000000
--- a/worker.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-#include "worker.h"
-#include "md5.h"
-#include "dal.h"
-#include "model.h"
-#include "ipsechelper.h"
-
-void Worker::run()
-{
- if (this->m_portList.empty())
- return;
- this->m_socket = new QTcpSocket();
- this->m_socket->setSocketDescriptor(this->m_socketDescriptor);
- QString ip = m_socket->peerAddress().toString();
- if (!this->m_socket->waitForConnected(5000))
- {
- qDebug("IP:%s Connect Fail(该IP连接失败)", ip.toStdString().data());
- return;
- }
- // qDebug("IP:%s Connect Success, Waiting for verification...(该IP连接成功,等待发送校验信息)", ip.data());
-
- if (this->m_socket->waitForReadyRead(1000))
- {
- QByteArray data = this->m_socket->readAll();
- // qDebug("IP:%s send data:'%s' ---- Verifying password...(正在校验中...)", ip.data(), data.toStdString().data());
-
- // 校验
-// if (data.toStdString()
-// == MD5("asdfas35.v;cxv-123"
-// + MD5("xck3dy$^@1309uyrew"
-// + ip.toStdString()
-// + "ioer6719024yoiuew6f178934056").toStr()
-// + "sjavlkc907*$!@(.12i.dy1").toStr())
- QString password = ip + "asdfas35.v;cxv-123ioer6719024yosjavlkc907*$!@(.12i.dy1iuew6f178934056xck3dy$^@1309uyrew";
-
- if (1 // 不校验了
- || MD5Check(const_cast(data.toStdString().data()), const_cast(password.toStdString().data()), password.toStdString().length())
- || data.length() == password.length())
- {
- //qDebug("Verify successful!(校验成功!)");
-
- auto list = DAL::instance().getWhiteList(ip);
-
-
- // 为了防止短时间内多次连接,检查最后一次连接的时间距离现在有多久
- // 如果不超过30秒,则将其从白名单中移除
-
- for (int i = this->m_portList.length() - 1; i >= 0; --i)
- {
- int port = this->m_portList[i];
- int index;
- for (index = 0; index < list.length(); ++index)
- {
- if (list[index].Port == port)
- break;
- }
- if (index == list.length())
- {
- //qDebug("Add to whitelists...(正在将该IP添加到白名单...)");
- IpsecHelper::addItemToWhitelist(ip, port);
- }
- else
- {
- // 如果这个IP已经在白名单了,检查时间间隔
- // 如果时间大于当前时间,说明是被手动禁止的(当前时间+10年+禁止时间)
- if (list[index].LastUpdateTime > QDateTime::currentDateTime())
- {
- // 如果倒退十年,时间还没到,说明禁止时间未结束,直接结束本次处理
- if (list[index].LastUpdateTime.addYears(-10) > QDateTime::currentDateTime())
- {
- qDebug("IP:%s 已拒绝", ip.toStdString().data());
- goto end;
- }
- else
- {
- qDebug("IP:%s port:%d 恢复白名单", ip.toStdString().data(), port);
- // 否则说明禁止时间已经结束了,可以恢复其白名单了
- IpsecHelper::addItemToWhitelist(ip, port);
- DAL::instance().updateWhiteList(list[index].ID, QDateTime::currentDateTime());
- // 移除这个端口,防止下面再次更新
- this->m_portList.removeAt(i);
- }
- }
- // 否则判断上一次更新是不是在30秒内
- // 如果是的话就将它移出白名单,并且设置禁止时间
- else if (list[index].LastUpdateTime.addSecs(30) > QDateTime::currentDateTime())
- {
- qDebug("IP:%s port:%d 移出白名单", ip.toStdString().data(), port);
- IpsecHelper::removeItemFromWhiteList(ip, port);
- DAL::instance().updateWhiteList(list[index].ID, QDateTime::currentDateTime().addYears(10).addSecs(30));
- this->m_portList.removeAt(i);
- }
-
- //qDebug("Update last login time...(检测到该IP已在白名单,更新其最后上线时间...)");
- }
- }
- if (this->m_portList.length() == 0 || DAL::instance().updateWhiteList(ip, this->m_portList))
- qDebug("IP:%s 已连接", ip.toStdString().data());
- else
- qWarning("Update failed!(更新失败)");
- }
- else
- {
- //qWarning("Verification failed!(校验失败!)");
- //qWarning("正在将该IP拉黑...");
- // 校验失败,若不是算法问题,则可能是其他人想猜密码
- IpsecHelper::addItemToBlackList(ip, 8796);
- DAL::instance().addItemToBlackList(ip, 8796);
- qDebug("IP:%s 已拉黑", ip.toStdString().data());
- }
- }
- else
- {
- //qWarning("Check timeout(超过指定时间未发送任何消息,超时!)");
- // 这个连接连上以后不发任何消息,说明不是登录器的socket
- // 登录器的socket会在连接后立刻发送校验数据
- // 所以将这个IP进行记录,当这个IP累计超过一定数量次连接,则将其拉黑
- //qWarning("正在将该IP拉黑...");
- IpsecHelper::addItemToBlackList(ip, 8796);
- DAL::instance().addItemToBlackList(ip, 8796);
- qDebug("IP:%s 已拉黑", ip.toStdString().data());
- }
-end:
- // qDebug("Close Socket connection(关闭Socket连接)");
- // 关闭socket连接
- this->m_socket->close();
- this->m_socket->deleteLater();
-}
diff --git a/worker.h b/worker.h
deleted file mode 100644
index b91f3f9..0000000
--- a/worker.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef WORKER_H
-#define WORKER_H
-
-#include
-#include
-#include
-
-class Worker : public QRunnable
-{
-public:
- /**
- * @brief 唯一构造
- * @param socket对象
- */
- Worker(qintptr socketDescriptor, const QList &portList)
- : m_socketDescriptor(socketDescriptor), m_portList(portList){}
-
-protected:
- /**
- * @brief 线程运行方法
- */
- virtual void run();
-private:
- /**
- * @brief socket对象
- */
- QTcpSocket *m_socket;
- qintptr m_socketDescriptor;
- QList m_portList;
-};
-
-#endif // WORKER_H