Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
efcbff23d8 | ||
|
|
dcabfb1546 | ||
|
|
9e6d758c0f | ||
|
|
1da20feb06 | ||
|
|
3044c9b735 | ||
|
|
b44e4891a6 |
@@ -20,3 +20,8 @@ revsuit
|
|||||||
*.njsproj
|
*.njsproj
|
||||||
*.sln
|
*.sln
|
||||||
*.sw?
|
*.sw?
|
||||||
|
|
||||||
|
## node
|
||||||
|
package.json
|
||||||
|
package-lock.json
|
||||||
|
node_modules/
|
||||||
|
|||||||
@@ -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))
|
||||||
@@ -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:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
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 @@
|
|||||||
.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}
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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,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
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 64 KiB |
|
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 |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 895 KiB After Width: | Height: | Size: 764 KiB |
@@ -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
|
||||||
|
|||||||
@@ -2,4 +2,5 @@ package dns
|
|||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Enable bool
|
Enable bool
|
||||||
|
Addr string
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,5 +1,5 @@
|
|||||||
package rhttp
|
package rhttp
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
IpHeader string
|
IpHeader string `yaml:"ip_header"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||