mirror of
https://github.com/adulau/netbeacon.git
synced 2024-11-21 17:47:07 +00:00
Alexandre Dulaunoy
66a5b4866a
netbeacon is a small free software to send beacon over the network to test the following properties of your network capture (e.g. for your honeypot network data capture, your data interception device, your NIDS, ...): - Checking how long it takes for a packet to reach your monitoring. - Checking time inconsistencies between devices. - Checking missing packets or its ordering. The netbeacon format is a simple ASCII format encapsulated in an UDP packet. The format is the following: header;epoch;sequence;hmac The current header is nb The epoch value (in UTC format) The sequence an unsigned integer and the HMAC-SHA1 signature. A private shared key (PSK) is agreed between the netbeacon sender and netbeacon recipient to ensure packet integrity using HMAC (SHA1). As a test, you can directly send the debug output from nb_send.py to nb_verify.py to verify your netbeacons. python nb_send.py | python nb_verify.py 4aa846f627ae7f92991622e9a0199fbbdb71e48d valid signature for nb;1354690456;1; Time delay 0.0 8b7ec2d5bb5e0644f2ba7f9842797296171e20e1 valid signature for nb;1354690456;2;
40 lines
1 KiB
Python
40 lines
1 KiB
Python
import socket
|
|
import datetime
|
|
import time
|
|
try:
|
|
from hashlib import sha1
|
|
except ImportError:
|
|
from sha import sha as sha1
|
|
import hmac
|
|
|
|
## nb;epochvalue;sq;hmac
|
|
## hmacfunc("nb;epochvalue;sq;", psk)
|
|
def nbsign(message=None, psk="netbeacon"):
|
|
auth = hmac.new(psk, message, sha1)
|
|
return auth.hexdigest()
|
|
|
|
# format: nb;1354687980;1;500f5e18df881bb1dd22ee3c468209669a13e4ef
|
|
def nbmessage(seq=1):
|
|
m = ""
|
|
m = m + "nb"
|
|
m = m + ";"
|
|
t = datetime.datetime.now()
|
|
now = time.mktime(t.timetuple())
|
|
m = m + (str(int(now)))
|
|
m = m + ";"
|
|
m = m + str(seq)
|
|
m = m + ";"
|
|
m = m + nbsign(message=m)
|
|
return m
|
|
|
|
def nbsend(destination=None,payload=None, logging=False):
|
|
if destination is None:
|
|
return False
|
|
if logging:
|
|
print (payload)
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
|
sock.sendto(payload, (destination, 12345))
|
|
return True
|
|
|
|
for x in range(1,10):
|
|
nbsend(destination="127.0.0.1", payload=nbmessage(x), logging=True)
|