首页 > 解决方案 > NodeJS Net 服务器在 nmap 扫描时崩溃

问题描述

我已经编写了一个基于 NodeJS 的 Net 模块的服务器。如果我尝试使用网络套接字连接它,它工作得很好。但是,如果我尝试使用 nmap 扫描它,它就无法写入套接字,从而出现EPIPE错误。

    Error: write EPIPE
    at afterWriteDispatched (node:internal/stream_base_commons:160:15)
    at writeGeneric (node:internal/stream_base_commons:151:3)
    at Socket._writeGeneric (node:net:775:11)
    at Socket._write (node:net:787:8)
    at writeOrBuffer (node:internal/streams/writable:400:12)
    at _write (node:internal/streams/writable:341:10)
    at Socket.Writable.write (node:internal/streams/writable:345:10)
    at Server.<anonymous> (/server.js:6:10)
    at Server.emit (node:events:379:20)
    at TCP.onconnection (node:net:1555:8)
Emitted 'error' event on Socket instance at:
    at emitErrorNT (node:internal/streams/destroy:188:8)
    at emitErrorCloseNT (node:internal/streams/destroy:153:3)
    at processTicksAndRejections (node:internal/process/task_queues:81:21) {
  errno: -32,
  code: 'EPIPE',
  syscall: 'write'
}

我已将服务器代码简化为:

const net = require('net');
const server = net.createServer(socket => {
  socket.write('Test');
});
server.listen(30);

nmap 输出只是 sais 30/tcp open tcpwrapped。我确定这与 nmap 如何连接到服务器有关。但我就是不知道怎么做。

标签: javascriptnode.jsnmap

解决方案


您收到此错误的原因是 nmap 立即关闭了连接。当你的回调开始执行时,Node.js 已经获得了 RST 数据包并且它知道连接已关闭,因此它通过立即抛出错误来禁止写入它 - 套接字是确保这一点的状态机。

通常,您应该随时准备好处理连接状态错误-任何写入调用都可能失败。这与丢失数据包不同,因为在这种情况下,它们永远不会到达网络。


推荐阅读