背景:
我正在阅读 Black Hat Go,作者展示了一个使用 goroutines 1的简单端口扫描器:
package main
import (
"fmt"
"net"
)
func main() {
for i := 1; i <= 9000; i++ {
go func(j int) {
address := fmt.Sprintf("127.0.0.1:%d", j)
conn, err := net.Dial("tcp", address)
if err != nil {
return
}
conn.Close()
fmt.Printf("%d open\n", j)
}(i)
}
}
然后他提到以下内容:
同时扫描过多的主机或端口可能会导致网络或系统限制影响您的结果。
为了测试它,我在端口 8000 和 8500 上启动了 2 个 php 服务器2并运行上面的代码来扫描我的本地端口。
每次它给我的结果不一致。有时它会检测到两个打开的端口,有时它不会。
问题:
不一致的结果是否是由于 TCP 的某些限制?
有没有办法计算可以并行扫描的最佳端口数,以使结果保持正确?
编辑:
我似乎错过了上面代码中的等待组。
除此之外,是否还有其他任何东西(操作系统限制或协议限制)可以防止在大范围内进行并发端口扫描?
慕沐林林
红糖糍粑
随时随地看视频慕课网APP
相关分类