name: fscan-agent
description: 使用 fscan 进行网络扫描和安全评估。当用户要求扫描网段、探测主机存活、发现开放端口、识别服务、检测漏洞或弱口令时使用。支持 NDJSON 结构化输出,适合 AI agent 管道消费。
argument-hint: <目标IP/网段> [附加参数]
allowed-tools: Bash, Read, Agent
Fscan AI Agent Skill
工具概述
Fscan 是一款内网综合扫描工具,功能包括:
- 主机存活探测(ICMP / TCP)
- 端口扫描与服务识别
- 漏洞检测(MS17-010、Redis 未授权等)
- 弱口令爆破(SSH、SMB、MySQL、MSSQL、FTP、RDP 等)
- Web 指纹识别与 POC 扫描
- NetBIOS / SMB 信息收集
- 本地信息收集(杀软检测、系统信息等)
二进制路径:当前项目编译产物 fscan_cli,或系统 PATH 中的 fscan。
调用格式
# AI agent 标准用法:NDJSON 输出,无人类日志干扰
fscan -h <目标> -silent [其他参数]
# 解析输出
fscan -h 192.168.1.0/24 -silent | jq 'select(.type=="VULN")'
核心参数
目标指定
| 参数 |
说明 |
示例 |
-h |
目标主机(IP / CIDR / 范围) |
-h 192.168.1.0/24 -h 10.0.0.1-10.0.0.100 |
-hf |
从文件读取目标 |
-hf targets.txt |
-p |
指定端口(逗号/范围) |
-p 22,80,443,445,3306 -p 1-1000 |
-ep |
排除端口 |
-ep 25,110 |
-eh |
排除主机 |
-eh 192.168.1.1 |
-u |
指定 URL(Web 扫描) |
-u https://example.com |
-uf |
URL 文件 |
-uf urls.txt |
扫描控制
| 参数 |
说明 |
默认值 |
-m |
扫描模式 |
all |
-t |
端口扫描线程数 |
600 |
-mt |
模块线程数 |
20 |
-time |
连接超时(秒) |
3 |
-gt |
全局超时(秒) |
180 |
-np |
跳过存活检测 |
false |
-ntp |
禁用 TCP 补充探测 |
false |
-ao |
仅存活检测 |
false |
-nobr |
禁用暴力破解 |
false |
-full |
全量 POC 扫描 |
false |
-max-retries |
最大重试次数 |
1 |
认证
| 参数 |
说明 |
-user |
用户名 |
-pwd |
密码 |
-usera |
追加用户名 |
-pwda |
追加密码,支持逗号或空格分隔多个值 |
-userf |
用户名字典文件 |
-pwdf |
密码字典文件 |
-domain |
域名(SMB/WMI) |
-sshkey |
SSH 私钥文件 |
-hash / -hashf |
NTLM Hash / Hash 文件 |
代理
| 参数 |
说明 |
-socks5 |
SOCKS5 代理 (127.0.0.1:1080) |
-proxy |
HTTP 代理 (http://127.0.0.1:8080) |
-iface |
指定本地网卡 IP(VPN 场景) |
输出
| 参数 |
说明 |
-silent |
静默模式:stdout 仅输出 NDJSON |
-o |
输出文件路径(默认 result.txt) |
-f |
输出格式:txt / json / csv |
-no |
禁用文件保存 |
-debug |
调试模式:日志写入 fscan_debug.log |
-log |
日志级别(debug / info / base / error) |
扫描模式 -m 的取值
| 值 |
说明 |
all |
全部扫描(默认) |
icmp |
仅 ICMP 存活检测 |
| 插件名 |
仅运行指定插件(如 ssh、smb、ms17010、webtitle) |
服务插件列表
| 插件 |
默认端口 |
功能 |
ftp |
21 |
FTP 弱口令 |
ssh |
22 |
SSH 弱口令 |
telnet |
23 |
Telnet 弱口令 |
smtp |
25 |
SMTP 弱口令 |
findnet |
135 |
RPC 网络信息发现(NetInfo) |
netbios |
139 |
NetBIOS 信息收集 |
smb |
445 |
SMB 弱口令 |
ms17010 |
445 |
MS17-010 永恒之蓝检测 |
ldap |
389 |
LDAP 弱口令 |
mssql |
1433 |
MSSQL 弱口令 |
oracle |
1521 |
Oracle 弱口令 |
mysql |
3306 |
MySQL 弱口令 |
rdp |
3389 |
RDP 弱口令 + 系统信息 |
postgresql |
5432 |
PostgreSQL 弱口令 |
vnc |
5900 |
VNC 弱口令 |
redis |
6379 |
Redis 未授权 + 弱口令 |
elasticsearch |
9200 |
ES 未授权 |
mongodb |
27017 |
MongoDB 未授权 + 弱口令 |
memcached |
11211 |
Memcached 未授权 |
kafka |
9092 |
Kafka 未授权 |
activemq |
61616 |
ActiveMQ 弱口令 |
rabbitmq |
5672 |
RabbitMQ 弱口令 |
cassandra |
9042 |
Cassandra 弱口令 |
neo4j |
7687 |
Neo4j 弱口令 |
rsync |
873 |
Rsync 未授权 |
webtitle |
80/443 |
Web 标题 + 指纹识别 |
webpoc |
80/443 |
Web 漏洞 POC |
本地插件(-local)
fscan -local avdetect # 杀软检测
fscan -local systeminfo # 系统信息收集
fscan -local envinfo # 环境变量信息
fscan -local dcinfo # 域控信息
fscan -local fileinfo # 敏感文件搜索
NDJSON 输出 Schema(-silent 模式)
每行一个 JSON 对象,所有字段定义:
| 字段 |
类型 |
出现条件 |
说明 |
type |
string |
必有 |
HOST / PORT / SERVICE / VULN |
target |
string |
必有 |
原始目标 host 或 host:port |
status |
string |
必有 |
状态描述 |
host |
string |
必有 |
IP 地址 |
port |
int |
PORT/SERVICE/VULN |
端口号 |
service |
string |
SERVICE/VULN |
服务名(ssh, smb, http 等) |
protocol |
string |
HOST/SERVICE |
协议(ICMP, TCP, http, https) |
banner |
string |
SERVICE |
服务 Banner |
title |
string |
SERVICE (web) |
网页标题 |
url |
string |
SERVICE (web) |
完整 URL |
vulnerability |
string |
VULN |
漏洞名称 |
username |
string |
VULN (弱口令) |
用户名 |
password |
string |
VULN (弱口令) |
密码 |
plugin |
string |
SERVICE/VULN |
产生结果的插件名 |
version |
string |
SERVICE |
服务版本号 |
os |
string |
SERVICE |
操作系统信息 |
输出示例
{"type":"HOST","target":"192.168.1.5","status":"alive","host":"192.168.1.5","protocol":"ICMP"}
{"type":"PORT","target":"192.168.1.5","status":"open","host":"192.168.1.5","port":22}
{"type":"PORT","target":"192.168.1.5","status":"open","host":"192.168.1.5","port":445}
{"type":"SERVICE","target":"192.168.1.5:22","status":"identified","host":"192.168.1.5","port":22,"service":"ssh","banner":"SSH-2.0-OpenSSH_8.9p1","version":"8.9p1","plugin":"portscan"}
{"type":"SERVICE","target":"192.168.1.5:80","status":"web","host":"192.168.1.5","port":80,"service":"http","protocol":"http","url":"http://192.168.1.5:80","title":"Welcome","plugin":"webtitle"}
{"type":"VULN","target":"192.168.1.5:445","status":"MS17-010 (Windows Server 2012 R2 Standard 9600)","host":"192.168.1.5","port":445,"vulnerability":"MS17-010","service":"smb","plugin":"ms17010"}
{"type":"VULN","target":"192.168.1.5:22","status":"weak_credential: root:123456","host":"192.168.1.5","port":22,"service":"ssh","username":"root","password":"123456","plugin":"ssh"}
{"type":"VULN","target":"192.168.1.5:6379","status":"Redis unauthorized","host":"192.168.1.5","port":6379,"vulnerability":"Redis unauthorized access","service":"redis","plugin":"redis"}
结果产出顺序
HOST — 存活探测阶段
PORT — 端口扫描阶段(与 SERVICE 可能交错)
SERVICE — 服务识别阶段
VULN — 漏洞/弱口令检测阶段
同一 host:port 可产生多条结果(PORT + SERVICE + VULN)。
常用场景参数组合
全网段快速扫描
fscan -h 192.168.1.0/24 -silent
跳过存活检测直接扫端口(目标明确时)
fscan -h 192.168.1.0/24 -silent -np
指定端口精确扫描
fscan -h 10.0.0.0/24 -silent -p 22,80,443,445,3389,3306,6379
仅存活探测
fscan -h 172.16.0.0/16 -silent -m icmp
低速隐蔽扫描
fscan -h 192.168.1.0/24 -silent -t 30 -time 5
通过 SOCKS5 代理扫描内网
fscan -h 10.0.0.0/24 -silent -socks5 127.0.0.1:1080
仅做弱口令检测
fscan -h 192.168.1.10 -silent -m ssh -user root -pwdf /path/to/passwords.txt
Web 目标扫描
fscan -u https://target.com -silent -full
多目标文件批量扫描
fscan -hf targets.txt -silent -o results.json -f json
带调试日志的排障扫描
# NDJSON 到 stdout,debug 日志到文件,互不干扰
fscan -h 192.168.1.0/24 -silent -debug
# 事后查看:cat fscan_debug.log
AI Agent 结果处理
Python 管道消费
import json, subprocess
proc = subprocess.Popen(
["fscan", "-h", "192.168.1.0/24", "-silent"],
stdout=subprocess.PIPE, text=True
)
hosts, services, vulns = [], [], []
for line in proc.stdout:
r = json.loads(line)
if r["type"] == "HOST":
hosts.append(r["host"])
elif r["type"] == "SERVICE":
services.append(r)
elif r["type"] == "VULN":
vulns.append(r)
proc.wait()
jq 过滤
# 提取所有弱口令
fscan -h 10.0.0.0/24 -silent | jq -r 'select(.username != null) | "\(.host):\(.port) \(.service) \(.username):\(.password)"'
# 提取所有漏洞
fscan -h 10.0.0.0/24 -silent | jq -r 'select(.type=="VULN") | "\(.host):\(.port) \(.vulnerability)"'
# 提取 Web 服务
fscan -h 10.0.0.0/24 -silent | jq -r 'select(.url != null) | "\(.url) \(.title)"'
# 统计开放端口
fscan -h 10.0.0.0/24 -silent | jq -r 'select(.type=="PORT") | .port' | sort -n | uniq -c | sort -rn
注意事项
-silent 抑制所有人类可读日志,stdout 仅输出 NDJSON
- 空字段不出现在 JSON 中(
omitempty)
- 进程退出码
0 正常完成,非 0 表示参数错误或初始化失败
-silent 和 -debug 可同时使用,互不干扰
- SOCKS5 代理下 fscan 信任协议层连接结果,不做额外深度验证
- 扫描大网段时线程数会自动调整,资源耗尽时自适应降级
- 默认超时 3 秒,防火墙 drop 的端口会静默超时,不计入失败率