跳到主要内容

finscan

finscan 库实现 FIN 扫描——一种隐蔽的端口扫描技术:向目标端口发送仅置 FIN 标志的 TCP 包,依据是否回 RST 判断端口状态。相比 SYN 扫描更隐蔽,可绕过部分简单防火墙/日志,但对现代系统准确性有限。

典型使用场景:

  • 扫描:finscan.Scan(target, port, opts...) 对目标端口做 FIN 扫描,返回结果 channel。
  • 控制:finscan.concurrent / finscan.rateLimit 控速,finscan.excludeHosts / finscan.excludePorts 排除,finscan.wait 控制收包等待,finscan.outputFile / finscan.outputPrefix 落盘。

与相邻库的关系:finscan 与 synscan(SYN 半开放扫描)同属底层端口探测,需要原始套接字权限;发现开放端口后可交给 servicescan 做指纹识别。

共 10 个函数

函数索引​

函数参数返回值说明
finscan.concurrentcount intfinScanOpt设置 FIN 扫描的并发,可以有效控制精准度
finscan.excludeHostshosts stringfinScanOpt设置 FIN 扫描时需要排除的主机
finscan.excludePortsports stringfinScanOpt设置 FIN 扫描时需要排除的端口
finscan.initHostFilterf stringfinScanOpt设置 FIN 扫描的初始主机过滤器,仅扫描命中过滤器的主机
finscan.initPortFilterf stringfinScanOpt设置 FIN 扫描的初始端口过滤器,仅扫描命中过滤器的端口
finscan.outputFilefile stringfinScanOpt设置 FIN 扫描的端口开放结果保存到指定文件
finscan.outputPrefixprefix stringfinScanOpt设置 FIN 扫描结果保存到文件时添加自定义前缀,比如 tcp:// https:// http:// 等,需要配合 outputFile 使用
finscan.rateLimitms int, count intfinScanOpt设置 FIN 扫描的发包速率限制(每 count 个数据包延迟 ms 毫秒)
finscan.waitsec float64finScanOpt设置 FIN 扫描发出 FIN 包后等待回包的最大时间

可变参数函数索引​

函数参数返回值说明
finscan.Scantarget string, port string, opts ...finScanOptchan *finscan.FinScanResult, error

函数详情​

concurrent​

concurrent(count int) finScanOpt

设置 FIN 扫描的并发,可以有效控制精准度

在 yak 中通过 finscan.concurrent 调用

参数

参数名类型说明
countint并发数

返回值

序号类型说明
r1finScanOpt一个 finscan.Scan 可接收的配置选项

示例

// 该示例为示意性用法:设置 FIN 扫描并发
res = finscan.Scan("192.168.1.1", "1-1000", finscan.concurrent(1000))~

excludeHosts​

excludeHosts(hosts string) finScanOpt

设置 FIN 扫描时需要排除的主机

在 yak 中通过 finscan.excludeHosts 调用

参数

参数名类型说明
hostsstring需要排除的主机表达式,支持 IP、CIDR、范围等

返回值

序号类型说明
r1finScanOpt一个 finscan.Scan 可接收的配置选项

示例

// 该示例为示意性用法:排除网关地址
res = finscan.Scan("192.168.1.1/24", "80", finscan.excludeHosts("192.168.1.1"))~

excludePorts​

excludePorts(ports string) finScanOpt

设置 FIN 扫描时需要排除的端口

在 yak 中通过 finscan.excludePorts 调用

参数

参数名类型说明
portsstring需要排除的端口表达式,如 "9100,9200"

返回值

序号类型说明
r1finScanOpt一个 finscan.Scan 可接收的配置选项

示例

// 该示例为示意性用法:排除指定端口
res = finscan.Scan("192.168.1.1", "1-65535", finscan.excludePorts("9100,9200"))~

initHostFilter​

initHostFilter(f string) finScanOpt

设置 FIN 扫描的初始主机过滤器,仅扫描命中过滤器的主机

在 yak 中通过 finscan.initHostFilter 调用

参数

参数名类型说明
fstring初始主机过滤表达式

返回值

序号类型说明
r1finScanOpt一个 finscan.Scan 可接收的配置选项

示例

// 该示例为示意性用法:设置初始主机过滤器
res = finscan.Scan("192.168.1.1/24", "80", finscan.initHostFilter("192.168.1.0/24"))~

initPortFilter​

initPortFilter(f string) finScanOpt

设置 FIN 扫描的初始端口过滤器,仅扫描命中过滤器的端口

在 yak 中通过 finscan.initPortFilter 调用

参数

参数名类型说明
fstring初始端口过滤表达式

返回值

序号类型说明
r1finScanOpt一个 finscan.Scan 可接收的配置选项

示例

// 该示例为示意性用法:设置初始端口过滤器
res = finscan.Scan("192.168.1.1", "1-65535", finscan.initPortFilter("80,443"))~

outputFile​

outputFile(file string) finScanOpt

设置 FIN 扫描的端口开放结果保存到指定文件

在 yak 中通过 finscan.outputFile 调用

参数

参数名类型说明
filestring结果保存的文件路径

返回值

序号类型说明
r1finScanOpt一个 finscan.Scan 可接收的配置选项

示例

// 该示例为示意性用法:将结果保存到文件
res = finscan.Scan("192.168.1.1", "1-65535", finscan.outputFile("/tmp/open_ports.txt"))~

outputPrefix​

outputPrefix(prefix string) finScanOpt

设置 FIN 扫描结果保存到文件时添加自定义前缀,比如 tcp:// https:// http:// 等,需要配合 outputFile 使用

在 yak 中通过 finscan.outputPrefix 调用

参数

参数名类型说明
prefixstring保存到文件时添加的前缀,例如 tcp://

返回值

序号类型说明
r1finScanOpt一个 finscan.Scan 可接收的配置选项

示例

// 该示例为示意性用法:为结果添加前缀
res = finscan.Scan("192.168.1.1", "1-65535", finscan.outputFile("./open_ports.txt"), finscan.outputPrefix("tcp://"))~

rateLimit​

rateLimit(ms int, count int) finScanOpt

设置 FIN 扫描的发包速率限制(每 count 个数据包延迟 ms 毫秒)

在 yak 中通过 finscan.rateLimit 调用

参数

参数名类型说明
msint延迟毫秒数
countint每多少个数据包延迟一次

返回值

序号类型说明
r1finScanOpt一个 finscan.Scan 可接收的配置选项

示例

// 该示例为示意性用法:限制发包速率
res = finscan.Scan("192.168.1.1", "1-1000", finscan.rateLimit(10, 5))~

wait​

wait(sec float64) finScanOpt

设置 FIN 扫描发出 FIN 包后等待回包的最大时间

在 yak 中通过 finscan.wait 调用

参数

参数名类型说明
secfloat64等待时间,单位为秒

返回值

序号类型说明
r1finScanOpt一个 finscan.Scan 可接收的配置选项

示例

// 该示例为示意性用法:设置等待时间
res = finscan.Scan("192.168.1.1", "80,443", finscan.wait(5))~

可变参数函数详情​

Scan​

Scan(target string, port string, opts ...finScanOpt) (chan *finscan.FinScanResult, error)

暂无描述

必填参数

参数名类型说明
targetstring
portstring

可选参数

参数名类型说明
opts...finScanOpt

返回值

序号类型说明
r1chan *finscan.FinScanResult
r2error