mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-24 04:01:52 +08:00
- DNS 解析缓存:sync.Map 缓存避免重复系统调用 - 凭据测试 TCP 预检:不可达目标直接跳过全部凭据 - Web 探测 HTTP Client 复用:全局共享连接池 - 端口扫描 Bloom Filter 去重:替代 map 降低内存 - 进度条 atomic 累加 + 50ms 节流渲染:消除锁竞争 - 服务探针预解码:Init 时预编译,运行时零解码开销
28 lines
573 B
Go
28 lines
573 B
Go
package common
|
|
|
|
import (
|
|
"net"
|
|
"sync"
|
|
)
|
|
|
|
// DNSCache 并发安全的 DNS 解析缓存
|
|
// 对纯 IP 输入零开销(直接返回),对域名避免重复系统调用
|
|
var DNSCache = &dnsCache{}
|
|
|
|
type dnsCache struct {
|
|
m sync.Map // host -> *net.IPAddr
|
|
}
|
|
|
|
// ResolveIP 解析 host 为 *net.IPAddr,结果缓存
|
|
func (c *dnsCache) ResolveIP(host string) (*net.IPAddr, error) {
|
|
if v, ok := c.m.Load(host); ok {
|
|
return v.(*net.IPAddr), nil
|
|
}
|
|
addr, err := net.ResolveIPAddr("ip", host)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
c.m.Store(host, addr)
|
|
return addr, nil
|
|
}
|