Created
April 21, 2015 22:39
-
-
Save chtzvt/0b1d6f008d08401b4f66 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Nasty bot catcher adapted from https://github.com/ctrezevant/node-form-inspector | |
//Loads our dependencies. | |
var http = require('http'); | |
var url = require('url') ; | |
var qs = require('querystring'); | |
var fs = require('fs'); | |
//On what port should the server run? | |
var PORT = 8082; | |
//Date & time function so that responses are timestamped. | |
function getDateTime() { | |
var date = new Date(); | |
var hour = date.getHours(); | |
hour = (hour < 10 ? "0" : "") + hour; | |
var min = date.getMinutes(); | |
min = (min < 10 ? "0" : "") + min; | |
var sec = date.getSeconds(); | |
sec = (sec < 10 ? "0" : "") + sec; | |
var year = date.getFullYear(); | |
var month = date.getMonth() + 1; | |
month = (month < 10 ? "0" : "") + month; | |
var day = date.getDate(); | |
day = (day < 10 ? "0" : "") + day; | |
return year + ":" + month + ":" + day + ":" + hour + ":" + min + ":" + sec; | |
} | |
//This function is used to determine whether the request object is empty. | |
function isEmptyRequest(query) { | |
for(var prop in query) { | |
if(query.hasOwnProperty(prop)) | |
return false; | |
} | |
return true; | |
} | |
http.createServer(function (req, res) { | |
//This if/else block deals with the different methods necessary to deal with different kinds of requests. | |
if(req.method === "GET") { | |
var params = url.parse(req.url,true).query; | |
params.fi_timeStamp = getDateTime(); | |
params.fi_requestIP = req.connection.remoteAddress; | |
params.fi_method = "GET"; | |
params.req_headers = JSON.parse(JSON.stringify(req.headers, null, 4)); | |
res.writeHead(200); | |
fs.appendFile("/var/www/etc/log/honeypot.txt", JSON.stringify(params, null, 4), function(err) { console.log(err); }); | |
res.end(); | |
} else if (req.method === "POST") { | |
var body = ''; | |
req.on('data', function (data) { | |
body += data; | |
//Stop requests that are too large. | |
//This kills the skiddie :) | |
if (body.length > 1e6) { | |
req.connection.destroy(); | |
} | |
}); | |
req.on('end', function () { | |
var params = qs.parse(body); | |
params.fi_timeStamp = getDateTime(); | |
params.fi_requestIP = req.connection.remoteAddress; | |
params.fi_method = "POST"; | |
params.req_headers = JSON.parse(JSON.stringify(req.headers, null, 4)); | |
console.log(params.fi_timeStamp + " Got these parameters: " + JSON.stringify(params, null, 4)); | |
res.writeHead(200); | |
fs.appendFile("/var/www/etc/log/honeypot.txt", JSON.stringify(params, null, 4), function(err) { console.log(err); }); | |
res.end(); | |
}); | |
}}).listen(PORT); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment