Files
enteletaor/enteletaor_lib/modules/brute/authers.py
cr0hn 7013d8f51a fix: port types - str -> int
fix: unified timeout for amqp
2016-03-18 13:38:47 +01:00

90 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
import zmq
import redis
import socket
import redis.exceptions
import logging
import amqp.connection
from .exceptions import AuthRequired
log = logging.getLogger()
# --------------------------------------------------------------------------
# These 3 functions determinate if server has listen one of these services:
# - Redis server
# - RabbitMQ server
# - ZeroMQ PUB/SUB pattern
#
# Each function try to connect or do some action and determinate if service
# is on or not.
# --------------------------------------------------------------------------
def brute_redis(host, port=6379, user=None, password=None, db=0):
try:
redis.StrictRedis(host=host,
port=int(port),
socket_connect_timeout=1,
socket_timeout=1,
password=password,
db=db).ping()
return True
except redis.exceptions.ResponseError as e:
if str(e).startswith("NOAUTH"):
raise AuthRequired()
else:
return False
except Exception:
return False
# ----------------------------------------------------------------------
def brute_amqp(host, port=5672, user=None, password=None, db=0):
host_and_port = "%s:%s" % (host, port)
user_name = "guest" if user is None else user
user_password = "guest" if password is None else password
timeout = 0.2
try:
amqp.connection.Connection(host=host_and_port,
userid=user_name,
password=user_password,
connect_timeout=timeout,
read_timeout=timeout,
socket_timeout=timeout).connected
return True
except socket.timeout as e:
raise AuthRequired()
except Exception:
return False
# ----------------------------------------------------------------------
def brute_zmq(host, port=5555, user=None, password=None, db=0):
context = zmq.Context()
# Configure
socket = context.socket(zmq.SUB)
socket.setsockopt(zmq.SUBSCRIBE, b"") # All topics
socket.setsockopt(zmq.LINGER, 0) # All topics
socket.RCVTIMEO = 1000 # timeout: 1 sec
# Connect
socket.connect("tcp://%s:%s" % (host, port))
# Try to receive
try:
socket.recv()
return True
except Exception:
return False
finally:
socket.close()