4 * Look for common open proxy ports from the client
7 var util
= require('util'),
8 kiwiModules
= require('../server/modules');
11 var module
= new kiwiModules
.Module('proxychecker');
13 module
.on('irc connecting', function (event
, event_data
) {
16 var client_addr
= event_data
.connection
.state
.client
.websocket
.meta
.real_address
;
18 checkForOpenProxies(client_addr
, function(is_proxy
, host
, port
) {
20 var err
= new Error(util
.format('Proxy detected on %s:%d', client_addr
, port
));
21 err
.code
= 'Blocked proxy';
23 event_data
.connection
.emit('error', err
);
24 event
.preventDefault();
35 function checkForOpenProxies(host
, callback
) {
36 var net
= require('net');
38 var ports
= [80,8080,81,1080,6588,8000];
39 var ports_completed
= 0;
41 var callback_called
= false;
43 var portFailed = function() {
45 this.removeAllListeners();
48 if (!callback_called
&& ports_completed
>= ports
.length
) {
49 callback_called
= true;
54 var portConnected = function() {
55 var remote_port
= this.remotePort
;
58 this.removeAllListeners();
61 if (!callback_called
) {
62 callback_called
= true;
63 callback(true, host
, remote_port
);
67 var portTimeout = function() {
69 this.removeAllListeners();
72 if (!callback_called
&& ports_completed
>= ports
.length
) {
73 callback_called
= true;
78 for (var idx
=0; idx
< ports
.length
; idx
++) {
79 net
.connect({port
: ports
[idx
], host
: host
})
80 .on('connect', portConnected
)
81 .on('error', portFailed
)
82 .on('close', portFailed
)
83 .on('timeout', portTimeout
)