Skip to content

Instantly share code, notes, and snippets.

@ninetails
Created April 7, 2014 22:33
Show Gist options
  • Save ninetails/10069406 to your computer and use it in GitHub Desktop.
Save ninetails/10069406 to your computer and use it in GitHub Desktop.
Gist for check redirects
var util = require('util'),
fs = require('fs'),
net = require('net'),
filename = './redir.txt',
useragents = [
{
name: 'Chrome 33.0.1750.152',
value: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36'
},
{
name: 'Firefox 25.0',
value: 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0'
}
],
domains = [
'folha.com',
'folha.uol.com',
'folha.com.br',
'folha.uol.com.br',
'www.folha.com',
'www.folha.uol.com',
'www.folha.com.br',
'www.folha.uol.com.br',
'www1.folha.uol.com',
'www1.folha.com.br',
'www1.folha.uol.com.br',
'app.folha.com',
'app.folha.uol.com'
],
prepare_request = function (domain, useragent, get) {
var request = [
util.format('GET %s HTTP/1.1', get || '/'),
util.format('Host: %s', domain),
'Connection: close'
];
if (typeof useragent === 'string' && useragent.length > 0) {
request.push(util.format('User-Agent: %s', useragent));
}
request.push('');
request.push('');
return request.join("\n");
},
make_request = function (domain, port, request, uaname) {
var s = new net.Socket();
s.connect(port, domain);
s.write(request);
s.on('data', function(d){
log_redirect(uaname, domain, d.toString());
});
s.on('error', function(d){
append_text(util.format('%s - %s', domain, d.toString()));
s.destroy();
});
s.end();
},
append_text = function (text) {
console.log(text);
fs.appendFile(filename, util.format('%s\n', text), function (err) {
if (err) throw err;
});
},
log_redirect = function (ua, domain, response) {
var status, code, location, output,
lines = response.split(/\n|\r\n/);
if (!lines[0].match(/^HTTP\/1\.1\s/)) {
return;
}
status = lines[0].replace('HTTP/1.1 ', '');
code = parseInt(status.split(/\s/)[0], 10);
if (ua == null) {
ua = 'no useragent';
}
output = ua;
output += ' : ';
output += domain;
output += ' = ';
output += status;
if (code === 301 || code === 302) {
output += ' => ';
response = response.replace(/\r\n/, "\n");
location = response.match(/Location\:\s([^\r\n]+)/)[1];
output += location;
}
console.log(output);
append_text(output);
},
exec_request = function (useragent) {
for (var i = 0, total = domains.length; i < total; i++) {
if ( typeof useragent !== 'undefined' ) {
request = prepare_request(domains[i], useragent.value);
make_request(domains[i], 80, request, useragent.name);
} else {
request = prepare_request(domains[i]);
make_request(domains[i], 80, request);
}
}
};
// do request for no useragent
exec_request();
for (var i = 0, total = useragents.length; i < total; i++) {
exec_request(useragents[i]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment