【发布时间】:2021-12-11 09:52:35
【问题描述】:
我创建了小库 tcp-exists 来检查 tcp 端点是否存在。只需遍历网络以在特殊端口上查找任何内容。
但是当我迭代时——一些 tcp 套接字(由 lib tcp-exists 创建)需要大量时间(1-3 秒而不是 5-20 毫秒)才能在 100% 现有端点上建立连接。
import tcpExists from 'tcp-exists'
async function main () {
for (let i = 1; i < 250; ++i) {
let time = performance.now()
const exists = await tcpExists('192.168.1.87', 80, 2000)
time = performance.now() - time
console.log(`time [${i}]:`, time)
if (time > 500) console.log('=====STRANGE=====')
if (!exists) console.log('exists')
}
}
main()
在一个 IP 上检查相同端口或不同端口,或者检查不同 IP 之间没有区别。其中一些连接将花费 x100 多倍的时间来建立连接。可能会导致存在端点存在的情况,但由于超时时间很小,该函数将返回false。
我无法为一次检查设置大于 25 毫秒的超时。因为如果我想从 192.168.0.0 扫描到 192.168.255.255(65536 个端点)——大部分 IP 没有端点,应该通过超时返回false——并使用例如 1s 作为超时——那么它将需要65536 秒或 ~18 小时...
【问题讨论】:
-
使用 Wireshark。您可能会发现额外的时间来自主机没有立即回复您。此外,如果您想制作端口扫描器,则不需要完整的 TCP 连接。另见:tripwire.com/state-of-security/featured/…
-
为什么要连续连接同一个 IP/端口 250 次?
-
@jfriend00 这是一个复制问题的简单示例
标签: javascript node.js sockets tcp