Creé una pequeña lib tcp-exists para verificar si existe un punto final tcp. Solo para iterar sobre una red para encontrar cualquier cosa en puertos especiales.
Pero cuando estoy iterando, algunos de los sockets tcp (que se crean mediante lib tcp-exists ) tardan una gran cantidad de tiempo (1-3 segundos en lugar de 5-20 ms) para establecer conexiones en puntos finales 100% existentes.
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() No hay diferencia entre si estoy revisando el mismo puerto o diferentes puertos en una IP, o si estoy revisando IP diferentes. Algunas de esas conexiones tardarán 100 veces más en establecer una conexión. Puede conducir a una situación en la que existe un punto final, pero la función devolverá false debido a un pequeño tiempo de espera.
No puedo establecer un tiempo de espera superior a 25 ms para una comprobación. Porque si quiero escanear desde 192.168.0.0 a 192.168.255.255 (65536 puntos finales), donde la mayoría de IP no tiene punto final y debe devolverse false por tiempo de espera, y usar, por ejemplo, 1s como tiempo de espera, entonces tomará 65536 segundos o ~18 horas...
El protocolo de enlace TCP significa que el cliente envía un SYN al servidor, el servidor confirma el SYN del cliente y devuelve su propio SYN (generalmente ambos dentro de un solo paquete, es decir, SYN+ACK) y luego los clientes reaccionan al servidor SYN con su ACK propio. La velocidad de los protocolos de enlace depende de la latencia de la red entre el cliente y el servidor y de la rapidez con la que el servidor reacciona a la solicitud de conexión (SYN). Cualquier paquete perdido en el camino debe retransmitirse después de un tiempo de espera, lo que aumenta aún más el tiempo para el protocolo de enlace TCP.
Todo esto está fuera del control del cliente, es decir, no hay forma de acelerarlo. Por lo tanto, los escáneres de alto rendimiento no prueban una conexión tras otra, sino que prueban muchas conexiones en paralelo.