Skip to content

Instantly share code, notes, and snippets.

@JustinAzoff
Last active January 26, 2017 16:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JustinAzoff/bc6a1cf7d427cb5357fda86410f424ee to your computer and use it in GitHub Desktop.
Save JustinAzoff/bc6a1cf7d427cb5357fda86410f424ee to your computer and use it in GitHub Desktop.

Start:

./manager.py
./data.py 1
./data.py 2
./worker.py 2
./worker.py 2
./worker.py 2
./worker.py 2
#!/usr/bin/env python
import sys
import zmq
from collections import defaultdict
port = 30001 + int(sys.argv[1])
# Socket to talk to server
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.bind("tcp://127.0.0.1:%d" % port)
manager = context.socket(zmq.PUB)
manager.connect("tcp://127.0.0.1:30001")
def log(msg):
manager.send_multipart(["log", msg])
def NOTICE(msg):
manager.send_multipart(["notice", msg])
# known hosts
HOSTS=set()
def new_host(host):
if host not in HOSTS:
print "New host:", host
log("known host: %s" % host)
HOSTS.add(host)
###
SCAN_ATTEMPTS = defaultdict(set)
# Scan detection
def scan(src, dest, port):
print "attempt", src, dest, port
attempts = SCAN_ATTEMPTS[src]
attempts.add((dest, port))
if len(attempts) == 10:
print "Scan:", src, dest, port
NOTICE("Scan from %s, %d destinations" % (src, len(attempts)))
print "Waiting..."
while True:
msg = socket.recv_multipart()
queue = msg[0]
if queue == 'new_host':
new_host(*msg[1:])
if queue == 'scan':
scan(*msg[1:])
#!/usr/bin/env python
import sys
import zmq
port = 30001
# Socket to talk to server
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.bind("tcp://127.0.0.1:%d" % port)
socket.setsockopt(zmq.SUBSCRIBE, "notice")
socket.setsockopt(zmq.SUBSCRIBE, "log")
print "Waiting..."
while True:
msg = socket.recv_multipart()
print msg
#!/usr/bin/env python
import binascii
import sys
import zmq
import time
import random
data_count = int(sys.argv[1])
def random_src(up=255):
return "1.2.3.%d" % random.randint(1,up)
def random_dest(up=255):
return "192.168.1.%d" % random.randint(1,up)
def random_scan():
return random_src(5), random_dest(), str(random.choice((22,5900,3389)))
# Socket to talk to server
context = zmq.Context()
data_sockets = []
for i in range(data_count):
port = 30002 + i
socket = context.socket(zmq.PUSH)
socket.connect("tcp://127.0.0.1:%d" % port)
data_sockets.append(socket)
def send_unicast_hashed(event, key, *args):
node = binascii.crc32(key) % len(data_sockets)
socket = data_sockets[node]
msg = [event] + list(args)
socket.send_multipart(msg)
def new_host(ip):
send_unicast_hashed("new_host", ip, ip)
def new_scan(src, dest, port):
send_unicast_hashed("scan", src, src, dest, port)
while True:
new_host(random_dest(20))
new_scan(*random_scan())
time.sleep(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment