mirror of https://github.com/Aidaho12/haproxy-wi
v8.1.2: Add IP calculator and improve nettools forms
Implemented an IP calculator feature using the netaddr library and added corresponding JS and HTML form elements. Enhanced existing nettools forms by utilizing Flask-Pydantic for validation and AJAX request improvements. Removed deprecated alert selection methods in the database checker module. Updated language translations and incremented version to 8.1.2.pull/411/head
parent
95cd8be699
commit
5c28a47cae
|
@ -692,7 +692,7 @@ def update_db_v_8_1_2():
|
||||||
|
|
||||||
def update_ver():
|
def update_ver():
|
||||||
try:
|
try:
|
||||||
Version.update(version='8.1.1.1').execute()
|
Version.update(version='8.1.2').execute()
|
||||||
except Exception:
|
except Exception:
|
||||||
print('Cannot update version')
|
print('Cannot update version')
|
||||||
|
|
||||||
|
|
|
@ -146,84 +146,3 @@ def select_all_alerts(group_id: int):
|
||||||
return query.execute()
|
return query.execute()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
out_error(e)
|
out_error(e)
|
||||||
|
|
||||||
|
|
||||||
# For deleting after realising new version
|
|
||||||
def select_alert(**kwargs):
|
|
||||||
if kwargs.get("group") is not None:
|
|
||||||
query = Server.select(Server.ip).where(
|
|
||||||
(Server.haproxy_alert == 1) & (Server.enabled == 1) & (Server.group_id == kwargs.get('group'))
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
query = Server.select(Server.ip).where((Server.haproxy_alert == 1) & (Server.enabled == 1))
|
|
||||||
try:
|
|
||||||
query_res = query.execute()
|
|
||||||
except Exception as e:
|
|
||||||
out_error(e)
|
|
||||||
else:
|
|
||||||
return query_res
|
|
||||||
|
|
||||||
|
|
||||||
# For deleting after realising new version
|
|
||||||
def select_nginx_alert(**kwargs):
|
|
||||||
if kwargs.get("group") is not None:
|
|
||||||
query = Server.select(Server.ip).where(
|
|
||||||
(Server.nginx_alert == 1)
|
|
||||||
& (Server.enabled == 1)
|
|
||||||
& (Server.group_id == kwargs.get('group'))
|
|
||||||
& (Server.nginx == 1)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
query = Server.select(Server.ip).where(
|
|
||||||
(Server.nginx_alert == 1)
|
|
||||||
& (Server.enabled == 1)
|
|
||||||
& (Server.nginx == 1)
|
|
||||||
)
|
|
||||||
try:
|
|
||||||
query_res = query.execute()
|
|
||||||
except Exception as e:
|
|
||||||
out_error(e)
|
|
||||||
else:
|
|
||||||
return query_res
|
|
||||||
|
|
||||||
|
|
||||||
# For deleting after realising new version
|
|
||||||
def select_apache_alert(**kwargs):
|
|
||||||
if kwargs.get("group") is not None:
|
|
||||||
query = Server.select(Server.ip).where(
|
|
||||||
(Server.apache_alert == 1)
|
|
||||||
& (Server.enabled == 1)
|
|
||||||
& (Server.group_id == kwargs.get('group'))
|
|
||||||
& (Server.apache == 1)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
query = Server.select(Server.ip).where((Server.apache_alert == 1) & (Server.enabled == 1) & (Server.apache == 1))
|
|
||||||
try:
|
|
||||||
query_res = query.execute()
|
|
||||||
except Exception as e:
|
|
||||||
out_error(e)
|
|
||||||
else:
|
|
||||||
return query_res
|
|
||||||
|
|
||||||
|
|
||||||
# For deleting after realising new version
|
|
||||||
def select_keepalived_alert(**kwargs):
|
|
||||||
if kwargs.get("group") is not None:
|
|
||||||
query = Server.select(Server.ip).where(
|
|
||||||
(Server.keepalived_alert == 1)
|
|
||||||
& (Server.enabled == 1)
|
|
||||||
& (Server.group_id == kwargs.get('group'))
|
|
||||||
& (Server.keepalived == 1)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
query = Server.select(Server.ip).where(
|
|
||||||
(Server.keepalived_alert == 1)
|
|
||||||
& (Server.enabled == 1)
|
|
||||||
& (Server.keepalived == 1)
|
|
||||||
)
|
|
||||||
try:
|
|
||||||
query_res = query.execute()
|
|
||||||
except Exception as e:
|
|
||||||
out_error(e)
|
|
||||||
else:
|
|
||||||
return query_res
|
|
||||||
|
|
|
@ -506,3 +506,14 @@ class HaproxyDefaultsRequest(BaseModel):
|
||||||
maxconn: Optional[int] = 5000
|
maxconn: Optional[int] = 5000
|
||||||
type: Optional[Literal['defaults']] = 'defaults'
|
type: Optional[Literal['defaults']] = 'defaults'
|
||||||
action: Optional[Literal['save', 'test', 'reload', 'restart']] = "save"
|
action: Optional[Literal['save', 'test', 'reload', 'restart']] = "save"
|
||||||
|
|
||||||
|
|
||||||
|
class NettoolsRequest(BaseModel):
|
||||||
|
server_from: Optional[EscapedString] = None
|
||||||
|
server_to: Optional[Union[IPvAnyAddress, DomainName]] = None
|
||||||
|
port: Optional[Annotated[int, Gt(1), Le(65535)]] = None
|
||||||
|
action: Optional[Literal['ping', 'trace']] = None
|
||||||
|
dns_name: Optional[DomainName] = None
|
||||||
|
record_type: Optional[Literal['a', 'aaaa', 'caa', 'cname', 'mx', 'ns', 'ptr', 'sao', 'src', 'txt']] = None
|
||||||
|
ip: Optional[IPvAnyAddress] = None
|
||||||
|
netmask: Optional[int] = None
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import json
|
import json
|
||||||
|
|
||||||
import whois
|
import whois
|
||||||
|
import netaddr
|
||||||
from flask import Response, stream_with_context
|
from flask import Response, stream_with_context
|
||||||
|
|
||||||
import app.modules.server.ssh as mod_ssh
|
import app.modules.server.ssh as mod_ssh
|
||||||
|
@ -134,3 +135,17 @@ def whois_check(domain_name: str) -> str:
|
||||||
output += f'<b>Organization:</b> {whois_data["org"]} <br />'
|
output += f'<b>Organization:</b> {whois_data["org"]} <br />'
|
||||||
|
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
def ip_calc(ip_add: str, netmask: int) -> dict[str, str]:
|
||||||
|
ip = netaddr.IPNetwork(f'{ip_add}/{netmask}')
|
||||||
|
ip_output = {
|
||||||
|
'address': str(ip.ip),
|
||||||
|
'network': str(ip.network),
|
||||||
|
'netmask': str(ip.netmask),
|
||||||
|
'broadcast': str(ip.broadcast),
|
||||||
|
'hosts': str(ip.size),
|
||||||
|
'min': str(ip[1]),
|
||||||
|
'max': str(ip[-2])
|
||||||
|
}
|
||||||
|
return ip_output
|
||||||
|
|
|
@ -3,6 +3,7 @@ import os
|
||||||
from flask import render_template, request, g, abort, jsonify, redirect, url_for, send_from_directory
|
from flask import render_template, request, g, abort, jsonify, redirect, url_for, send_from_directory
|
||||||
from flask_jwt_extended import jwt_required
|
from flask_jwt_extended import jwt_required
|
||||||
from flask_pydantic.exceptions import ValidationError
|
from flask_pydantic.exceptions import ValidationError
|
||||||
|
from flask_pydantic import validate
|
||||||
|
|
||||||
from app import app, cache, jwt
|
from app import app, cache, jwt
|
||||||
from app.routes.main import bp
|
from app.routes.main import bp
|
||||||
|
@ -18,7 +19,7 @@ import app.modules.roxywi.nettools as nettools_mod
|
||||||
import app.modules.roxywi.common as roxywi_common
|
import app.modules.roxywi.common as roxywi_common
|
||||||
import app.modules.service.common as service_common
|
import app.modules.service.common as service_common
|
||||||
import app.modules.service.haproxy as service_haproxy
|
import app.modules.service.haproxy as service_haproxy
|
||||||
from app.modules.roxywi.class_models import ErrorResponse
|
from app.modules.roxywi.class_models import ErrorResponse, NettoolsRequest
|
||||||
|
|
||||||
|
|
||||||
@app.template_filter('strftime')
|
@app.template_filter('strftime')
|
||||||
|
@ -155,37 +156,40 @@ def nettools():
|
||||||
|
|
||||||
|
|
||||||
@bp.post('/nettools/<check>')
|
@bp.post('/nettools/<check>')
|
||||||
|
@validate(body=NettoolsRequest)
|
||||||
@jwt_required()
|
@jwt_required()
|
||||||
def nettools_check(check):
|
def nettools_check(check, body: NettoolsRequest):
|
||||||
server_from = common.checkAjaxInput(request.form.get('server_from'))
|
|
||||||
server_to = common.is_ip_or_dns(request.form.get('server_to'))
|
|
||||||
action = common.checkAjaxInput(request.form.get('nettools_action'))
|
|
||||||
port_to = common.checkAjaxInput(request.form.get('nettools_telnet_port_to'))
|
|
||||||
dns_name = common.checkAjaxInput(request.form.get('nettools_nslookup_name'))
|
|
||||||
dns_name = common.is_ip_or_dns(dns_name)
|
|
||||||
record_type = common.checkAjaxInput(request.form.get('nettools_nslookup_record_type'))
|
|
||||||
domain_name = common.is_ip_or_dns(request.form.get('nettools_whois_name'))
|
|
||||||
|
|
||||||
if check == 'icmp':
|
if check == 'icmp':
|
||||||
try:
|
try:
|
||||||
return nettools_mod.ping_from_server(server_from, server_to, action)
|
return nettools_mod.ping_from_server(body.server_from, str(body.server_to), body.action)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return str(e)
|
return ErrorResponse(error=f'Cannot ping: {e}').model_dump(mode='json'), 500
|
||||||
elif check == 'tcp':
|
elif check == 'tcp':
|
||||||
try:
|
try:
|
||||||
return nettools_mod.telnet_from_server(server_from, server_to, port_to)
|
return nettools_mod.telnet_from_server(body.server_from, str(body.server_to), body.port)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return str(e)
|
return ErrorResponse(error=f'Cannot check port: {e}').model_dump(mode='json'), 500
|
||||||
elif check == 'dns':
|
elif check == 'dns':
|
||||||
try:
|
try:
|
||||||
return nettools_mod.nslookup_from_server(server_from, dns_name, record_type)
|
return nettools_mod.nslookup_from_server(body.server_from, body.dns_name, body.record_type)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return str(e)
|
return ErrorResponse(error=f'Cannot lookup: {e}').model_dump(mode='json'), 500
|
||||||
elif check == 'whois':
|
elif check == 'whois':
|
||||||
try:
|
try:
|
||||||
return jsonify(nettools_mod.whois_check(domain_name))
|
return jsonify(nettools_mod.whois_check(body.dns_name))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return str(e)
|
return ErrorResponse(error=f'Cannot make whois: {e}').model_dump(mode='json'), 500
|
||||||
|
elif check == 'ipcalc':
|
||||||
|
try:
|
||||||
|
ip_add = str(body.ip)
|
||||||
|
netmask = int(body.netmask)
|
||||||
|
except Exception as e:
|
||||||
|
return ErrorResponse(error=f'Cannot calc: {e}').model_dump(mode='json'), 500
|
||||||
|
|
||||||
|
try:
|
||||||
|
return jsonify(nettools_mod.ip_calc(ip_add, netmask))
|
||||||
|
except Exception as e:
|
||||||
|
return ErrorResponse(error=f'Cannot calc: {e}').model_dump(mode='json'), 500
|
||||||
else:
|
else:
|
||||||
return 'error: Wrong check'
|
return 'error: Wrong check'
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ $( function() {
|
||||||
});
|
});
|
||||||
$("#nettools_telnet_form").on("click", ":submit", function (e) {
|
$("#nettools_telnet_form").on("click", ":submit", function (e) {
|
||||||
$('#ajax-nettools').html('');
|
$('#ajax-nettools').html('');
|
||||||
let frm = $('#nettools_telnet_form');
|
var frm = $('#nettools_telnet_form');
|
||||||
if ($('#nettools_telnet_server_from option:selected').val() == '------') {
|
if ($('#nettools_telnet_server_from option:selected').val() == '------') {
|
||||||
toastr.warning('Choose a server From');
|
toastr.warning('Choose a server From');
|
||||||
return false;
|
return false;
|
||||||
|
@ -19,11 +19,13 @@ $( function() {
|
||||||
}
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: frm.attr('action'),
|
url: frm.attr('action'),
|
||||||
data: frm.serialize(),
|
data: getFormData(frm),
|
||||||
type: frm.attr('method'),
|
type: frm.attr('method'),
|
||||||
|
contentType: "application/json; charset=utf-8",
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
data = data.replace('\n', "<br>");
|
if (data.status === 'failed') {
|
||||||
if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') {
|
toastr.error(data);
|
||||||
|
} else if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') {
|
||||||
$('#ajax-nettools').html('<div class="ping_pre">' + data + '</div>');
|
$('#ajax-nettools').html('<div class="ping_pre">' + data + '</div>');
|
||||||
} else if (data.indexOf('warning: ') != '-1') {
|
} else if (data.indexOf('warning: ') != '-1') {
|
||||||
toastr.clear();
|
toastr.clear();
|
||||||
|
@ -42,7 +44,7 @@ $( function() {
|
||||||
});
|
});
|
||||||
$("#nettools_nslookup_form").on("click", ":submit", function (e) {
|
$("#nettools_nslookup_form").on("click", ":submit", function (e) {
|
||||||
$('#ajax-nettools').html('');
|
$('#ajax-nettools').html('');
|
||||||
let frm = $('#nettools_nslookup_form');
|
var frm = $('#nettools_nslookup_form');
|
||||||
if ($('#nettools_nslookup_server_from option:selected').val() == '------') {
|
if ($('#nettools_nslookup_server_from option:selected').val() == '------') {
|
||||||
toastr.warning('Choose a server From');
|
toastr.warning('Choose a server From');
|
||||||
return false;
|
return false;
|
||||||
|
@ -53,16 +55,12 @@ $( function() {
|
||||||
}
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: frm.attr('action'),
|
url: frm.attr('action'),
|
||||||
data: frm.serialize(),
|
data: getFormData(frm),
|
||||||
type: frm.attr('method'),
|
type: frm.attr('method'),
|
||||||
|
contentType: "application/json; charset=utf-8",
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
data = data.replace('\n', "<br>");
|
if (data.status === 'failed') {
|
||||||
if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') {
|
toastr.warning(data);
|
||||||
toastr.clear();
|
|
||||||
toastr.error(data);
|
|
||||||
} else if (data.indexOf('warning: ') != '-1') {
|
|
||||||
toastr.clear();
|
|
||||||
toastr.warning(data)
|
|
||||||
} else {
|
} else {
|
||||||
toastr.clear();
|
toastr.clear();
|
||||||
$('#ajax-nettools').html('<div class="ping_pre">' + data + '</div>');
|
$('#ajax-nettools').html('<div class="ping_pre">' + data + '</div>');
|
||||||
|
@ -74,64 +72,63 @@ $( function() {
|
||||||
$("#nettools_icmp_form").on("click", ":submit", function (e) {
|
$("#nettools_icmp_form").on("click", ":submit", function (e) {
|
||||||
$('#ajax-nettools').html('');
|
$('#ajax-nettools').html('');
|
||||||
let frm = $('#nettools_icmp_form');
|
let frm = $('#nettools_icmp_form');
|
||||||
if ($('#nettools_icmp_server_from option:selected').val() == '------') {
|
if ($('#nettools_icmp_server_from option:selected').val() === '------') {
|
||||||
toastr.warning('Choose a server From');
|
toastr.warning('Choose a server From');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ($('#nettools_icmp_server_to').val() == '') {
|
if ($('#nettools_icmp_server_to').val() === '') {
|
||||||
toastr.warning('Enter a server To');
|
toastr.warning('Enter a server To');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
let data = getFormData(frm);
|
||||||
|
data = JSON.parse(data);
|
||||||
|
data['action'] = $(this).val();
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: frm.attr('action'),
|
url: frm.attr('action'),
|
||||||
data: frm.serialize() + "&nettools_action=" + $(this).val(),
|
data: JSON.stringify(data),
|
||||||
type: frm.attr('method'),
|
type: frm.attr('method'),
|
||||||
|
contentType: "application/json; charset=utf-8",
|
||||||
xhrFields: {
|
xhrFields: {
|
||||||
onprogress: function (e) {
|
onprogress: function (e) {
|
||||||
console.log(e.currentTarget.responseText);
|
try {
|
||||||
|
data = JSON.parse(e.currentTarget.responseText);
|
||||||
|
toastr.warning(data.error);
|
||||||
|
} catch (error) {
|
||||||
$('#ajax-nettools').html(e.currentTarget.responseText);
|
$('#ajax-nettools').html(e.currentTarget.responseText);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
dataType: 'text',
|
dataType: 'text',
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
data = data.replace('\n', "<br>");
|
if (data.status === 'failed') {
|
||||||
if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') {
|
|
||||||
toastr.clear();
|
|
||||||
toastr.error(data);
|
toastr.error(data);
|
||||||
} else if (data.indexOf('warning: ') != '-1') {
|
|
||||||
toastr.clear();
|
|
||||||
toastr.warning(data)
|
|
||||||
} else {
|
|
||||||
toastr.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
$("#nettools_portscanner_form").on("click", ":submit", function (e) {
|
$("#nettools_portscanner_form").on("click", ":submit", function (e) {
|
||||||
let port_server = $('#nettools_portscanner_server').val();
|
|
||||||
$('#ajax-nettools').html('');
|
$('#ajax-nettools').html('');
|
||||||
if (port_server == '') {
|
if ($('#nettools_portscanner_server').val() == '') {
|
||||||
toastr.warning('Enter an address');
|
toastr.warning('Enter an address');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/portscanner/scan",
|
url: "/portscanner/scan/" + $('#nettools_portscanner_server').val(),
|
||||||
data: JSON.stringify({'ip': port_server}),
|
|
||||||
type: "POST",
|
|
||||||
contentType: "application/json; charset=utf-8",
|
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
if (data.status === 'failed') {
|
data = data.replace(/\s+/g, ' ');
|
||||||
toastr.error(data.error);
|
if (data.indexOf('danger') != '-1' || data.indexOf('unique') != '-1' || data.indexOf('error:') != '-1') {
|
||||||
|
toastr.error(data);
|
||||||
} else {
|
} else {
|
||||||
toastr.clear();
|
toastr.clear();
|
||||||
$("#show_scans_ports_body").html(data.data);
|
$("#show_scans_ports_body").html(data);
|
||||||
|
var close_word = $('#translate').attr('data-close');
|
||||||
$("#show_scans_ports").dialog({
|
$("#show_scans_ports").dialog({
|
||||||
resizable: false,
|
resizable: false,
|
||||||
height: "auto",
|
height: "auto",
|
||||||
width: 360,
|
width: 360,
|
||||||
modal: true,
|
modal: true,
|
||||||
title: "Opened ports",
|
title: "{{lang.words.opened|title()}} {{lang.words.ports}}",
|
||||||
buttons: [{
|
buttons: [{
|
||||||
text: close_word,
|
text: close_word,
|
||||||
click: function () {
|
click: function () {
|
||||||
|
@ -147,31 +144,74 @@ $( function() {
|
||||||
});
|
});
|
||||||
$("#nettools_whois_form").on("click", ":submit", function (e) {
|
$("#nettools_whois_form").on("click", ":submit", function (e) {
|
||||||
$('#ajax-nettools').html('');
|
$('#ajax-nettools').html('');
|
||||||
let frm = $('#nettools_whois_form');
|
var frm = $('#nettools_whois_form');
|
||||||
if ($('#nettools_whois_name').val() == '') {
|
if ($('#nettools_whois_name').val() == '') {
|
||||||
toastr.warning('Enter a Domain name');
|
toastr.warning('Enter a Domain name');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: frm.attr('action'),
|
url: frm.attr('action'),
|
||||||
data: frm.serialize() + "&nettools_action=" + $(this).val(),
|
data: getFormData(frm),
|
||||||
type: frm.attr('method'),
|
type: frm.attr('method'),
|
||||||
dataType: 'text',
|
contentType: "application/json; charset=utf-8",
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
data = data.replaceAll('"', '');
|
if (data.status === 'failed') {
|
||||||
if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') {
|
|
||||||
toastr.clear();
|
|
||||||
toastr.error(data);
|
toastr.error(data);
|
||||||
} else if (data.indexOf('warning: ') != '-1') {
|
|
||||||
toastr.clear();
|
|
||||||
toastr.warning(data)
|
|
||||||
} else {
|
} else {
|
||||||
toastr.clear();
|
toastr.clear();
|
||||||
console.log(data)
|
|
||||||
$('#ajax-nettools').html('<div class="ping_pre">' + data + '</div>');
|
$('#ajax-nettools').html('<div class="ping_pre">' + data + '</div>');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
|
$("#nettools_ipcalc_form").on("click", ":submit", function (e) {
|
||||||
|
$('#ajax-nettools').html('');
|
||||||
|
let frm = $('#nettools_ipcalc_form');
|
||||||
|
let ip = $('#nettools_address').val();
|
||||||
|
let netmask = $('#nettools_netmask').val();
|
||||||
|
if (ip === '') {
|
||||||
|
toastr.warning('Enter a valid IP address');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (netmask === '') {
|
||||||
|
toastr.warning('Enter a valid Netmask');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
url: frm.attr('action'),
|
||||||
|
data: JSON.stringify({'ip': ip, 'netmask': netmask}),
|
||||||
|
type: frm.attr('method'),
|
||||||
|
contentType: "application/json; charset=utf-8",
|
||||||
|
success: function (data) {
|
||||||
|
if (data.status === 'failed') {
|
||||||
|
toastr.clear();
|
||||||
|
toastr.error(data.error);
|
||||||
|
} else {
|
||||||
|
toastr.clear();
|
||||||
|
$('#ajax-nettools').html(
|
||||||
|
'<div class="ping_pre"><b>Address</b>: ' + data.address + '<br />' +
|
||||||
|
'<b>Netmask</b>: ' + data.netmask + '<br />' +
|
||||||
|
'<b>Network</b>: ' + data.network + '<br />' +
|
||||||
|
'<b>Broadcast</b>: ' + data.broadcast + '<br />' +
|
||||||
|
'<b>Host min</b>: ' + data.min + '<br />' +
|
||||||
|
'<b>Host max</b>: ' + data.max + '<br />' +
|
||||||
|
'<b>Hosts</b>: ' + data.hosts +
|
||||||
|
'</div>'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
event.preventDefault();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
function getFormData($form){
|
||||||
|
let unindexed_array = $form.serializeArray();
|
||||||
|
let indexed_array = {};
|
||||||
|
|
||||||
|
$.map(unindexed_array, function(n, i){
|
||||||
|
indexed_array[n['name']] = n['value'];
|
||||||
|
});
|
||||||
|
|
||||||
|
return JSON.stringify(indexed_array);
|
||||||
|
}
|
||||||
|
|
|
@ -955,5 +955,9 @@
|
||||||
"where": "where",
|
"where": "where",
|
||||||
"shared": "shared",
|
"shared": "shared",
|
||||||
"retries": "retries",
|
"retries": "retries",
|
||||||
|
"address": "address",
|
||||||
|
"calculate": "calculate",
|
||||||
|
"calculator": "calculator",
|
||||||
|
"netmask": "Netmask",
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -955,5 +955,9 @@
|
||||||
"where": "où",
|
"where": "où",
|
||||||
"shared": "commun",
|
"shared": "commun",
|
||||||
"retries": "tentatives",
|
"retries": "tentatives",
|
||||||
|
"address": "adresse",
|
||||||
|
"calculate": "calculer",
|
||||||
|
"calculator": "calculatrice",
|
||||||
|
"netmask": "Masque de réseau",
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -955,5 +955,9 @@
|
||||||
"where": "onde",
|
"where": "onde",
|
||||||
"shared": "partilhado",
|
"shared": "partilhado",
|
||||||
"retries": "novas tentativas",
|
"retries": "novas tentativas",
|
||||||
|
"address": "morada",
|
||||||
|
"calculate": "calcular",
|
||||||
|
"calculator": "calculadora",
|
||||||
|
"netmask": "Máscara de rede",
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -955,5 +955,9 @@
|
||||||
"where": "где",
|
"where": "где",
|
||||||
"shared": "общий",
|
"shared": "общий",
|
||||||
"retries": "повторные попытки",
|
"retries": "повторные попытки",
|
||||||
|
"address": "адрес",
|
||||||
|
"calculate": "рассчитать",
|
||||||
|
"calculator": "калькулятор",
|
||||||
|
"netmask": "Сетевая маска",
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
{% block h2 %}{{ lang.menu_links.monitoring.net_tools }}{% endblock %}
|
{% block h2 %}{{ lang.menu_links.monitoring.net_tools }}{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% from 'include/input_macros.html' import input, checkbox, select %}
|
{% from 'include/input_macros.html' import input, checkbox, select %}
|
||||||
<script src="/static/js/nettools.js"></script>
|
<script src="{{ url_for('static', filename='js/nettools.js')}}"></script>
|
||||||
<form name="nettools_icmp_form" id="nettools_icmp_form" method="post" action="/nettools/icmp">
|
<form name="nettools_icmp_form" id="nettools_icmp_form" method="post" action="/nettools/icmp">
|
||||||
<table class="overview">
|
<table class="overview">
|
||||||
<caption><h3>ICMP</h3></caption>
|
<caption><h3>ICMP</h3></caption>
|
||||||
|
@ -17,21 +17,20 @@
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
<select autofocus required name="server_from" id="nettools_icmp_server_from">
|
<select autofocus required name="server_from" id="nettools_icmp_server_from">
|
||||||
<option disabled selected>------</option>
|
<option disabled selected>------</option>
|
||||||
<option value="localhost">Roxy-WI</option>
|
<option value="localhost">Roxy-WI server</option>
|
||||||
{% for server in g.user_params['servers'] %}
|
{% for server in g.user_params['servers'] %}
|
||||||
<option value="{{ server.2 }}">{{ server.1 }}</option>
|
<option value="{{ server.2 }}">{{ server.1 }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
{{ input('nettools_icmp_server_to', name='server_to', title=lang.nettools_page.ip_or_name) }}
|
{{ input('nettools_icmp_server_to', name='server_to', title='Enter IP or Name') }}
|
||||||
{{ input('token', value=token, type='hidden') }}
|
|
||||||
</td>
|
</td>
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
<button type="submit" title="{{lang.words.run|title()}} Ping" id="nettools_ping" name="nettools_ping" value="nettools_ping">Ping</button>
|
<button type="submit" title="Run Ping" id="nettools_ping" name="nettools_ping" value="ping">Ping</button>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="submit" title="{{lang.words.run|title()}} Traceroute" id="nettools_trace" name="nettools_trace" value="nettools_trace">Traceroute</button>
|
<button type="submit" title="Run Traceroute" id="nettools_trace" name="nettools_trace" value="trace">Traceroute</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
@ -49,18 +48,17 @@
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
<select autofocus required name="server_from" id="nettools_telnet_server_from">
|
<select autofocus required name="server_from" id="nettools_telnet_server_from">
|
||||||
<option disabled selected>------</option>
|
<option disabled selected>------</option>
|
||||||
<option value="localhost">Roxy-WI</option>
|
<option value="localhost">Roxy-WI server</option>
|
||||||
{% for server in g.user_params['servers'] %}
|
{% for server in g.user_params['servers'] %}
|
||||||
<option value="{{ server.2 }}">{{ server.1 }}</option>
|
<option value="{{ server.2 }}">{{ server.1 }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
{{ input('nettools_telnet_server_to', name='server_to', title=lang.nettools_page.ip_or_name) }}
|
{{ input('nettools_telnet_server_to', name='server_to', title='Enter IP or Name') }}
|
||||||
{{ input('token', value=token, type='hidden') }}
|
|
||||||
</td>
|
</td>
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
{{ input('nettools_telnet_port_to', title=lang.words.port|title() + ' ' + lang.words.port, type='number', style='width: 60px;') }}
|
{{ input('nettools_telnet_port_to', name='port', title='Enter port', type='number', style='width: 60px;') }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="submit" title="{{lang.words.run|title()}} Telnet" id="nettools_telnet" name="nettools_telnet" value="nettools_telnet">{{lang.words.connect|title()}}</button>
|
<button type="submit" title="{{lang.words.run|title()}} Telnet" id="nettools_telnet" name="nettools_telnet" value="nettools_telnet">{{lang.words.connect|title()}}</button>
|
||||||
|
@ -81,7 +79,7 @@
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
<select autofocus required name="server_from" id="nettools_nslookup_server_from">
|
<select autofocus required name="server_from" id="nettools_nslookup_server_from">
|
||||||
<option disabled selected>------</option>
|
<option disabled selected>------</option>
|
||||||
<option value="localhost">Roxy-WI</option>
|
<option value="localhost">Roxy-WI server</option>
|
||||||
{% for server in g.user_params['servers'] %}
|
{% for server in g.user_params['servers'] %}
|
||||||
<option value="{{ server.2 }}">{{ server.1 }}</option>
|
<option value="{{ server.2 }}">{{ server.1 }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -89,13 +87,12 @@
|
||||||
</td>
|
</td>
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
{% set values = dict() %}
|
{% set values = dict() %}
|
||||||
{% set values = {'A':'A','AAA':'AAA', 'CNAME':'CNAME', 'MX':'MX', 'TXT':'TXT', 'PTR':'PTR', 'SRV':'SRV',
|
{% set values = {'a':'A','aaa':'AAA', 'cname':'CNAME', 'mx':'MX', 'txt':'TXT', 'ptr':'PTR', 'srv':'SRV',
|
||||||
'SOA':'SOA', 'CAA':'CAA'} %}
|
'SOA':'SOA', 'CAA':'CAA'} %}
|
||||||
{{ select('nettools_nslookup_record_type', values=values, selected='A', required='required') }}
|
{{ select('nettools_nslookup_record_type', name='record_type', values=values, selected='A', required='required') }}
|
||||||
</td>
|
</td>
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
{{ input('nettools_nslookup_name', title=lang.nettools_page.dns_name) }}
|
{{ input('nettools_nslookup_name', name='dns_name', title='Enter a DNS name') }}
|
||||||
{{ input('token', value=token, type='hidden') }}
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="submit" title="{{lang.words.run|title()}} Telnet" id="nettools_nslookup" name="nettools_nslookup" value="nettools_nslookup">{{lang.words.check|title()}}</button>
|
<button type="submit" title="{{lang.words.run|title()}} Telnet" id="nettools_nslookup" name="nettools_nslookup" value="nettools_nslookup">{{lang.words.check|title()}}</button>
|
||||||
|
@ -104,7 +101,7 @@
|
||||||
</table>
|
</table>
|
||||||
</form>
|
</form>
|
||||||
<form name="nettools_portscanner_form" id="nettools_portscanner_form" method="post" action="/nettools/portscan">
|
<form name="nettools_portscanner_form" id="nettools_portscanner_form" method="post" action="/nettools/portscan">
|
||||||
<table class="overview" style="width: 40%;float: left;">
|
<table class="overview" style="width: 30%;float: left;">
|
||||||
<caption><h3>Port scanner</h3></caption>
|
<caption><h3>Port scanner</h3></caption>
|
||||||
<tr class="overviewHead">
|
<tr class="overviewHead">
|
||||||
<th class="padding10 first-collumn">{{lang.words.server|title()}}</th>
|
<th class="padding10 first-collumn">{{lang.words.server|title()}}</th>
|
||||||
|
@ -112,7 +109,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
{{ input('nettools_portscanner_server', title=lang.nettools_page.server_portscann) }}
|
{{ input('nettools_portscanner_server', title='Enter a server for port scanning') }}
|
||||||
</td>
|
</td>
|
||||||
<td class="padding10" style="width: 0">
|
<td class="padding10" style="width: 0">
|
||||||
<button type="submit" title="{{lang.words.run|title()}} port scanning" id="nettools_portscan" name="nettools_portscan" value="nettools_portscan">{{lang.words.run|title()}}</button>
|
<button type="submit" title="{{lang.words.run|title()}} port scanning" id="nettools_portscan" name="nettools_portscan" value="nettools_portscan">{{lang.words.run|title()}}</button>
|
||||||
|
@ -121,7 +118,7 @@
|
||||||
</table>
|
</table>
|
||||||
</form>
|
</form>
|
||||||
<form name="nettools_whois_form" id="nettools_whois_form" method="post" action="/nettools/whois">
|
<form name="nettools_whois_form" id="nettools_whois_form" method="post" action="/nettools/whois">
|
||||||
<table class="overview" style="width: 60%;">
|
<table class="overview" style="width: 30%;float: left">
|
||||||
<caption><h3>Whois</h3></caption>
|
<caption><h3>Whois</h3></caption>
|
||||||
<tr class="overviewHead">
|
<tr class="overviewHead">
|
||||||
<th class="padding10 first-collumn">{{lang.words.name|title()}}</th>
|
<th class="padding10 first-collumn">{{lang.words.name|title()}}</th>
|
||||||
|
@ -129,7 +126,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
{{ input('nettools_whois_name', title=lang.nettools_page.dns_name) }}
|
{{ input('nettools_whois_name', name='dns_name', title=lang.nettools_page.dns_name) }}
|
||||||
</td>
|
</td>
|
||||||
<td class="padding10" style="width: 0">
|
<td class="padding10" style="width: 0">
|
||||||
<button type="submit" title="{{lang.words.check|title()}}" id="nettools_whois" name="nettools_whois" value="nettools_whois">{{lang.words.check|title()}}</button>
|
<button type="submit" title="{{lang.words.check|title()}}" id="nettools_whois" name="nettools_whois" value="nettools_whois">{{lang.words.check|title()}}</button>
|
||||||
|
@ -137,6 +134,27 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</form>
|
</form>
|
||||||
|
<form name="nettools_ip_calc_form" id="nettools_ipcalc_form" method="post" action="/nettools/ipcalc">
|
||||||
|
<table class="overview" style="width: 40%;">
|
||||||
|
<caption><h3>IP {{lang.words.calculator}}</h3></caption>
|
||||||
|
<tr class="overviewHead">
|
||||||
|
<th class="padding10 first-collumn">IP {{lang.words.address|title()}}</th>
|
||||||
|
<th>{{lang.words.netmask}}</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="padding10 first-collumn">
|
||||||
|
{{ input('nettools_address', name='ip', placeholder='192.168.0.1') }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ input('nettools_netmask', name='netmask', placeholder='24', type='number') }}
|
||||||
|
</td>
|
||||||
|
<td class="padding10" style="width: 0">
|
||||||
|
<button type="submit" title="{{lang.words.calculate|title()}}" id="nettools_ipcalc_form" name="nettools_ipcalc_form" value="nettools_ipcalc_form">{{lang.words.calculate|title()}}</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
<div id="ajax-nettools" style="padding: 20px;"></div>
|
<div id="ajax-nettools" style="padding: 20px;"></div>
|
||||||
<div id="show_scans_ports" style="display: none; padding: 0;">
|
<div id="show_scans_ports" style="display: none; padding: 0;">
|
||||||
<div id="show_scans_ports_body"></div>
|
<div id="show_scans_ports_body"></div>
|
||||||
|
|
|
@ -87,6 +87,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{%- elif service == 'apache' %}
|
{%- elif service == 'apache' %}
|
||||||
showApachekBytes(server_ip)
|
showApachekBytes(server_ip)
|
||||||
|
setInterval(showApachekBytes, 60000, server_ip)
|
||||||
{% if s.4.0.27 %}
|
{% if s.4.0.27 %}
|
||||||
getApacheChartData(server_ip)
|
getApacheChartData(server_ip)
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
Loading…
Reference in New Issue