mirror of
https://github.com/lijiejie/eyes.sh.git
synced 2026-09-22 01:30:43 +08:00
add english translation
This commit is contained in:
+8
-1
@@ -1,6 +1,7 @@
|
|||||||
# coding:utf-8
|
# coding:utf-8
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@ INSTALLED_APPS = (
|
|||||||
MIDDLEWARE = (
|
MIDDLEWARE = (
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
'django.middleware.common.CommonMiddleware',
|
'django.middleware.common.CommonMiddleware',
|
||||||
|
'django.middleware.locale.LocaleMiddleware',
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
@@ -68,12 +70,17 @@ DATABASES = {
|
|||||||
# Internationalization
|
# Internationalization
|
||||||
# https://docs.djangoproject.com/en/1.8/topics/i18n/
|
# https://docs.djangoproject.com/en/1.8/topics/i18n/
|
||||||
|
|
||||||
LANGUAGE_CODE = 'en-us'
|
LANGUAGE_CODE = 'zh-Hans'
|
||||||
TIME_ZONE = 'Asia/Shanghai'
|
TIME_ZONE = 'Asia/Shanghai'
|
||||||
USE_I18N = True
|
USE_I18N = True
|
||||||
USE_L10N = True
|
USE_L10N = True
|
||||||
USE_TZ = True
|
USE_TZ = True
|
||||||
|
LANGUAGES = (
|
||||||
|
('zh-hans', _('中文')),
|
||||||
|
('en-us', _('English')),
|
||||||
|
)
|
||||||
|
|
||||||
|
LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'),)
|
||||||
|
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
|
|||||||
+2
-1
@@ -1,6 +1,6 @@
|
|||||||
# coding=utf-8
|
# coding=utf-8
|
||||||
|
|
||||||
from django.urls import path, re_path
|
from django.urls import path, re_path, include
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from logview import views
|
from logview import views
|
||||||
|
|
||||||
@@ -23,5 +23,6 @@ urlpatterns = [
|
|||||||
re_path(r'^rebind/gen$', views.rebind_gen, name='rebind_gen'),
|
re_path(r'^rebind/gen$', views.rebind_gen, name='rebind_gen'),
|
||||||
re_path(r'^as_admin/$', views.as_admin, name='as_admin'),
|
re_path(r'^as_admin/$', views.as_admin, name='as_admin'),
|
||||||
re_path(r'^config/update$', views.config_update, name='config_update'),
|
re_path(r'^config/update$', views.config_update, name='config_update'),
|
||||||
|
path('i18n/', include('django.conf.urls.i18n')),
|
||||||
re_path(r'^.*$', views.index, name='index'),
|
re_path(r'^.*$', views.index, name='index'),
|
||||||
]
|
]
|
||||||
|
|||||||
Binary file not shown.
@@ -0,0 +1,340 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2022-04-09 23:51+0800\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <[email protected]>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: .\dnslog\settings.py:79
|
||||||
|
msgid "中文"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: .\dnslog\settings.py:80
|
||||||
|
msgid "English"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: .\logview\views.py:87 .\templates\login.html:64
|
||||||
|
msgid "登录"
|
||||||
|
msgstr "Log In"
|
||||||
|
|
||||||
|
#: .\logview\views.py:104
|
||||||
|
msgid "登录失败次数太多,锁定10分钟"
|
||||||
|
msgstr "Too many login failures, account locked"
|
||||||
|
|
||||||
|
#: .\logview\views.py:116
|
||||||
|
msgid "用户名或密码错误"
|
||||||
|
msgstr "Username or password wrong"
|
||||||
|
|
||||||
|
#: .\logview\views.py:128
|
||||||
|
msgid "随机账号功能已关闭"
|
||||||
|
msgstr "Random login disabled by admin"
|
||||||
|
|
||||||
|
#: .\logview\views.py:132
|
||||||
|
msgid "爬虫禁止登录"
|
||||||
|
msgstr "Bots login not allowed"
|
||||||
|
|
||||||
|
#: .\logview\views.py:136
|
||||||
|
msgid "随机账号超限,请注册登录"
|
||||||
|
msgstr "Random account login exceeded, please register"
|
||||||
|
|
||||||
|
#: .\logview\views.py:146
|
||||||
|
msgid "随机账号创建失败"
|
||||||
|
msgstr "Fail to generate random account"
|
||||||
|
|
||||||
|
#: .\logview\views.py:152
|
||||||
|
msgid "注册功能已关闭"
|
||||||
|
msgstr "Register disabled by admin"
|
||||||
|
|
||||||
|
#: .\logview\views.py:156
|
||||||
|
msgid "注册"
|
||||||
|
msgstr "Register"
|
||||||
|
|
||||||
|
#: .\logview\views.py:163
|
||||||
|
msgid "无法创建该账号,已被占用"
|
||||||
|
msgstr "Username Token, please choose another one"
|
||||||
|
|
||||||
|
#: .\logview\views.py:168
|
||||||
|
msgid "用户名只能包含字母或数字"
|
||||||
|
msgstr "Username must be alpha-numberic"
|
||||||
|
|
||||||
|
#: .\logview\views.py:179
|
||||||
|
msgid "注册成功,请登录以确保密码有效"
|
||||||
|
msgstr "Register succeded, please log in"
|
||||||
|
|
||||||
|
#: .\logview\views.py:222 .\logview\views.py:253
|
||||||
|
msgid "删除成功"
|
||||||
|
msgstr "Delete Success"
|
||||||
|
|
||||||
|
#: .\logview\views.py:228 .\logview\views.py:259
|
||||||
|
msgid "删除失败"
|
||||||
|
msgstr "Delete Failed"
|
||||||
|
|
||||||
|
#: .\logview\views.py:307
|
||||||
|
msgid "DNSLog管理"
|
||||||
|
msgstr "DNSLog"
|
||||||
|
|
||||||
|
#: .\logview\views.py:340
|
||||||
|
msgid "WebLog管理"
|
||||||
|
msgstr "WebLog"
|
||||||
|
|
||||||
|
#: .\logview\views.py:363
|
||||||
|
msgid "API配置"
|
||||||
|
msgstr "API"
|
||||||
|
|
||||||
|
#: .\logview\views.py:368
|
||||||
|
msgid "DNS重绑定"
|
||||||
|
msgstr "DNS Rebind"
|
||||||
|
|
||||||
|
#: .\logview\views.py:375
|
||||||
|
msgid "Payloads大全"
|
||||||
|
msgstr "Payloads"
|
||||||
|
|
||||||
|
#: .\templates\auto_reload.html:3
|
||||||
|
msgid "监视刷新"
|
||||||
|
msgstr "Auto Refresh"
|
||||||
|
|
||||||
|
#: .\templates\auto_reload.html:6
|
||||||
|
msgid "自动刷新"
|
||||||
|
msgstr "Auto Refresh"
|
||||||
|
|
||||||
|
#: .\templates\auto_reload.html:6
|
||||||
|
msgid ""
|
||||||
|
"监视频率为20秒,一旦发现新域名,本页面将自动刷新。如果希望监视特定关键词,请"
|
||||||
|
"在搜索结果页开启"
|
||||||
|
msgstr ""
|
||||||
|
"Auto reload webpage once new records found, you can also check this box on a "
|
||||||
|
"search result page to monitor any keywords you like"
|
||||||
|
|
||||||
|
#: .\templates\login.html:51
|
||||||
|
msgid "用户名即域名前缀,越短,越有利于绕过限制"
|
||||||
|
msgstr "Username will become your domain name prefix"
|
||||||
|
|
||||||
|
#: .\templates\login.html:53 .\templates\login.html:61
|
||||||
|
msgid "用户名"
|
||||||
|
msgstr "Username"
|
||||||
|
|
||||||
|
#: .\templates\login.html:54
|
||||||
|
msgid "邮箱"
|
||||||
|
msgstr "Email"
|
||||||
|
|
||||||
|
#: .\templates\login.html:55 .\templates\login.html:62
|
||||||
|
msgid "密码"
|
||||||
|
msgstr "Password"
|
||||||
|
|
||||||
|
#: .\templates\login.html:56
|
||||||
|
msgid "再次输入密码"
|
||||||
|
msgstr "Confirm password"
|
||||||
|
|
||||||
|
#: .\templates\login.html:58
|
||||||
|
msgid "创建用户"
|
||||||
|
msgstr "Register"
|
||||||
|
|
||||||
|
#: .\templates\login.html:59
|
||||||
|
msgid "已有账号?登录"
|
||||||
|
msgstr "Already have an account, login"
|
||||||
|
|
||||||
|
#: .\templates\login.html:66
|
||||||
|
msgid "注册新账号"
|
||||||
|
msgstr "Register new account"
|
||||||
|
|
||||||
|
#: .\templates\login.html:68
|
||||||
|
msgid "创建随机ID并登录"
|
||||||
|
msgstr "Login as random new user"
|
||||||
|
|
||||||
|
#: .\templates\login.html:73
|
||||||
|
msgid ""
|
||||||
|
"基于<a href=\"https://github.com/bugscanteam/dnslog/\" class=\"alert-link\" "
|
||||||
|
"target=\"_blank\">bugscan dnslog</a>开发"
|
||||||
|
msgstr ""
|
||||||
|
"Based on <a href=\"https://github.com/bugscanteam/dnslog/\" class=\"alert-"
|
||||||
|
"link\" target=\"_blank\">bugscan dnslog</a>"
|
||||||
|
|
||||||
|
#: .\templates\login.html:82 .\templates\views.html:373
|
||||||
|
msgid "提示"
|
||||||
|
msgstr "TIPS"
|
||||||
|
|
||||||
|
#: .\templates\login.html:88
|
||||||
|
msgid "随机账号创建后,无法再次登录,其数据可能被定期清理"
|
||||||
|
msgstr ""
|
||||||
|
"Generated random users can not login and access logs after session ends"
|
||||||
|
|
||||||
|
#: .\templates\login.html:89
|
||||||
|
msgid "如果你希望长期保存日志,可注册个人账号"
|
||||||
|
msgstr "You can register an account to save and view logs"
|
||||||
|
|
||||||
|
#: .\templates\login.html:93
|
||||||
|
msgid "确认创建"
|
||||||
|
msgstr "Sure, create random user for me"
|
||||||
|
|
||||||
|
#: .\templates\pager.html:34
|
||||||
|
#, python-format
|
||||||
|
msgid "第%(page)s页 / 共%(numpages)s页, 共%(total)s条记录"
|
||||||
|
msgstr "Page %(page)s / %(numpages)s , %(total)s records in total"
|
||||||
|
|
||||||
|
#: .\templates\pager.html:36
|
||||||
|
msgid "删除所有记录"
|
||||||
|
msgstr "Delete All Records"
|
||||||
|
|
||||||
|
#: .\templates\views.html:49
|
||||||
|
msgid "退出"
|
||||||
|
msgstr "Logout"
|
||||||
|
|
||||||
|
#: .\templates\views.html:57 .\templates\views.html:69
|
||||||
|
msgid "域名"
|
||||||
|
msgstr "Domain"
|
||||||
|
|
||||||
|
#: .\templates\views.html:58 .\templates\views.html:105
|
||||||
|
msgid "搜索"
|
||||||
|
msgstr "Search"
|
||||||
|
|
||||||
|
#: .\templates\views.html:59 .\templates\views.html:154
|
||||||
|
msgid "子域名"
|
||||||
|
msgstr "Sub name"
|
||||||
|
|
||||||
|
#: .\templates\views.html:72 .\templates\views.html:116
|
||||||
|
msgid "位置"
|
||||||
|
msgstr "Location"
|
||||||
|
|
||||||
|
#: .\templates\views.html:73 .\templates\views.html:117
|
||||||
|
msgid "时间"
|
||||||
|
msgstr "Time"
|
||||||
|
|
||||||
|
#: .\templates\views.html:74 .\templates\views.html:118
|
||||||
|
msgid "操作"
|
||||||
|
msgstr "Operate"
|
||||||
|
|
||||||
|
#: .\templates\views.html:87 .\templates\views.html:131
|
||||||
|
#: .\templates\views.html:384
|
||||||
|
msgid "删除"
|
||||||
|
msgstr "Delete"
|
||||||
|
|
||||||
|
#: .\templates\views.html:130 .\templates\views.html:401
|
||||||
|
msgid "查看"
|
||||||
|
msgstr "Details"
|
||||||
|
|
||||||
|
#: .\templates\views.html:157
|
||||||
|
msgid "开启用户注册功能"
|
||||||
|
msgstr "Enable register"
|
||||||
|
|
||||||
|
#: .\templates\views.html:158
|
||||||
|
msgid "开启产生随机账号"
|
||||||
|
msgstr "Enable generate random new user"
|
||||||
|
|
||||||
|
#: .\templates\views.html:167
|
||||||
|
msgid "单个请求命中查询"
|
||||||
|
msgstr "Single Query Check"
|
||||||
|
|
||||||
|
#: .\templates\views.html:174
|
||||||
|
msgid "设置为"
|
||||||
|
msgstr " "
|
||||||
|
|
||||||
|
#: .\templates\views.html:174
|
||||||
|
msgid "或者"
|
||||||
|
msgstr "or"
|
||||||
|
|
||||||
|
#: .\templates\views.html:175 .\templates\views.html:194
|
||||||
|
msgid "三级域名前缀"
|
||||||
|
msgstr "sub name prefix"
|
||||||
|
|
||||||
|
#: .\templates\views.html:177
|
||||||
|
msgid "检查是否触发"
|
||||||
|
msgstr "To check wheather a query was recieved, for example "
|
||||||
|
|
||||||
|
#: .\templates\views.html:177
|
||||||
|
msgid "访问"
|
||||||
|
msgstr "visit"
|
||||||
|
|
||||||
|
#: .\templates\views.html:179 .\templates\views.html:180
|
||||||
|
#: .\templates\views.html:205 .\templates\views.html:206
|
||||||
|
msgid "返回"
|
||||||
|
msgstr "Return"
|
||||||
|
|
||||||
|
#: .\templates\views.html:179
|
||||||
|
msgid "请求被触发"
|
||||||
|
msgstr "Query recieved"
|
||||||
|
|
||||||
|
#: .\templates\views.html:180
|
||||||
|
msgid "请求未触发"
|
||||||
|
msgstr "Query never recieved"
|
||||||
|
|
||||||
|
#: .\templates\views.html:187
|
||||||
|
msgid "多个请求命中查询"
|
||||||
|
msgstr "Multiple Queries Check"
|
||||||
|
|
||||||
|
#: .\templates\views.html:196
|
||||||
|
msgid ""
|
||||||
|
"对于一个较大的Payload集合,首先批量投递payload,再通过单个请求,来检查哪些"
|
||||||
|
"payload触发执行成功。"
|
||||||
|
msgstr ""
|
||||||
|
"After your scanner sends large number of requests includes variaties of sub "
|
||||||
|
"names. You can check weather any dns queries were captured with only one API "
|
||||||
|
"request"
|
||||||
|
|
||||||
|
#: .\templates\views.html:198 .\templates\views.html:199
|
||||||
|
#: .\templates\views.html:200
|
||||||
|
msgid "扫描器投递"
|
||||||
|
msgstr "Test"
|
||||||
|
|
||||||
|
#: .\templates\views.html:198 .\templates\views.html:199
|
||||||
|
#: .\templates\views.html:200
|
||||||
|
msgid "使用域名"
|
||||||
|
msgstr "send requests with domain"
|
||||||
|
|
||||||
|
#: .\templates\views.html:203
|
||||||
|
msgid "检查是否存在漏洞,访问"
|
||||||
|
msgstr "To check wheather any queries were captured, visit"
|
||||||
|
|
||||||
|
#: .\templates\views.html:205
|
||||||
|
msgid "漏洞未触发"
|
||||||
|
msgstr "not vulnerable"
|
||||||
|
|
||||||
|
#: .\templates\views.html:206
|
||||||
|
msgid ",漏洞被触发,data字段包含成功触发的payload清单,至多返回50个"
|
||||||
|
msgstr "vulnerable, subs in data were queried by target"
|
||||||
|
|
||||||
|
#: .\templates\views.html:221 .\templates\views.html:229
|
||||||
|
msgid "生成域名"
|
||||||
|
msgstr "Generate Domain"
|
||||||
|
|
||||||
|
#: .\templates\views.html:227
|
||||||
|
msgid "合法IP"
|
||||||
|
msgstr "Valid IP"
|
||||||
|
|
||||||
|
#: .\templates\views.html:228
|
||||||
|
msgid "非法IP"
|
||||||
|
msgstr "Invalid IP"
|
||||||
|
|
||||||
|
#: .\templates\views.html:234
|
||||||
|
msgid "DNS监控"
|
||||||
|
msgstr "Monitor DNS Query"
|
||||||
|
|
||||||
|
#: .\templates\views.html:235
|
||||||
|
msgid "HTTP监控"
|
||||||
|
msgstr "Monitor HTTP Request"
|
||||||
|
|
||||||
|
#: .\templates\views.html:379
|
||||||
|
#, python-format
|
||||||
|
msgid " 是否清空全部 <b>%(total)s</b> 条记录?删除后数据无法恢复' "
|
||||||
|
msgstr ""
|
||||||
|
"This will delete all <b>%(total)s</b> records, data can not be recovered, "
|
||||||
|
"continue?"
|
||||||
|
|
||||||
|
#: .\templates\views.html:382
|
||||||
|
msgid "关闭"
|
||||||
|
msgstr "Close"
|
||||||
|
|
||||||
|
#: .\templates\views.html:398
|
||||||
|
msgid "收起"
|
||||||
|
msgstr "Collapse"
|
||||||
+22
-21
@@ -19,6 +19,7 @@ from django.contrib.auth.models import User as SysUser
|
|||||||
from django.contrib.auth import authenticate, login
|
from django.contrib.auth import authenticate, login
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import logout
|
from django.contrib.auth import logout
|
||||||
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
|
||||||
def get_city_by_ip(ip):
|
def get_city_by_ip(ip):
|
||||||
@@ -83,7 +84,7 @@ def do_login(request):
|
|||||||
if userid:
|
if userid:
|
||||||
return HttpResponseRedirect('/dns/')
|
return HttpResponseRedirect('/dns/')
|
||||||
|
|
||||||
context = {'title': '登录', 'enable_register': 'yes', 'enable_create_random_user': 'yes'}
|
context = {'title': _('登录'), 'enable_register': 'yes', 'enable_create_random_user': 'yes'}
|
||||||
c = Config.objects.filter(name='enable_register')
|
c = Config.objects.filter(name='enable_register')
|
||||||
if c and 'no' == c[0].value:
|
if c and 'no' == c[0].value:
|
||||||
context['enable_register'] = 'no'
|
context['enable_register'] = 'no'
|
||||||
@@ -100,7 +101,7 @@ def do_login(request):
|
|||||||
if user.try_login_counter > 10 and (timezone.now() - user.last_try_login_time).seconds < 600:
|
if user.try_login_counter > 10 and (timezone.now() - user.last_try_login_time).seconds < 600:
|
||||||
user.try_login_counter += 1
|
user.try_login_counter += 1
|
||||||
user.save()
|
user.save()
|
||||||
context['error_msg'] = '登录失败次数太多,锁定10分钟'
|
context['error_msg'] = _('登录失败次数太多,锁定10分钟')
|
||||||
return render(request, 'login.html', context)
|
return render(request, 'login.html', context)
|
||||||
if user.password == hashlib.md5((password + username[:3] + '@dnslog').encode('utf-8')).hexdigest():
|
if user.password == hashlib.md5((password + username[:3] + '@dnslog').encode('utf-8')).hexdigest():
|
||||||
request.session['userid'] = user.id
|
request.session['userid'] = user.id
|
||||||
@@ -112,7 +113,7 @@ def do_login(request):
|
|||||||
else:
|
else:
|
||||||
user.try_login_counter += 1
|
user.try_login_counter += 1
|
||||||
user.save()
|
user.save()
|
||||||
context['error_msg'] = '用户名或密码错误'
|
context['error_msg'] = _('用户名或密码错误')
|
||||||
return render(request, 'login.html', context)
|
return render(request, 'login.html', context)
|
||||||
|
|
||||||
if User.objects.count() < 1:
|
if User.objects.count() < 1:
|
||||||
@@ -124,15 +125,15 @@ def do_login(request):
|
|||||||
def random_id_login(request):
|
def random_id_login(request):
|
||||||
c = Config.objects.filter(name='enable_create_random_user')
|
c = Config.objects.filter(name='enable_create_random_user')
|
||||||
if c and 'no' == c[0].value:
|
if c and 'no' == c[0].value:
|
||||||
return redirect('/login?msg=随机账号功能已关闭')
|
return redirect('/login?msg=' + _('随机账号功能已关闭'))
|
||||||
|
|
||||||
user_agent = request.META.get('HTTP_USER_AGENT').lower()
|
user_agent = request.META.get('HTTP_USER_AGENT').lower()
|
||||||
if user_agent.find('bot') > 0 or user_agent.find('spider') > 0:
|
if user_agent.find('bot') > 0 or user_agent.find('spider') > 0:
|
||||||
return redirect('/login?msg=爬虫禁止登录')
|
return redirect('/login?msg=' + _('爬虫禁止登录'))
|
||||||
|
|
||||||
user_ip = request.META.get('HTTP_X_REAL_IP') or request.META.get('REMOTE_ADDR')
|
user_ip = request.META.get('HTTP_X_REAL_IP') or request.META.get('REMOTE_ADDR')
|
||||||
if User.objects.filter(login_ip=user_ip).count() > 20:
|
if User.objects.filter(login_ip=user_ip).count() > 20:
|
||||||
return redirect('/login?msg=随机账号超限,请注册登录')
|
return redirect('/login?msg=' + _('随机账号超限,请注册登录'))
|
||||||
for _ in range(30):
|
for _ in range(30):
|
||||||
username = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
|
username = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
|
||||||
if not User.objects.filter(username=username):
|
if not User.objects.filter(username=username):
|
||||||
@@ -142,29 +143,29 @@ def random_id_login(request):
|
|||||||
request.session['userid'] = user.id
|
request.session['userid'] = user.id
|
||||||
request.session['username'] = username
|
request.session['username'] = username
|
||||||
return redirect('/dns/')
|
return redirect('/dns/')
|
||||||
return redirect('/login?msg=随机账号创建失败')
|
return redirect('/login?msg=' + _('随机账号创建失败'))
|
||||||
|
|
||||||
|
|
||||||
def register(request):
|
def register(request):
|
||||||
c = Config.objects.filter(name='enable_register')
|
c = Config.objects.filter(name='enable_register')
|
||||||
if c and 'no' == c[0].value:
|
if c and 'no' == c[0].value:
|
||||||
return redirect('/login?msg=注册功能已关闭')
|
return redirect('/login?msg=' + _('注册功能已关闭'))
|
||||||
username = request.POST.get('username', '')[:100]
|
username = request.POST.get('username', '')[:100]
|
||||||
password = request.POST.get('password', '')[:100]
|
password = request.POST.get('password', '')[:100]
|
||||||
email = request.POST.get('email', '')[:100]
|
email = request.POST.get('email', '')[:100]
|
||||||
context = {'title': '注册', 'reg': 'true', 'error_msg': '',
|
context = {'title': _('注册'), 'reg': 'true', 'error_msg': '',
|
||||||
'username': username, 'password': password, 'email': email}
|
'username': username, 'password': password, 'email': email}
|
||||||
if User.objects.count() < 1:
|
if User.objects.count() < 1:
|
||||||
context['init'] = 'true'
|
context['init'] = 'true'
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
if User.objects.filter(username=username):
|
if User.objects.filter(username=username):
|
||||||
context['error_msg'] = '无法创建该账号,已被占用'
|
context['error_msg'] = _('无法创建该账号,已被占用')
|
||||||
return render(request, 'login.html', context)
|
return render(request, 'login.html', context)
|
||||||
else:
|
else:
|
||||||
m = re.match('[a-zA-Z0-9]+', username)
|
m = re.match('[a-zA-Z0-9]+', username)
|
||||||
if not m or len(m.group()) != len(username):
|
if not m or len(m.group()) != len(username):
|
||||||
context['error_msg'] = '用户名只能包含字母或数字'
|
context['error_msg'] = _('用户名只能包含字母或数字')
|
||||||
return render(request, 'login.html', context)
|
return render(request, 'login.html', context)
|
||||||
password = hashlib.md5((password + username[:3] + '@dnslog').encode('utf-8')).hexdigest()
|
password = hashlib.md5((password + username[:3] + '@dnslog').encode('utf-8')).hexdigest()
|
||||||
token = hashlib.md5((password + username[:3] + '@token').encode('utf-8')).hexdigest()[:8]
|
token = hashlib.md5((password + username[:3] + '@token').encode('utf-8')).hexdigest()[:8]
|
||||||
@@ -175,7 +176,7 @@ def register(request):
|
|||||||
SysUser.objects.create_user(username=username, email=email, password=password,
|
SysUser.objects.create_user(username=username, email=email, password=password,
|
||||||
is_staff=1, is_superuser=1)
|
is_staff=1, is_superuser=1)
|
||||||
user.save()
|
user.save()
|
||||||
return redirect('/login?msg=注册成功,请登录以确保密码有效')
|
return redirect('/login?msg=' + _('注册成功,请登录以确保密码有效'))
|
||||||
|
|
||||||
return render(request, 'login.html', context)
|
return render(request, 'login.html', context)
|
||||||
|
|
||||||
@@ -218,13 +219,13 @@ def dns_delete(request):
|
|||||||
if obj:
|
if obj:
|
||||||
if user.username != 'demo':
|
if user.username != 'demo':
|
||||||
obj.delete()
|
obj.delete()
|
||||||
return redirect(url+'&suc=删除成功')
|
return redirect(url+'&suc=' + _('删除成功'))
|
||||||
else:
|
else:
|
||||||
if request.GET.get("domain"):
|
if request.GET.get("domain"):
|
||||||
url += "&domain=" + request.GET.get("domain")
|
url += "&domain=" + request.GET.get("domain")
|
||||||
if request.GET.get("ip"):
|
if request.GET.get("ip"):
|
||||||
url += "&ip=" + request.GET.get("ip")
|
url += "&ip=" + request.GET.get("ip")
|
||||||
return redirect(url+"&fail=删除失败")
|
return redirect(url+"&fail=" + _("删除失败"))
|
||||||
|
|
||||||
|
|
||||||
def web_delete(request):
|
def web_delete(request):
|
||||||
@@ -249,13 +250,13 @@ def web_delete(request):
|
|||||||
if obj:
|
if obj:
|
||||||
if user.username != 'demo':
|
if user.username != 'demo':
|
||||||
obj.delete()
|
obj.delete()
|
||||||
return redirect(url+'&suc=删除成功')
|
return redirect(url+'&suc=' + _('删除成功'))
|
||||||
else:
|
else:
|
||||||
if request.GET.get("domain"):
|
if request.GET.get("domain"):
|
||||||
url += "&domain=" + request.GET.get("domain")
|
url += "&domain=" + request.GET.get("domain")
|
||||||
if request.GET.get("ip"):
|
if request.GET.get("ip"):
|
||||||
url += "&ip=" + request.GET.get("ip")
|
url += "&ip=" + request.GET.get("ip")
|
||||||
return redirect(url+"&fail=删除失败")
|
return redirect(url+"&fail=" + _("删除失败"))
|
||||||
|
|
||||||
|
|
||||||
def web_view(request):
|
def web_view(request):
|
||||||
@@ -303,7 +304,7 @@ def log_view(request, type):
|
|||||||
return HttpResponse('noChange')
|
return HttpResponse('noChange')
|
||||||
else:
|
else:
|
||||||
return HttpResponse('Changed')
|
return HttpResponse('Changed')
|
||||||
context['title'] = 'DNSLog管理'
|
context['title'] = _('DNSLog管理')
|
||||||
context['page'] = page
|
context['page'] = page
|
||||||
context['logs'] = logs
|
context['logs'] = logs
|
||||||
context['numpages'] = paginator.num_pages
|
context['numpages'] = paginator.num_pages
|
||||||
@@ -336,7 +337,7 @@ def log_view(request, type):
|
|||||||
return HttpResponse('noChange')
|
return HttpResponse('noChange')
|
||||||
else:
|
else:
|
||||||
return HttpResponse('Changed')
|
return HttpResponse('Changed')
|
||||||
context['title'] = 'WebLog管理'
|
context['title'] = _('WebLog管理')
|
||||||
context['page'] = page
|
context['page'] = page
|
||||||
context['logs'] = logs
|
context['logs'] = logs
|
||||||
context['numpages'] = paginator.num_pages
|
context['numpages'] = paginator.num_pages
|
||||||
@@ -359,19 +360,19 @@ def log_view(request, type):
|
|||||||
c = Config.objects.filter(name=c_name)
|
c = Config.objects.filter(name=c_name)
|
||||||
if c and 'no' == c[0].value:
|
if c and 'no' == c[0].value:
|
||||||
context[c_name] = 'no'
|
context[c_name] = 'no'
|
||||||
context['title'] = 'API配置'
|
context['title'] = _('API配置')
|
||||||
context['last_id'] = context['total'] = context['page'] = 0
|
context['last_id'] = context['total'] = context['page'] = 0
|
||||||
context['query_prefix'] = ''
|
context['query_prefix'] = ''
|
||||||
context['host'] = request.scheme + '://' + request.get_host()
|
context['host'] = request.scheme + '://' + request.get_host()
|
||||||
elif type == 'rebind':
|
elif type == 'rebind':
|
||||||
context['title'] = 'DNS重绑定'
|
context['title'] = _('DNS重绑定')
|
||||||
context['last_id'] = 0
|
context['last_id'] = 0
|
||||||
context['total'] = 0
|
context['total'] = 0
|
||||||
context['page'] = 0
|
context['page'] = 0
|
||||||
context['query_prefix'] = ''
|
context['query_prefix'] = ''
|
||||||
context['host'] = request.scheme + '://' + request.get_host()
|
context['host'] = request.scheme + '://' + request.get_host()
|
||||||
elif type == 'payloads':
|
elif type == 'payloads':
|
||||||
context['title'] = 'Payloads大全'
|
context['title'] = _('Payloads大全')
|
||||||
else:
|
else:
|
||||||
return HttpResponseRedirect('/')
|
return HttpResponseRedirect('/')
|
||||||
context['userdomain'] = user.user_domain + '.' + settings.DNS_DOMAIN
|
context['userdomain'] = user.user_domain + '.' + settings.DNS_DOMAIN
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ body {
|
|||||||
body {
|
body {
|
||||||
display: -ms-flexbox;
|
display: -ms-flexbox;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
-ms-flex-align: center;
|
-ms-flex-align: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding-top: 40px;
|
padding-top: 40px;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
{% load i18n %}
|
||||||
<div style="margin-left: auto;">
|
<div style="margin-left: auto;">
|
||||||
<label><input type="checkbox" class="form-control ml-5 mr-2" id="auto_refresh" {% if monitor == 'true' %} checked {% endif %}>监视刷新</label>
|
<label><input type="checkbox" class="form-control ml-5 mr-2" id="auto_refresh" {% if monitor == 'true' %} checked {% endif %}>{% translate '监视刷新' %}</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="mr-5 ml-2">
|
<div class="mr-5 ml-2">
|
||||||
<img src="/static/help.png" width="16" height="16" data-toggle="popover" data-trigger="hover" data-title="自动刷新" data-content="监视频率为20秒,一旦发现新域名,本页面将自动刷新。如果希望监视特定关键词,请在搜索结果页开启"/>
|
<img src="/static/help.png" width="16" height="16" data-toggle="popover" data-trigger="hover" data-title="{% translate '自动刷新' %}" data-content="{% translate '监视频率为20秒,一旦发现新域名,本页面将自动刷新。如果希望监视特定关键词,请在搜索结果页开启' %}"/>
|
||||||
</div>
|
</div>
|
||||||
+57
-17
@@ -1,4 +1,5 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
|
{% load i18n %}
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="zh-CN">
|
<html lang="zh-CN">
|
||||||
<head>
|
<head>
|
||||||
@@ -13,33 +14,63 @@
|
|||||||
<link href="{% static 'signin.css' %}" rel="stylesheet">
|
<link href="{% static 'signin.css' %}" rel="stylesheet">
|
||||||
</head>
|
</head>
|
||||||
<body class="text-center">
|
<body class="text-center">
|
||||||
|
<form action="{% url 'set_language' %}" method="post" name="langForm" style="display: none">
|
||||||
|
{% csrf_token %}
|
||||||
|
<input name="next" type="hidden" value="{{ redirect_to }}">
|
||||||
|
<select name="language">
|
||||||
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
|
{% get_available_languages as LANGUAGES %}
|
||||||
|
{% get_language_info_list for LANGUAGES as languages %}
|
||||||
|
{% for language in languages %}
|
||||||
|
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}>
|
||||||
|
{{ language.name_local }} ({{ language.code }})
|
||||||
|
</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
{{ LANGUAGE_CODE }}
|
||||||
|
<input type="submit" value="Switch">
|
||||||
|
</form>
|
||||||
|
|
||||||
<form class="form-signin" method="post"{% if reg == 'true' %} oninput='password_check.setCustomValidity(password_check.value != password.value ? "两次输入的密码不一致" : "")'{% endif %}>
|
<form class="form-signin" method="post"{% if reg == 'true' %} oninput='password_check.setCustomValidity(password_check.value != password.value ? "两次输入的密码不一致" : "")'{% endif %}>
|
||||||
<img class="mb-4" src="{% static "pentester.png" %}" width="400">
|
<img class="mb-4" src="{% static "pentester.png" %}" width="400">
|
||||||
|
<div class="form-check form-check-inline">
|
||||||
|
<input class="form-check-input" type="radio" name="lang" id="lang_zh" value="zh-hans" {% if LANGUAGE_CODE == 'zh-hans' %}checked{% endif %}>
|
||||||
|
<label class="form-check-label" for="exampleRadios1">
|
||||||
|
简体中文
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check form-check-inline ml-4 mb-3">
|
||||||
|
<input class="form-check-input" type="radio" name="lang" id="lang_en" value="en" {% if LANGUAGE_CODE == 'en-us' %}checked{% endif %}>
|
||||||
|
<label class="form-check-label" for="exampleRadios1">
|
||||||
|
English
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="alert-warning mb-2">{{ error_msg }}</div>
|
<div class="alert-warning mb-2">{{ error_msg }}</div>
|
||||||
{% if reg == 'true' %}
|
{% if reg == 'true' %}
|
||||||
<p class="alert alert-info">{% if init == 'true' %}<span style="color: red">请创建第一个账户,默认将成为管理员</span><br />{% endif %}用户名即域名前缀,越短,越有利于绕过限制</p>
|
<p class="alert alert-info">{% if init == 'true' %}<span style="color: red">请创建第一个账户,默认将成为管理员</span><br />{% endif %}{% translate '用户名即域名前缀,越短,越有利于绕过限制' %}</p>
|
||||||
|
|
||||||
<input type="text" id="username" name="username" class="form-control mt-3" placeholder="用户名" value="{{ username }}" required autofocus>
|
<input type="text" id="username" name="username" class="form-control mt-3" placeholder="{% translate '用户名' %}" value="{{ username }}" required autofocus>
|
||||||
<input type="email" id="email" name="email" class="form-control" placeholder="邮箱" value="{{ email }}" style="border-radius: 0;margin-bottom: -1px;" required autofocus>
|
<input type="email" id="email" name="email" class="form-control" placeholder="{% translate '邮箱' %}" value="{{ email }}" style="border-radius: 0;margin-bottom: -1px;" required autofocus>
|
||||||
<input type="password" id="password" name="password" class="form-control" placeholder="密码" minlength="6" value="{{ password }}" style="border-radius: 0;margin-bottom: -1px;" required>
|
<input type="password" id="password" name="password" class="form-control" placeholder="{% translate '密码' %}" minlength="6" value="{{ password }}" style="border-radius: 0;margin-bottom: -1px;" required>
|
||||||
<input type="password" id="password_check" name="password_check" class="form-control" placeholder="再次输入密码" required>
|
<input type="password" id="password_check" name="password_check" class="form-control" placeholder="{% translate '再次输入密码' %}" required>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<button class="btn btn-lg btn-primary btn-block" type="submit">创建用户</button>
|
<button class="btn btn-lg btn-primary btn-block" type="submit">{% translate '创建用户' %}</button>
|
||||||
<div class="mt-4"><a href="/login">已有账号?登录</a></div>
|
<div class="mt-4"><a href="/login">{% translate '已有账号?登录' %}</a></div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<input type="text" id="username" name="username" class="form-control" placeholder="用户名" required autofocus>
|
<input type="text" id="username" name="username" class="form-control" placeholder="{% translate '用户名' %}" required autofocus>
|
||||||
<input type="password" id="password" name="password" class="form-control" placeholder="密码" minlength="6" required>
|
<input type="password" id="password" name="password" class="form-control" placeholder="{% translate '密码' %}" minlength="6" required>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>
|
<button class="btn btn-lg btn-primary btn-block" type="submit">{% translate '登录' %}</button>
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
{% if enable_register == 'yes' %}<a href="/register">注册新账号</a> {% endif %}
|
{% if enable_register == 'yes' %}<a href="/register">{% translate '注册新账号' %}</a> {% endif %}
|
||||||
{% if enable_create_random_user == 'yes' %}
|
{% if enable_create_random_user == 'yes' %}
|
||||||
<a href="#" class="ml-5" onclick="gen_random_id(event, false)">创建随机ID并登录</a>
|
<a href="#" class="ml-5" onclick="gen_random_id(event, false)">{% translate '创建随机ID并登录' %}</a>
|
||||||
{% endif %}</div>
|
{% endif %}</div>
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="alert alert-info mt-5" role="alert">
|
<div class="alert alert-info mt-5" role="alert">
|
||||||
基于<a href="https://github.com/bugscanteam/dnslog/" class="alert-link" target="_blank">bugscan dnslog</a>开发<br/>
|
{% blocktranslate %}基于<a href="https://github.com/bugscanteam/dnslog/" class="alert-link" target="_blank">bugscan dnslog</a>开发{% endblocktranslate %}<br/>
|
||||||
</div>
|
</div>
|
||||||
<p class="mt-5 mb-3 text-muted">© 2022-2022 <a href="https://github.com/lijiejie/eyes.sh" target="_blank">LiJieJie</a><br />DNSLog / HTTPLog tool for pentesters</p>
|
<p class="mt-5 mb-3 text-muted">© 2022-2022 <a href="https://github.com/lijiejie/eyes.sh" target="_blank">LiJieJie</a><br />DNSLog / HTTPLog tool for pentesters</p>
|
||||||
</form>
|
</form>
|
||||||
@@ -48,18 +79,19 @@
|
|||||||
<div class="modal-dialog modal-dialog-centered">
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="exampleModalLabel">提示</h5>
|
<h5 class="modal-title" id="exampleModalLabel">{% translate '提示' %}</h5>
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>随机账号创建后,无法再次登录,其数据可能被定期清理 <br />
|
<p>{% translate '随机账号创建后,无法再次登录,其数据可能被定期清理' %} <br />
|
||||||
如果你希望长期保存日志,可注册个人账号</p>
|
{% translate '如果你希望长期保存日志,可注册个人账号' %}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a class="button btn-sm btn-primary" style="padding-top: 7px;" href="#"
|
<a class="button btn-sm btn-primary" style="padding-top: 7px;" href="#"
|
||||||
onclick="gen_random_id(event, true)">确认创建</a>
|
onclick="gen_random_id(event, true)">{% translate '确认创建' %}</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -74,6 +106,14 @@
|
|||||||
}
|
}
|
||||||
$('#confirmModal').modal();
|
$('#confirmModal').modal();
|
||||||
}
|
}
|
||||||
|
$('.form-check-input').change(function (e){
|
||||||
|
if (e.target.id === 'lang_zh'){
|
||||||
|
$("[name='language']").val('zh-hans');
|
||||||
|
} else {
|
||||||
|
$("[name='language']").val('en');
|
||||||
|
}
|
||||||
|
$("[name='langForm']").submit();
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
{% load i18n %}
|
||||||
<nav>
|
<nav>
|
||||||
<ul class="pagination">
|
<ul class="pagination">
|
||||||
|
|
||||||
@@ -30,9 +31,9 @@
|
|||||||
<li class="page-item disabled"><span class="page-link" aria-hidden="true">»</span></li>
|
<li class="page-item disabled"><span class="page-link" aria-hidden="true">»</span></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<span class="page-link ml-4" style="border: none">第{{ page }}页 / 共{{ numpages }}页, 共{{ total }}条记录</span>
|
<span class="page-link ml-4" style="border: none">{% blocktranslate %}第{{ page }}页 / 共{{ numpages }}页, 共{{ total }}条记录{% endblocktranslate %}</span>
|
||||||
<a class="button btn-sm btn-danger" style="padding-top: 7px;" href="delete?{{ query_prefix }}{% if page != 1 %}&page={{ page }}{% endif %}"
|
<a class="button btn-sm btn-danger" style="padding-top: 7px;" href="delete?{{ query_prefix }}{% if page != 1 %}&page={{ page }}{% endif %}"
|
||||||
onclick="delete_all(event, false)">删除所有记录</a>
|
onclick="delete_all(event, false)">{% translate '删除所有记录' %}</a>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
+46
-45
@@ -1,4 +1,5 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
|
{% load i18n %}
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="zh-CN">
|
<html lang="zh-CN">
|
||||||
<head>
|
<head>
|
||||||
@@ -45,7 +46,7 @@
|
|||||||
<path fill-rule="evenodd" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z"/>
|
<path fill-rule="evenodd" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z"/>
|
||||||
</svg>
|
</svg>
|
||||||
{{ username }}</span>
|
{{ username }}</span>
|
||||||
<a href="/logout/">退出</a>
|
<a href="/logout/">{% translate '退出' %}</a>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
{% if fail %}<div class="alert alert-danger">{{ fail }}</div>{% endif %}
|
{% if fail %}<div class="alert alert-danger">{{ fail }}</div>{% endif %}
|
||||||
@@ -53,9 +54,9 @@
|
|||||||
{% if type == 'dns'%}
|
{% if type == 'dns'%}
|
||||||
<form class="form-inline my-2 mt-md-0 input-group-sm" style="display: flex;justify-content: space-between">
|
<form class="form-inline my-2 mt-md-0 input-group-sm" style="display: flex;justify-content: space-between">
|
||||||
<div>
|
<div>
|
||||||
<input class="form-control mr-sm-2 input-sm" size="30" type="text" placeholder="域名" name="domain" value="{{ domain }}">
|
<input class="form-control mr-sm-2 input-sm" size="30" type="text" placeholder="{% translate '域名' %}" name="domain" value="{{ domain }}">
|
||||||
<button class="btn btn-sm btn-primary my-2 my-sm-0" type="submit">搜索</button>
|
<button class="btn btn-sm btn-primary my-2 my-sm-0" type="submit">{% translate '搜索' %}</button>
|
||||||
<span class="ml-5">子域名: <mark>{{userdomain}}</mark></span>
|
<span class="ml-5">{% translate '子域名' %}: <mark>{{userdomain}}</mark></span>
|
||||||
</div>
|
</div>
|
||||||
{% include 'auto_reload.html' %}
|
{% include 'auto_reload.html' %}
|
||||||
</form>
|
</form>
|
||||||
@@ -65,12 +66,12 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>ID</th>
|
<th>ID</th>
|
||||||
<th>域名</th>
|
<th>{% translate '域名' %}</th>
|
||||||
<th>Type</th>
|
<th>Type</th>
|
||||||
<th>IP</th>
|
<th>IP</th>
|
||||||
<th>位置</th>
|
<th>{% translate '位置' %}</th>
|
||||||
<th>时间</th>
|
<th>{% translate '时间' %}</th>
|
||||||
<th style="width: 100px;">操作</th>
|
<th style="width: 120px;">{% translate '操作' %}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -83,7 +84,7 @@
|
|||||||
<td>{% if log.city %} {{ log.city }} {% else %} {% endif %}</td>
|
<td>{% if log.city %} {{ log.city }} {% else %} {% endif %}</td>
|
||||||
<td>{{ log.created_time|date:'Y-m-d H:i:s' }}</td>
|
<td>{{ log.created_time|date:'Y-m-d H:i:s' }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a class="button btn-sm btn-danger" href="delete?{{ query_prefix }}id={{ log.id }}{% if page != 1 %}&page={{ page }}{% endif %}">删除</a>
|
<a class="button btn-sm btn-danger" href="delete?{{ query_prefix }}id={{ log.id }}{% if page != 1 %}&page={{ page }}{% endif %}">{% translate '删除' %}</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -101,7 +102,7 @@
|
|||||||
</select>
|
</select>
|
||||||
<input class="form-control mr-sm-2 input-sm {% if headers != '' and path == '' %}d-none{% endif %}" size="30" type="text" placeholder="URL" name="path" id="inputURL" value="{{ path }}">
|
<input class="form-control mr-sm-2 input-sm {% if headers != '' and path == '' %}d-none{% endif %}" size="30" type="text" placeholder="URL" name="path" id="inputURL" value="{{ path }}">
|
||||||
<input class="form-control mr-sm-2 input-sm {% if path != '' or headers == '' %}d-none{% endif %}" size="30" type="text" placeholder="headers" name="headers" id="inputHeaders" value="{{ headers }}">
|
<input class="form-control mr-sm-2 input-sm {% if path != '' or headers == '' %}d-none{% endif %}" size="30" type="text" placeholder="headers" name="headers" id="inputHeaders" value="{{ headers }}">
|
||||||
<button class="btn btn-sm btn-primary my-2 my-sm-0" type="submit">搜索</button>
|
<button class="btn btn-sm btn-primary my-2 my-sm-0" type="submit">{% translate '搜索' %}</button>
|
||||||
</div>
|
</div>
|
||||||
{% include 'auto_reload.html' %}
|
{% include 'auto_reload.html' %}
|
||||||
</form>
|
</form>
|
||||||
@@ -112,9 +113,9 @@
|
|||||||
<th>ID</th>
|
<th>ID</th>
|
||||||
<th style="width: 350px;">URL</th>
|
<th style="width: 350px;">URL</th>
|
||||||
<th>IP</th>
|
<th>IP</th>
|
||||||
<th>位置</th>
|
<th>{% translate '位置' %}</th>
|
||||||
<th>时间</th>
|
<th>{% translate '时间' %}</th>
|
||||||
<th style="width: 150px;">操作</th>
|
<th style="width: 170px;">{% translate '操作' %}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -126,8 +127,8 @@
|
|||||||
<td> {% if log.city %} {{ log.city }} {% else %} {% endif %} </td>
|
<td> {% if log.city %} {{ log.city }} {% else %} {% endif %} </td>
|
||||||
<td>{{ log.created_time|date:'Y-m-d H:i:s' }}</td>
|
<td>{{ log.created_time|date:'Y-m-d H:i:s' }}</td>
|
||||||
<td style="width: 150px;">
|
<td style="width: 150px;">
|
||||||
<a type="button" class="button btn-sm btn-primary" onclick="show_web_headers({{log.id}})" id="showButton_{{log.id}}">查看</a>
|
<a type="button" class="button btn-sm btn-primary" onclick="show_web_headers({{log.id}})" id="showButton_{{log.id}}">{% translate '查看' %}</a>
|
||||||
<a type="button" class="button btn-sm btn-danger" href="delete?{{ query_prefix }}id={{ log.id }}{% if page != 1 %}&page={{ page }}{% endif %}">删除</a>
|
<a type="button" class="button btn-sm btn-danger" href="delete?{{ query_prefix }}id={{ log.id }}{% if page != 1 %}&page={{ page }}{% endif %}">{% translate '删除' %}</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="d-none" id="web_headers_{{log.id}}">
|
<tr class="d-none" id="web_headers_{{log.id}}">
|
||||||
@@ -150,11 +151,11 @@
|
|||||||
<div class="card" >
|
<div class="card" >
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<p class="card-text">
|
<p class="card-text">
|
||||||
<b>子域名:</b> <mark>{{userdomain}}</mark>
|
<b>{% translate '子域名' %}:</b> <mark>{{userdomain}}</mark>
|
||||||
<b class="ml-4">Token:</b> <mark>{{token}}</mark>
|
<b class="ml-4">Token:</b> <mark>{{token}}</mark>
|
||||||
{% if is_admin %}
|
{% if is_admin %}
|
||||||
<b class="ml-4 config"><input type="checkbox" id="enable_register" {% if enable_register == 'yes' %}checked{% endif %}> 开启用户注册功能</b>
|
<b class="ml-4 config"><input type="checkbox" id="enable_register" {% if enable_register == 'yes' %}checked{% endif %}> {% translate '开启用户注册功能' %}</b>
|
||||||
<b class="ml-4 config"><input type="checkbox" id="enable_create_random_user" {% if enable_create_random_user == 'yes' %}checked{% endif %}> 开启产生随机账号</b>
|
<b class="ml-4 config"><input type="checkbox" id="enable_create_random_user" {% if enable_create_random_user == 'yes' %}checked{% endif %}> {% translate '开启产生随机账号' %}</b>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
@@ -163,46 +164,46 @@
|
|||||||
|
|
||||||
<div class="card mt-2">
|
<div class="card mt-2">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
单个请求命中查询
|
{% translate '单个请求命中查询' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<p class="card-text">
|
<p class="card-text">
|
||||||
{{host}}/api/{type}/{{username}}/{prefix}/?token={{ token }}</p>
|
{{host}}/api/{type}/{{username}}/{prefix}/?token={{ token }}</p>
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>type: 设置为 <mark>dns</mark> 或者 <mark>web</mark></li>
|
<li>type: {% translate '设置为' %} <mark>dns</mark> {% translate '或者' %} <mark>web</mark></li>
|
||||||
<li>prefix: 三级域名前缀</li>
|
<li>prefix: {% translate '三级域名前缀' %}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>检查是否触发 <mark>test.{{userdomain}}</mark>,访问:<a href="{{host}}/api/dns/{{username}}/test/?token={{ token }}" target="_blank">{{host}}/api/dns/{{username}}/test/?token={{ token }}</a></p>
|
<p>{% translate '检查是否触发' %} <mark>test.{{userdomain}}</mark>,{% translate '访问' %}:<a href="{{host}}/api/dns/{{username}}/test/?token={{ token }}" target="_blank">{{host}}/api/dns/{{username}}/test/?token={{ token }}</a></p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>返回 <mark>True</mark>,请求被触发</li>
|
<li>{% translate '返回' %} <mark>True</mark>,{% translate '请求被触发' %}</li>
|
||||||
<li>返回 <mark>False</mark>,请求未触发</li>
|
<li>{% translate '返回' %} <mark>False</mark>,{% translate '请求未触发' %}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card mt-2">
|
<div class="card mt-2">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
多个请求命中查询
|
{% translate '多个请求命中查询' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<p class="card-text">
|
<p class="card-text">
|
||||||
{{host}}/api/group/dns/{{username}}/{prefix}/?token={{ token }}</p>
|
{{host}}/api/group/dns/{{username}}/{prefix}/?token={{ token }}</p>
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>prefix: 三级域名前缀</li>
|
<li>prefix: {% translate '三级域名前缀' %}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>对于一个较大的Payload集合,首先批量投递payload,再通过单个请求,来检查哪些payload触发执行成功。</p>
|
<p>{% translate '对于一个较大的Payload集合,首先批量投递payload,再通过单个请求,来检查哪些payload触发执行成功。' %}</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>扫描器投递 <mark>payload1</mark>,使用域名:<mark>payload1.xxx-rce.{{userdomain}}</mark></li>
|
<li>{% translate '扫描器投递' %} <mark>payload1</mark>,{% translate '使用域名' %}:<mark>payload1.xxx-rce.{{userdomain}}</mark></li>
|
||||||
<li>扫描器投递 <mark>payload2</mark>,使用域名:<mark>payload2.xxx-rce.{{userdomain}}</mark></li>
|
<li>{% translate '扫描器投递' %} <mark>payload2</mark>,{% translate '使用域名' %}:<mark>payload2.xxx-rce.{{userdomain}}</mark></li>
|
||||||
<li>扫描器投递 <mark>payload3</mark>,使用域名:<mark>payload3.xxx-rce.{{userdomain}}</mark></li>
|
<li>{% translate '扫描器投递' %} <mark>payload3</mark>,{% translate '使用域名' %}:<mark>payload3.xxx-rce.{{userdomain}}</mark></li>
|
||||||
<li>...</li>
|
<li>...</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>检查是否存在漏洞,访问:<a href="{{host}}/api/group/dns/{{username}}/xxx-rce/?token={{ token }}" target="_blank">{{host}}/api/group/dns/{{username}}/xxx-rce/?token={{ token }}</a></p>
|
<p>{% translate '检查是否存在漏洞,访问' %}:<a href="{{host}}/api/group/dns/{{username}}/xxx-rce/?token={{ token }}" target="_blank">{{host}}/api/group/dns/{{username}}/xxx-rce/?token={{ token }}</a></p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>返回 <mark>False</mark>,漏洞未触发</li>
|
<li>{% translate '返回' %} <mark>False</mark>,{% translate '漏洞未触发' %}</li>
|
||||||
<li>返回 <mark>{"success": "true", "data": ["payload3", "payload2", "payload1"]}</mark>,漏洞被触发,data字段包含成功触发的payload清单,至多返回50个</li>
|
<li>{% translate '返回' %} <mark>{"success": "true", "data": ["payload3", "payload2", "payload1"]}</mark>{% translate ',漏洞被触发,data字段包含成功触发的payload清单,至多返回50个' %}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -217,21 +218,21 @@
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
生成域名
|
{% translate '生成域名' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<p class="card-text">
|
<p class="card-text">
|
||||||
<form class="form-inline my-2 mt-md-0 input-group-sm" style="display: flex;justify-content: space-between">
|
<form class="form-inline my-2 mt-md-0 input-group-sm" style="display: flex;justify-content: space-between">
|
||||||
<div>
|
<div>
|
||||||
<input class="form-control mr-sm-2 input-sm" size="20" type="text" placeholder="合法IP" id="valid_ip" value="123.123.123.123">
|
<input class="form-control mr-sm-2 input-sm" size="20" type="text" placeholder="{% translate '合法IP' %}" id="valid_ip" value="123.123.123.123">
|
||||||
<input class="form-control mr-sm-2 input-sm" size="20" type="text" placeholder="非法IP" id="invalid_ip" value="10.1.1.1">
|
<input class="form-control mr-sm-2 input-sm" size="20" type="text" placeholder="{% translate '非法IP' %}" id="invalid_ip" value="10.1.1.1">
|
||||||
<button class="btn btn-primary my-2 my-sm-0" type="button" onclick="generate_domain(event)">生成域名</button>
|
<button class="btn btn-primary my-2 my-sm-0" type="button" onclick="generate_domain(event)">{% translate '生成域名' %}</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div class="mt-4" id="result" style="color: red"></div>
|
<div class="mt-4" id="result" style="color: red"></div>
|
||||||
<div class="mt-4"><a href="/dns/?domain=.r.{{ userdomain }}&monitor=true" target="_blank" class="mr-4">DNS监控</a>
|
<div class="mt-4"><a href="/dns/?domain=.r.{{ userdomain }}&monitor=true" target="_blank" class="mr-4">{% translate 'DNS监控' %}</a>
|
||||||
<a href="/web/?path=.r.{{ userdomain }}&monitor=true" target="_blank">HTTP监控</a></div>
|
<a href="/web/?path=.r.{{ userdomain }}&monitor=true" target="_blank">{% translate 'HTTP监控' %}</a></div>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -369,18 +370,18 @@
|
|||||||
<div class="modal-dialog modal-dialog-centered">
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="exampleModalLabel">提示</h5>
|
<h5 class="modal-title" id="exampleModalLabel">{% translate '提示' %}</h5>
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
是否清空全部 <b>{{ total }}</b> 条记录?删除后数据无法恢复
|
{% blocktranslate %} 是否清空全部 <b>{{ total }}</b> 条记录?删除后数据无法恢复' {% endblocktranslate %}
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
|
<button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">{% translate '关闭' %}</button>
|
||||||
<a class="button btn-sm btn-danger" style="padding-top: 7px;" href="delete?{{ query_prefix }}{% if page != 1 %}&page={{ page }}{% endif %}"
|
<a class="button btn-sm btn-danger" style="padding-top: 7px;" href="delete?{{ query_prefix }}{% if page != 1 %}&page={{ page }}{% endif %}"
|
||||||
onclick="delete_all(event, true)">删除</a>
|
onclick="delete_all(event, true)">{% translate '删除' %}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -394,10 +395,10 @@
|
|||||||
function show_web_headers(id) {
|
function show_web_headers(id) {
|
||||||
if ( $('#web_headers_' + id)[0].className == 'd-none'){
|
if ( $('#web_headers_' + id)[0].className == 'd-none'){
|
||||||
$('#web_headers_' + id).removeClass('d-none');
|
$('#web_headers_' + id).removeClass('d-none');
|
||||||
$('#showButton_' + id).text('收起');
|
$('#showButton_' + id).text('{% translate '收起' %}');
|
||||||
} else {
|
} else {
|
||||||
$('#web_headers_' + id).addClass('d-none');
|
$('#web_headers_' + id).addClass('d-none');
|
||||||
$('#showButton_' + id).text('查看');
|
$('#showButton_' + id).text('{% translate '查看' %}');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* var getUrlParameter = function getUrlParameter(sParam) {
|
/* var getUrlParameter = function getUrlParameter(sParam) {
|
||||||
|
|||||||
Reference in New Issue
Block a user