-
Notifications
You must be signed in to change notification settings - Fork 1
/
b2c.js
executable file
·82 lines (74 loc) · 2.18 KB
/
b2c.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env node
var help = "usage: b2c.js --lport=80 --rhost=www.baidu.com --rport=80 [--secret xxx <--ec | --dc>]"
var args = require('optimist').argv
if (! (args.lport && args.rport && args.rhost) || args.h || args.help) {
console.log(help);
process.exit(0);
} else if (args.secret && !args.ec && !args.dc) {
console.log(help);
process.exit(0);
}
var net = require('net')
var cs = require('cipherstream');
var crypto = require('crypto');
var server = net.createServer(function (client) {
console.log("Portmap: new connection");
if (args.secret) {
var en = new cs.CipherStream(args.secret, 'rc4');
var de = new cs.DecipherStream(args.secret, 'rc4');
// de.on('data', function(d) {
// var str = d + "";
// console.log(str);
// });
}
var msg = new Buffer(0);
var pre = true;
client.on('end', function () {
console.log("Portmap: client disconnect");
serv.end();
});
client.on('data', function (data) {
// if (! args.dc) {
// var str = data + "";
// console.log(str);
// }
if (pre) {
console.log("Portmap: pre pipe data");
msg = Buffer.concat([msg, data], msg.length + data.length)
// console.log(data);
}
});
var serv = new net.Socket();
serv.connect(parseInt(args.rport), args.rhost, function () {
console.log("Portmap: connect to server");
serv.setNoDelay(true);
// console.log(msg)
pre = false;
if (args.ec) {
client.pipe(en).pipe(serv);
serv.pipe(de).pipe(client);
// pipe before write to catch the 'data' event
en.write(msg);
} else if(args.dc) {
client.pipe(de).pipe(serv);
serv.pipe(en).pipe(client);
// pipe before write to catch the 'data' event
de.write(msg);
} else {
client.pipe(serv);
serv.pipe(client);
// pipe before write to catch the 'data' event
serv.write(msg);
}
});
serv.on('end', function () {
console.log("Portmap: server disconnect");
client.end();
});
serv.on('data', function (data) {
// console.log(data);
});
});
server.listen(parseInt(args.lport), function () {
console.log("Portmap: server bound");
});