34 changed files with 141 additions and 97 deletions
+5
View File
@@ -20,3 +20,8 @@ revsuit
*.njsproj *.njsproj
*.sln *.sln
*.sw? *.sw?
## node
package.json
package-lock.json
node_modules/
+18
View File
@@ -0,0 +1,18 @@
# Changelog
All notable changes to this project will be documented in this file.
See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [0.1.4-beta](https://github.com/Li4n0/revsuit/compare/v0.1.3-beta-fix1...v0.1.4-beta) (2021-05-27)
### Features
* **dns:** support custom dns service
port ([7fb4c97](https://github.com/Li4n0/revsuit/commit/7fb4c97279e57d120a4e4aef5dda5c8f3c024835))
* **frontend:** auto refresh data when switching back to the revsuit
console ([9b31406](https://github.com/Li4n0/revsuit/commit/9b314062a39ddc7acf7a7eab3570b24b9bb9d122))
### Bug Fixes
* **http:** fix the problem that ip_header configuration does not take
effect ([b76c39e](https://github.com/Li4n0/revsuit/commit/b76c39e2fc1ada189feb783fdec76daffa11d1c7))
+4 -4
View File
@@ -143,8 +143,8 @@ example.
#### Multi-client #### Multi-client
RevSuit supports multiple clients, and each client in the connected state receives a push of `flag`, so distributed As shown above, RevSuit supports multiple clients, and each client in the connected state receives a push of `flag`, so
scanning can be supported. distributed scanning can be supported.
#### Temporary storage queue #### Temporary storage queue
@@ -213,7 +213,7 @@ the port scan.
The running effect is as follows: The running effect is as follows:
![ftp-scan](./images/ftp-scan.gif) ![ftp-scan](images/ftp_scan.gif)
It because the FTP connection will be crashed if `Passive Address` is not accessible, we can determine whether the port It because the FTP connection will be crashed if `Passive Address` is not accessible, we can determine whether the port
is open or not based on whether the connection exits normally.For this example, we successfully detected that port 8005 is open or not based on whether the connection exits normally.For this example, we successfully detected that port 8005
@@ -236,7 +236,7 @@ Submit an issue or contact me through Weixin: `Li4n06`
### Specifically ### Specifically
Thanks to my friend [@E99plant](https://github.com/wuhan005/) for all the help and advice I received during the Thanks to my friend [@E99p1ant](https://github.com/wuhan005/) for all the help and advice I received during the
development of this project. development of this project.
## License ## License
+1 -1
View File
@@ -1 +1 @@
.custom-icons-list[data-v-05a908c2] .anticon{margin-right:6px}body[data-v-07ed630b],html[data-v-07ed630b]{height:100%;margin:0}.fade-transform-enter-active[data-v-07ed630b],.fade-transform-leave-active[data-v-07ed630b]{transition:all .3s;opacity:0}.fade-transform-enter[data-v-07ed630b],.fade-transform-leave[data-v-07ed630b]{opacity:0}.fade-transform-enter-to[data-v-07ed630b]{opacity:0}.ant-menu-item>span>a[data-v-07ed630b]{color:hsla(0,0%,100%,.65)}.ant-menu-item-selected>span>a[data-v-07ed630b]{color:#fff}#nav[data-v-07ed630b]{height:100%}#nav .trigger[data-v-07ed630b]{font-size:18px;line-height:64px;padding:0 24px;cursor:pointer;transition:color .3s}#nav .trigger[data-v-07ed630b]:hover{color:#1890ff}#nav .logo[data-v-07ed630b]{height:32px;background:#0a1d2d;margin:16px;text-align:center;font-size:1.2rem;color:#fff;padding-bottom:5px;border-bottom:2px solid #b6befa}.copyright[data-v-07ed630b]{color:#888;text-align:right;margin-right:1rem} .custom-icons-list[data-v-05a908c2] .anticon{margin-right:6px}body[data-v-2f6f0625],html[data-v-2f6f0625]{height:100%;margin:0}.fade-transform-enter-active[data-v-2f6f0625],.fade-transform-leave-active[data-v-2f6f0625]{transition:all .3s;opacity:0}.fade-transform-enter[data-v-2f6f0625],.fade-transform-leave[data-v-2f6f0625]{opacity:0}.fade-transform-enter-to[data-v-2f6f0625]{opacity:0}.ant-menu-item>span>a[data-v-2f6f0625]{color:hsla(0,0%,100%,.65)}.ant-menu-item-selected>span>a[data-v-2f6f0625]{color:#fff}#app[data-v-2f6f0625]{height:100%}#app .trigger[data-v-2f6f0625]{font-size:18px;line-height:64px;padding:0 24px;cursor:pointer;transition:color .3s}#app .trigger[data-v-2f6f0625]:hover{color:#1890ff}#app .logo[data-v-2f6f0625]{height:32px;background:#0a1d2d;margin:16px;text-align:center;font-size:1.2rem;color:#fff;padding-bottom:5px;border-bottom:2px solid #b6befa}.copyright[data-v-2f6f0625]{color:#888;text-align:right;margin-right:1rem}
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+27 -14
View File
@@ -5,13 +5,15 @@
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "revsuit-frontend",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"ant-design-vue": "^1.2.4", "ant-design-vue": "^1.2.4",
"axios": "^0.21.1", "axios": "^0.21.1",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-router": "^3.2.0" "vue-router": "^3.2.0",
"vue-visibility-change": "^1.2.1"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0", "@vue/cli-plugin-babel": "~4.5.0",
@@ -4808,7 +4810,8 @@
"node_modules/de-indent": { "node_modules/de-indent": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
"dev": true
}, },
"node_modules/debug": { "node_modules/debug": {
"version": "4.3.1", "version": "4.3.1",
@@ -6896,6 +6899,7 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
"integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
"dev": true,
"bin": { "bin": {
"he": "bin/he" "he": "bin/he"
} }
@@ -13517,6 +13521,7 @@
"version": "2.6.12", "version": "2.6.12",
"resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz", "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz",
"integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=", "integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=",
"dev": true,
"dependencies": { "dependencies": {
"de-indent": "^1.0.2", "de-indent": "^1.0.2",
"he": "^1.1.0" "he": "^1.1.0"
@@ -13528,6 +13533,11 @@
"integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
"dev": true "dev": true
}, },
"node_modules/vue-visibility-change": {
"version": "1.2.1",
"resolved": "https://registry.npm.taobao.org/vue-visibility-change/download/vue-visibility-change-1.2.1.tgz",
"integrity": "sha1-0YAIv08d4slHr+VEHuBEuenGAUE="
},
"node_modules/warning": { "node_modules/warning": {
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz", "resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz",
@@ -16426,8 +16436,7 @@
"version": "4.5.11", "version": "4.5.11",
"resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.11.tgz?cache=0&sync_timestamp=1615453605559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-vuex%2Fdownload%2F%40vue%2Fcli-plugin-vuex-4.5.11.tgz", "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.11.tgz?cache=0&sync_timestamp=1615453605559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-vuex%2Fdownload%2F%40vue%2Fcli-plugin-vuex-4.5.11.tgz",
"integrity": "sha1-9vYZvPtmyGzEU0DXMVKERjXlSL0=", "integrity": "sha1-9vYZvPtmyGzEU0DXMVKERjXlSL0=",
"dev": true, "dev": true
"requires": {}
}, },
"@vue/cli-service": { "@vue/cli-service": {
"version": "4.5.11", "version": "4.5.11",
@@ -16581,8 +16590,7 @@
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz", "resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz",
"integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=", "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=",
"dev": true, "dev": true
"requires": {}
}, },
"@vue/web-component-wrapper": { "@vue/web-component-wrapper": {
"version": "1.3.0", "version": "1.3.0",
@@ -16797,8 +16805,7 @@
"version": "5.3.1", "version": "5.3.1",
"resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz", "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz",
"integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=", "integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=",
"dev": true, "dev": true
"requires": {}
}, },
"acorn-walk": { "acorn-walk": {
"version": "7.2.0", "version": "7.2.0",
@@ -16846,15 +16853,13 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz?cache=0&sync_timestamp=1615411237786&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-errors%2Fdownload%2Fajv-errors-1.0.1.tgz", "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz?cache=0&sync_timestamp=1615411237786&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-errors%2Fdownload%2Fajv-errors-1.0.1.tgz",
"integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=",
"dev": true, "dev": true
"requires": {}
}, },
"ajv-keywords": { "ajv-keywords": {
"version": "3.5.2", "version": "3.5.2",
"resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1615647295573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz", "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1615647295573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz",
"integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=",
"dev": true, "dev": true
"requires": {}
}, },
"alphanum-sort": { "alphanum-sort": {
"version": "1.0.2", "version": "1.0.2",
@@ -18894,7 +18899,8 @@
"de-indent": { "de-indent": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
"dev": true
}, },
"debug": { "debug": {
"version": "4.3.1", "version": "4.3.1",
@@ -20627,7 +20633,8 @@
"he": { "he": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
"integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=" "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
"dev": true
}, },
"hex-color-regex": { "hex-color-regex": {
"version": "1.1.0", "version": "1.1.0",
@@ -26181,6 +26188,7 @@
"version": "2.6.12", "version": "2.6.12",
"resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz", "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz",
"integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=", "integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=",
"dev": true,
"requires": { "requires": {
"de-indent": "^1.0.2", "de-indent": "^1.0.2",
"he": "^1.1.0" "he": "^1.1.0"
@@ -26192,6 +26200,11 @@
"integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
"dev": true "dev": true
}, },
"vue-visibility-change": {
"version": "1.2.1",
"resolved": "https://registry.npm.taobao.org/vue-visibility-change/download/vue-visibility-change-1.2.1.tgz",
"integrity": "sha1-0YAIv08d4slHr+VEHuBEuenGAUE="
},
"warning": { "warning": {
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz", "resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz",
+2 -1
View File
@@ -12,7 +12,8 @@
"axios": "^0.21.1", "axios": "^0.21.1",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-router": "^3.2.0" "vue-router": "^3.2.0",
"vue-visibility-change": "^1.2.1"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0", "@vue/cli-plugin-babel": "~4.5.0",
+5 -5
View File
@@ -1,5 +1,5 @@
<template> <template>
<a-layout id="nav"> <a-layout id="app" v-visibility-change="()=>{this.$refs.content.fetch?this.$refs.content.fetch():null}">
<a-layout-sider v-model="collapsed" :trigger="null" collapsible> <a-layout-sider v-model="collapsed" :trigger="null" collapsible>
<div class="logo"><b>R</b><span v-if="!collapsed"><b>ev</b>Suit</span></div> <div class="logo"><b>R</b><span v-if="!collapsed"><b>ev</b>Suit</span></div>
<a-menu theme="dark" mode="inline" :selectedKeys="[this.$route.path]" :openKeys.sync="openKeys"> <a-menu theme="dark" mode="inline" :selectedKeys="[this.$route.path]" :openKeys.sync="openKeys">
@@ -247,11 +247,11 @@ html, body {
color: white; color: white;
} }
#nav { #app {
height: 100%; height: 100%;
} }
#nav .trigger { #app .trigger {
font-size: 18px; font-size: 18px;
line-height: 64px; line-height: 64px;
padding: 0 24px; padding: 0 24px;
@@ -259,11 +259,11 @@ html, body {
transition: color 0.3s; transition: color 0.3s;
} }
#nav .trigger:hover { #app .trigger:hover {
color: #1890ff; color: #1890ff;
} }
#nav .logo { #app .logo {
height: 32px; height: 32px;
background: #0a1d2d; background: #0a1d2d;
margin: 16px; margin: 16px;
+4
View File
@@ -4,10 +4,14 @@ import App from './App';
import router from "@/router"; import router from "@/router";
import 'ant-design-vue/dist/antd.css'; import 'ant-design-vue/dist/antd.css';
import '@/utils/index' import '@/utils/index'
import visibility from 'vue-visibility-change';
Vue.config.productionTip = false; Vue.config.productionTip = false;
Vue.use(Antd); Vue.use(Antd);
Vue.use(visibility);
export const store = Vue.observable({ export const store = Vue.observable({
authed: true, authed: true,
pageSize: localStorage.getItem("pageSize") ? parseInt(localStorage.getItem("pageSize")) : 10 pageSize: localStorage.getItem("pageSize") ? parseInt(localStorage.getItem("pageSize")) : 10
Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 206 KiB

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 133 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 895 KiB

After

Width:  |  Height:  |  Size: 764 KiB

+2 -1
View File
@@ -1,4 +1,4 @@
version: 1.0 version: 1.1
addr: :10000 addr: :10000
token: token:
domain: domain:
@@ -10,6 +10,7 @@ http:
ip_header: ip_header:
dns: dns:
enable: true enable: true
addr: :53
rmi: rmi:
enable: true enable: true
addr: :1099 addr: :1099
+1
View File
@@ -2,4 +2,5 @@ package dns
type Config struct { type Config struct {
Enable bool Enable bool
Addr string
} }
+1 -1
View File
@@ -252,7 +252,7 @@ func (s *Server) Run() {
} }
}() }()
err := server.Run(":53") err := server.Run(s.Addr)
defer server.Close() defer server.Close()
if err != nil { if err != nil {
+7 -6
View File
@@ -47,16 +47,17 @@ func ListRecords(c *gin.Context) {
res []Record res []Record
count int64 count int64
order = c.Query("order") order = c.Query("order")
pageSize int pageSize = 10
) )
if c.Query("pageSize") == "" { if c.Query("pageSize") != "" {
pageSize = 10 if n, err := strconv.Atoi(c.Query("pageSize")); err == nil {
} else if n, err := strconv.Atoi(c.Query("pageSize")); err == nil { if n > 0 && n < 100 {
if n <= 0 || n > 100 { pageSize = n
pageSize = 10 }
} }
} }
if err := c.ShouldBind(&dnsRecord); err != nil { if err := c.ShouldBind(&dnsRecord); err != nil {
c.JSON(400, gin.H{ c.JSON(400, gin.H{
"status": "failed", "status": "failed",
+6 -6
View File
@@ -80,14 +80,14 @@ func ListRules(c *gin.Context) {
res []Rule res []Rule
count int64 count int64
order = c.Query("order") order = c.Query("order")
pageSize int pageSize = 10
) )
if c.Query("pageSize") == "" { if c.Query("pageSize") != "" {
pageSize = 10 if n, err := strconv.Atoi(c.Query("pageSize")); err == nil {
} else if n, err := strconv.Atoi(c.Query("pageSize")); err == nil { if n > 0 && n < 100 {
if n <= 0 || n > 100 { pageSize = n
pageSize = 10 }
} }
} }
+6 -6
View File
@@ -59,14 +59,14 @@ func ListRecords(c *gin.Context) {
res []Record res []Record
count int64 count int64
order = c.Query("order") order = c.Query("order")
pageSize int pageSize = 10
) )
if c.Query("pageSize") == "" { if c.Query("pageSize") != "" {
pageSize = 10 if n, err := strconv.Atoi(c.Query("pageSize")); err == nil {
} else if n, err := strconv.Atoi(c.Query("pageSize")); err == nil { if n > 0 && n < 100 {
if n <= 0 || n > 100 { pageSize = n
pageSize = 10 }
} }
} }
+6 -6
View File
@@ -75,14 +75,14 @@ func ListRules(c *gin.Context) {
res []Rule res []Rule
count int64 count int64
order = c.Query("order") order = c.Query("order")
pageSize int pageSize = 10
) )
if c.Query("pageSize") == "" { if c.Query("pageSize") != "" {
pageSize = 10 if n, err := strconv.Atoi(c.Query("pageSize")); err == nil {
} else if n, err := strconv.Atoi(c.Query("pageSize")); err == nil { if n > 0 && n < 100 {
if n <= 0 || n > 100 { pageSize = n
pageSize = 10 }
} }
} }
+6 -6
View File
@@ -57,14 +57,14 @@ func ListRecords(c *gin.Context) {
res []Record res []Record
count int64 count int64
order = c.Query("order") order = c.Query("order")
pageSize int pageSize = 10
) )
if c.Query("pageSize") == "" { if c.Query("pageSize") != "" {
pageSize = 10 if n, err := strconv.Atoi(c.Query("pageSize")); err == nil {
} else if n, err := strconv.Atoi(c.Query("pageSize")); err == nil { if n > 0 && n < 100 {
if n <= 0 || n > 100 { pageSize = n
pageSize = 10 }
} }
} }
+6 -6
View File
@@ -63,14 +63,14 @@ func ListRules(c *gin.Context) {
res []Rule res []Rule
count int64 count int64
order = c.Query("order") order = c.Query("order")
pageSize int pageSize = 10
) )
if c.Query("pageSize") == "" { if c.Query("pageSize") != "" {
pageSize = 10 if n, err := strconv.Atoi(c.Query("pageSize")); err == nil {
} else if n, err := strconv.Atoi(c.Query("pageSize")); err == nil { if n > 0 && n < 100 {
if n <= 0 || n > 100 { pageSize = n
pageSize = 10 }
} }
} }
+1 -1
View File
@@ -1,5 +1,5 @@
package rhttp package rhttp
type Config struct { type Config struct {
IpHeader string IpHeader string `yaml:"ip_header"`
} }
+2 -5
View File
@@ -166,10 +166,7 @@ func (s *Server) Receive(c *gin.Context) {
continue continue
} }
var ( ip := strings.Split(c.Request.RemoteAddr, ":")[0]
ip = strings.Split(c.Request.RemoteAddr, ":")[0]
area = qqwry.Area(ip)
)
if ip1 := c.Request.Header.Get(s.IpHeader); s.IpHeader != "" && ip1 != "" { if ip1 := c.Request.Header.Get(s.IpHeader); s.IpHeader != "" && ip1 != "" {
ip = ip1 ip = ip1
@@ -177,7 +174,7 @@ func (s *Server) Receive(c *gin.Context) {
} }
// create new record // create new record
r, err := NewRecord(_rule, flag, c.Request.Method, u, ip, area, string(raw)) r, err := NewRecord(_rule, flag, c.Request.Method, u, ip, qqwry.Area(ip), string(raw))
if err != nil { if err != nil {
log.Warn("HTTP record[rule_id:%d] created failed :%s", _rule.ID, err) log.Warn("HTTP record[rule_id:%d] created failed :%s", _rule.ID, err)
code, err := strconv.Atoi(compileTpl(c, _rule.ResponseStatusCode, vars)) code, err := strconv.Atoi(compileTpl(c, _rule.ResponseStatusCode, vars))
+6 -7
View File
@@ -50,15 +50,14 @@ func ListRecords(c *gin.Context) {
res []Record res []Record
count int64 count int64
order = c.Query("order") order = c.Query("order")
pageSize int pageSize = 10
) )
if c.Query("pageSize") == "" { if c.Query("pageSize") != "" {
pageSize = 10 if n, err := strconv.Atoi(c.Query("pageSize")); err == nil {
} else if n, err := strconv.Atoi(c.Query("pageSize")); err == nil { if n > 0 && n < 100 {
pageSize = n pageSize = n
if pageSize <= 0 || pageSize > 100 { }
pageSize = 10
} }
} }
+6 -6
View File
@@ -81,14 +81,14 @@ func ListRules(c *gin.Context) {
res []Rule res []Rule
count int64 count int64
order = c.Query("order") order = c.Query("order")
pageSize int pageSize = 10
) )
if c.Query("pageSize") == "" { if c.Query("pageSize") != "" {
pageSize = 10 if n, err := strconv.Atoi(c.Query("pageSize")); err == nil {
} else if n, err := strconv.Atoi(c.Query("pageSize")); err == nil { if n > 0 && n < 100 {
if n <= 0 || n > 100 { pageSize = n
pageSize = 10 }
} }
} }
+6 -6
View File
@@ -46,14 +46,14 @@ func ListRecords(c *gin.Context) {
res []Record res []Record
count int64 count int64
order = c.Query("order") order = c.Query("order")
pageSize int pageSize = 10
) )
if c.Query("pageSize") == "" { if c.Query("pageSize") != "" {
pageSize = 10 if n, err := strconv.Atoi(c.Query("pageSize")); err == nil {
} else if n, err := strconv.Atoi(c.Query("pageSize")); err == nil { if n > 0 && n < 100 {
if n <= 0 || n > 100 { pageSize = n
pageSize = 10 }
} }
} }
+4
View File
@@ -58,6 +58,7 @@ func (s *Server) handleConnection(conn net.Conn) {
if err := conn.SetDeadline(time.Now().Add(time.Second * 30)); err != nil { if err := conn.SetDeadline(time.Now().Add(time.Second * 30)); err != nil {
log.Warn("RMI set connection deadline error:%v", err) log.Warn("RMI set connection deadline error:%v", err)
return
} }
ip, port, _ := net.SplitHostPort(conn.RemoteAddr().String()) ip, port, _ := net.SplitHostPort(conn.RemoteAddr().String())
@@ -66,6 +67,7 @@ func (s *Server) handleConnection(conn net.Conn) {
_, err := conn.Read(buf) _, err := conn.Read(buf)
if err != nil { if err != nil {
log.Warn("RMI read connection error:%v", err) log.Warn("RMI read connection error:%v", err)
return
} }
if !bytes.Contains(buf, []byte{0x4a, 0x52, 0x4d, 0x49}) { if !bytes.Contains(buf, []byte{0x4a, 0x52, 0x4d, 0x49}) {
@@ -86,6 +88,7 @@ func (s *Server) handleConnection(conn net.Conn) {
_, err = conn.Write(send) _, err = conn.Write(send)
if err != nil { if err != nil {
log.Warn("RMI write connection error: %v", err) log.Warn("RMI write connection error: %v", err)
return
} }
data := make([]byte, 512) data := make([]byte, 512)
@@ -94,6 +97,7 @@ func (s *Server) handleConnection(conn net.Conn) {
n, err := conn.Read(data) n, err := conn.Read(data)
if err != nil { if err != nil {
log.Warn("RMI read connection error: %v", err) log.Warn("RMI read connection error: %v", err)
return
} }
length += n length += n
} }
+6 -6
View File
@@ -72,14 +72,14 @@ func ListRules(c *gin.Context) {
res []Rule res []Rule
count int64 count int64
order = c.Query("order") order = c.Query("order")
pageSize int pageSize = 10
) )
if c.Query("pageSize") == "" { if c.Query("pageSize") != "" {
pageSize = 10 if n, err := strconv.Atoi(c.Query("pageSize")); err == nil {
} else if n, err := strconv.Atoi(c.Query("pageSize")); err == nil { if n > 0 && n < 100 {
if n <= 0 || n > 100 { pageSize = n
pageSize = 10 }
} }
} }
+1 -1
View File
@@ -17,7 +17,7 @@ import (
log "unknwon.dev/clog/v2" log "unknwon.dev/clog/v2"
) )
const VERSION = "0.1.3-beta" const VERSION = "0.1.4-beta"
type Revsuit struct { type Revsuit struct {
config *Config config *Config