mirror of
https://github.com/hak5/nano-tetra-modules.git
synced 2025-10-29 16:58:09 +00:00
82 lines
2.2 KiB
Python
82 lines
2.2 KiB
Python
import threading
|
|
import sys
|
|
import os
|
|
import socket
|
|
import json
|
|
from mimetools import Message
|
|
from StringIO import StringIO
|
|
|
|
class UDSHandler(threading.Thread):
|
|
serverAddress = "/var/run/dwall.sock"
|
|
|
|
def __init__(self, group=None, target=None, name=None,
|
|
args=(), kwargs=None, verbose=None):
|
|
threading.Thread.__init__(self, group=group, target=target, name=name,
|
|
verbose=verbose)
|
|
self.args = args
|
|
self.kwargs = kwargs
|
|
return
|
|
|
|
def run(self):
|
|
try:
|
|
os.unlink(self.serverAddress)
|
|
except:
|
|
pass
|
|
|
|
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
sock.bind(self.serverAddress)
|
|
sock.listen(1)
|
|
|
|
while True:
|
|
connection, client_address = sock.accept()
|
|
self.handleConnection(connection)
|
|
|
|
|
|
|
|
def handleConnection(self, connection):
|
|
data = ""
|
|
try:
|
|
while True:
|
|
buff = connection.recv(1024)
|
|
if buff:
|
|
data += buff
|
|
else:
|
|
break
|
|
finally:
|
|
connection.close()
|
|
|
|
try:
|
|
parsedData = self.parseData(data)
|
|
if parsedData:
|
|
for websocket in self.args[0]:
|
|
try:
|
|
websocket.send_message(json.dumps(parsedData))
|
|
except Exception, e:
|
|
pass
|
|
except Exception, e:
|
|
pass
|
|
|
|
def parseData(self, data):
|
|
data = data.split("|", 2)
|
|
dataDict = {"from": data[0], "to": data[1]}
|
|
|
|
path, headers = data[2].split('\r\n', 1)
|
|
|
|
payload = Message(StringIO(headers))
|
|
|
|
url = "http://" + payload['host'] + path.split(" ")[1]
|
|
|
|
if url.lower().endswith(('.png', '.ico', '.jpeg', '.jpg', '.gif', '.svg')):
|
|
dataDict['image'] = url
|
|
else:
|
|
dataDict['url'] = url
|
|
|
|
if 'cookie' in payload:
|
|
dataDict['cookie'] = payload['cookie']
|
|
|
|
postData = data[2].split('\r\n\r\n')
|
|
if len(postData) == 2:
|
|
if postData[1].strip():
|
|
dataDict['post'] = postData[1]
|
|
|
|
return dataDict |