mscdex / socksv5

SOCKS protocol version 5 server and client implementations for node.js
MIT License
400 stars 121 forks source link

monitor proxy traffic #45

Open stefanocudini opened 4 years ago

stefanocudini commented 4 years ago

hi beautiful lib! congrants

I was trying to write a proxy socks that could log the http traffic and contents and show in stdout.

how can I do it? is there something like this already done?

my attempts is this:


const socks = require('socksv5');

const PORT = 9052;

//console.clear();

var srv = socks.createServer(function(info, accept, deny) {

  console.log('\n',info.cmd, info.dstAddr, info.dstPort);

  if (info.dstPort === 80) {  //NOT SSL
    var socket;
    if (socket = accept(true)) {

        /*socket.on('data', function(data) {
            console.log('DATA:', data.toString('ascii') );
        });*/

        socket.pipe(process.stdout);
        //socket.end()
    }
  }
  else  //SSL connection
    accept();
});

srv.listen(PORT, 'localhost', function() {
  console.log('SOCKS server listening on port',PORT);
});

srv.useAuth(socks.auth.None());
mscdex commented 4 years ago

I'm not sure what you're asking. Do you not see the raw data printed to stdout with the code you've shown?

stefanocudini commented 4 years ago

yes.. but only the headers, I wish I could see the body of requests and responses :-/

mscdex commented 4 years ago
  1. You'll only see request bodies if they're sent, which may not always be the case
  2. Responses require you to make an actual connection to the intended destination. Right now you're just connecting the incoming request socket to stdout. You have to make a separate socket connection to dstAddr:dstPort and pipe that back to socket (and optionally log that to stdout if you want).