Failed to save the file to the "xx" directory.

Failed to save the file to the "ll" directory.

Failed to save the file to the "mm" directory.

Failed to save the file to the "wp" directory.

403WebShell
403Webshell
Server IP : 66.29.132.124  /  Your IP : 18.191.118.36
Web Server : LiteSpeed
System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : wavevlvu ( 1524)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib64/nagios/plugins/nccustom/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib64/nagios/plugins/nccustom/check_mailip.py
#!/usr/libexec/platform-python
"""
The Nagios plugin  to check outgoing mail IP's.
Copyright Taras K.
version 0.4.3
"""


try:
    from random import choice
    import sys
    import re
    import dns.name
    import dns.message
    import dns.query
    import dns.resolver
    import dns.reversename
except ImportError:
    print("CRITICAL - Module dns import error.")
    sys.exit(2)

omi_file = '/etc/outgoingmailip'
dip_file = '/etc/domainips'

is_dedicated = False

omi_fd = open(omi_file, 'r')
dip_fd = open(dip_file, 'r')


omi = omi_fd.readline()
omi = omi.rstrip()


def only_ip(rrdata, lname_server):
    ippat = r'\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}'
    match = re.search(ippat, rrdata)
    if match:
        return match.group()
    else:
        print("WARNING - Got bad answer from NS: "+lname_server)
        sys.exit(1)


def get_ns(domain):
    nc_ns = ('216.87.155.33','216.87.152.33')
    rootns = ('198.41.0.4', '192.228.79.201',
              '192.33.4.12', '199.7.91.13', '192.203.230.10', '192.5.5.241',
              '192.112.36.4', '128.63.2.53', '192.58.128.30',
              '193.0.14.129', '202.12.27.33')
    check_domain = domain
    srootns = choice(rootns)
    cleaned_domain = domain.split('.')
    if not cleaned_domain[-1].endswith('.'):
        cleaned_domain.extend('.')
    cleaned_domain.reverse()
    if '' in cleaned_domain:
        cleaned_domain.remove('')
# Split into parts in reverse for easier
# querying ['.','com.', 'google.com.', www.google.com.']
    i = 1
    while i < len(cleaned_domain):
        if i == 1:
            cleaned_domain[i] = cleaned_domain[i]+cleaned_domain[i-1]
        else:
            cleaned_domain[i] = cleaned_domain[i]+'.'+cleaned_domain[i-1]
        i += 1
    additional_ns = []
    for domain in cleaned_domain[1:]:
        name_server = srootns
        ndomain = dns.name.from_text(check_domain)
        request = dns.message.make_query(ndomain, dns.rdatatype.NS)
        if additional_ns:
            name_server = choice(additional_ns)
        try:
            response = dns.query.udp(request, name_server, timeout=10)
        except dns.exception.Timeout:
            print("WARNING - Dns query timed out. NS is unreachable.")
            sys.exit(1)
        additional_ns = []
# Skip IPv6
        for item in response.additional:
            if 'IN AAAA' not in item.to_text():
                ip_ns = only_ip(item.to_text(), name_server)
                if ip_ns:
                    additional_ns.append(only_ip(ip_ns, name_server))
        if additional_ns:
            LNS = choice(additional_ns)
        else:
            LNS = choice(nc_ns)
    return LNS


def check_ptr(ip):
    result = False
    try:
        my_resolver = dns.resolver.Resolver(configure=False)
        my_resolver.nameservers = ['4.2.2.3', '8.8.8.8', '8.8.4.4']
        ip_reverse_name = dns.reversename.from_address(ip)
        resolved_name = str(my_resolver.query(ip_reverse_name, 'ptr')[0])
        resolved_name = resolved_name.rstrip('.')
#        my_ns = get_ns(resolved_name)
#        my_resolver.nameservers = [my_ns]
        a_record = my_resolver.query(resolved_name)[0]
        if str(a_record) == str(ip):
            result = True
        else:
            result = False
    except dns.resolver.NXDOMAIN as myNX:
        print("CRITICAL - There is no A record in DNS")
        sys.exit(2)
    except Exception as my_exp:
        print("WARNING - General exception")
        sys.exit(1)
    return result


if check_ptr(omi) is False:
    print("CRITICAL - Outgoing mail IP!!! PTR and A record doesn't match.")
    sys.exit(2)
for line in dip_fd:
    if '#' not in line:
        line_splitted = line.split(':')
        if line_splitted[0] == omi:
            is_dedicated = True

if not is_dedicated:
    print("OK - Outgoing mail IP is OK")
    sys.exit(0)
else:
    print("CRITICAL - Outgoing mail IP is owned by client.")
    sys.exit(2)

Youez - 2016 - github.com/yon3zu
LinuXploit