mirror of
https://github.com/bettercap/bettercap
synced 2025-07-06 04:52:10 -07:00
143 lines
2.9 KiB
JavaScript
143 lines
2.9 KiB
JavaScript
var RESET = "\033[0m";
|
|
|
|
function R(s) {
|
|
return "\033[31m" + s + RESET;
|
|
}
|
|
|
|
function G(s) {
|
|
return "\033[32m" + s + RESET;
|
|
}
|
|
|
|
function B(s) {
|
|
return "\033[34m" + s + RESET;
|
|
}
|
|
|
|
function Y(s) {
|
|
return "\033[33m" + s + RESET;
|
|
}
|
|
|
|
function DIM(s) {
|
|
return "\033[2m" + s + RESET;
|
|
}
|
|
|
|
function BOLD(s) {
|
|
return "\033[1m" + s + RESET;
|
|
}
|
|
|
|
function dumpHeaders(req) {
|
|
log( "> " + BOLD(G("Headers")) );
|
|
for( var i = 0; i < req.Headers.length; i++ ) {
|
|
var header = req.Headers[i];
|
|
log( " " + B(header.Name) + " : " + DIM(header.Value) );
|
|
}
|
|
}
|
|
|
|
function dumpPlain(req) {
|
|
log( " > " + BOLD(G("Text")) );
|
|
|
|
var body = req.ReadBody();
|
|
|
|
log( " " + Y(body) );
|
|
}
|
|
|
|
function dumpForm(req) {
|
|
log( " > " + BOLD(G("Form")) );
|
|
|
|
var body = req.ReadBody();
|
|
var parts = body.split('&');
|
|
|
|
for( var i = 0; i < parts.length; i++ ) {
|
|
var nv = parts[i].split('=');
|
|
log( " " + B(nv[0]) + " : " + Y(nv[1]) );
|
|
}
|
|
}
|
|
|
|
function dumpJSON(req) {
|
|
log( " > " + BOLD(G("JSON")) );
|
|
|
|
var body = req.ReadBody();
|
|
|
|
// TODO: pretty print json
|
|
log( " " + Y(body) );
|
|
}
|
|
|
|
function pad(num, size, fill) {
|
|
var s = ""+num;
|
|
|
|
while( s.length < size ) {
|
|
s = fill + s;
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
function toHex(n) {
|
|
var hex = "0123456789abcdef";
|
|
var h = hex[(0xF0 & n) >> 4] + hex[0x0F & n];
|
|
return pad(h, 2, '0');
|
|
}
|
|
|
|
function isPrint(c){
|
|
if( !c ) { return false; }
|
|
var code = c.charCodeAt(0);
|
|
return ( code > 31 ) && ( code < 127 );
|
|
}
|
|
|
|
function dumpHex(raw, linePad) {
|
|
var DataSize = raw.length;
|
|
var Bytes = 16;
|
|
|
|
for( var address = 0; address < DataSize; address++ ) {
|
|
var saddr = pad(address, 8, '0');
|
|
var shex = '';
|
|
var sprint = '';
|
|
|
|
var end = address + Bytes;
|
|
for( var i = address; i < end; i++ ) {
|
|
if( i < DataSize ) {
|
|
shex += toHex(raw.charCodeAt(i)) + ' ';
|
|
sprint += isPrint(raw[i]) ? raw[i] : '.';
|
|
} else {
|
|
shex += ' ';
|
|
sprint += ' ';
|
|
}
|
|
}
|
|
|
|
address = end;
|
|
|
|
log( linePad + G(saddr) + ' ' + shex + ' ' + sprint );
|
|
}
|
|
}
|
|
|
|
function dumpRaw(req) {
|
|
var body = req.ReadBody();
|
|
|
|
log( " > " + BOLD(G("Body")) + " " + DIM("("+body.length + " bytes)") + "\n" );
|
|
|
|
dumpHex(body, " ");
|
|
}
|
|
|
|
function onRequest(req, res) {
|
|
log( BOLD(req.Client), " > ", B(req.Method), " " + req.Hostname + req.Path + ( req.Query ? "?" + req.Query : '') );
|
|
|
|
dumpHeaders(req);
|
|
|
|
if( req.ContentType ) {
|
|
log();
|
|
|
|
if( req.ContentType.indexOf("text/plain") != -1 ) {
|
|
dumpPlain(req);
|
|
}
|
|
else if( req.ContentType.indexOf("application/x-www-form-urlencoded") != -1 ) {
|
|
dumpForm(req);
|
|
}
|
|
else if( req.ContentType.indexOf("application/json") != -1 ) {
|
|
dumpJSON(req);
|
|
}
|
|
else {
|
|
dumpRaw(req);
|
|
}
|
|
}
|
|
|
|
log();
|
|
}
|