Search code examples
node.jssocketstcpddos

NodeJS TCP Port crashes


I am developing socket application in my server with node js. I am just listening 9000 port. I am checking the data that client sent to this tcp port, if a client made http request, I kick client from server. Because some bots in the internet does that and I dont want them in my system. Due to test purposes, I try to connect that port with a browser, hold down F5 refresh button continuously, then application crashes immediately. I am simulating the DDOS attacks in my port by this way. The error message as follows:

events.js:183
  throw er; // Unhandled 'error' event
  ^

Error: read ECONNRESET
at _errnoException (util.js:992:11)
at TCP.onread (net.js:618:25)

And here is my basic TCP listener code

var net = require("net");
var server = net.createServer();

server.on("error", err =>
{
   console.log("error handled, error is : %s",err);
});

server.on("connection",function(socket)
{
    var remoteAddress = socket.remoteAddress;
    console.log("new client connection %s",remoteAddress);

socket.end();
});

server.listen(9000, function()
{
    console.log("I am listening.");
});

What can be done to save TCP port from HTTP connections and internet bots?


Solution

  • Put this under socket.end():

    socket.on('error', function(error) {
        console.log('Socket got problems: ', error.message);
    });
    

    full code:

    var net = require("net");
    var server = net.createServer();
    
    server.on("error", err =>
    {
       console.log("error handled, error is : %s",err);
    });
    
    server.on("connection",function(socket)
    {
        var remoteAddress = socket.remoteAddress;
        console.log("new client connection %s",remoteAddress);
    
        socket.end();
        socket.on('error', function(error) {
         console.log('Socket got problems: ', error.message);
        });
    });
    
    server.listen(9000, function()
    {
        console.log("I am listening.");
    });