name
fscan-agent
description
使用 fscan 进行网络扫描和安全评估。当用户要求扫描网段、探测主机存活、发现开放端口、识别服务、检测漏洞或弱口令时使用。支持 NDJSON 结构化输出,适合 AI agent 管道消费。
argument-hint
<目标IP/网段> [附加参数]
allowed-tools
Bash, Read, Agent
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)
值
说明
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
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
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
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
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 ()
# 提取所有弱口令
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 的端口会静默超时,不计入失败率