javascript - 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 如何连接到服务器有关。但我就是不知道怎么做。
解决方案
您收到此错误的原因是 nmap 立即关闭了连接。当你的回调开始执行时,Node.js 已经获得了 RST 数据包并且它知道连接已关闭,因此它通过立即抛出错误来禁止写入它 - 套接字是确保这一点的状态机。
通常,您应该随时准备好处理连接状态错误-任何写入调用都可能失败。这与丢失数据包不同,因为在这种情况下,它们永远不会到达网络。
推荐阅读
- java - 如何使用 Jackson 将 JSON 键值数组动态映射到子对象?
- c# - 防止扫描仪冻结程序
- powerbi - 将选项卡导出为单独的报告
- spring-boot - 多模块 Gradle 项目 - 从 Spring-Boot 1.5 迁移到 2.1
- c - 如何为C中的链表头分配空间?
- angular - Karma 在测试结果上渲染 html
- reactjs - 使用 React 和 Redux 连接在一起的父子组件中的值未定义。应用程序崩溃
- swift - 如何以编程方式使没有宽度的自定义按钮居中
- python - python中这个公式的具体正则表达式
- html - CSS / html Position:sticky 对我不起作用