sensorfleet/pscan

GitHub: sensorfleet/pscan

Rust 编写的轻量级 TCP 端口扫描器,支持 CIDR 网段扫描、Banner 抓取和 JSON 输出。

Stars: 4 | Forks: 1

# pscan `pscan` 是一个 TCP 端口扫描器,可用于扫描主机/网络以查找开放的 TCP 端口。结果可以以人类可读或 JSON 格式打印。 ## 构建说明 `pscan` 是使用 [rust](http://www.rust-lang.org/) 编写的。如果你已安装 rust 工具链,可以使用 `cargo build --release` 进行编译。目前支持的平台是 Linux 和 Mac OS。 ## 使用说明 使用 `pscan --help` 获取命令行参数的帮助信息: ``` USAGE: pscan [OPTIONS] OPTIONS: -b, --concurrent-scans Number of concurrent scans to run [default: 100] -B, --read-banner Try to read up to read-banner-size bytes (with read-banner-timeout) when connection is established -C, --config Read configuration from given JSON file -e, --exclude Comma -separated list of addresses to exclude from scanning -h, --help Print help information -H, --concurrent-hosts Number of hosts to scan concurrently. Can be used to limit the number of hosts to scan at the same time, if number of concurrent threads is large. If no value is set, number of concurrent scans is used -j, --json Write output as JSON into given file, - to write to stdout -p, --ports Ports to scan [default: 1-100] -r, --try-count Number of times to try a port which receives no response (including the initial try) [default: 2] -R, --retry-on-error Retry scan a few times on (possible transient) network error --read-banner-size Maximum number of bytes to read when reading banner from open port [default: 256] --read-banner-timeout Timeout in ms to wait for when reading banner from open port [default: 1000] -t, --target Address(es) of the host(s) to scan, IP addresses, or CIDRs separated by comma -T, --timeout Timeout in ms to wait for response before determening port as closed/firewalled [default: 1000] -v, --verbose Verbose output -V, --version Print version information ``` 要扫描主机或网络,请使用 `--target` 命令行选项指定目标地址。目标应为逗号分隔的 IP 地址列表或 CIDR 表示法(地址/掩码)的网络。可以使用 `--exclude` 选项从扫描中排除单个主机。可以使用 `--ports` 选项定义要扫描的端口。`--timeout` 选项指定在将端口标记为已过滤(filtered)之前等待连接建立的时间(以毫秒为单位)。 要扫描 "192.168.1.0/24" 网络以及主机 "10.0.0.1" 和 "10.0.0.2" 的所有端口,但排除主机 "192.168.1.100",请使用以下命令运行 `pscan`: ``` pscan --target 192.168.1.0/24,10.0.0.1,10.0.0.2 --exclude 192.168.1.100 --ports 1-65535 ``` 并发扫描的数量可以通过 `--concurrent-scans` 选项控制。请注意,将此数量增加到超过“最大打开文件数” ulimit 将导致错误,可以使用 `ulimit -n` 命令增加此限制。`--concurrent-hosts` 选项可用于限制同时扫描的主机数量。默认情况下,pscan 会在多个主机之间分散扫描,此选项可用于限制同时扫描的主机数量。 如果设置了 `--read-banner` 标志,`pscan` 将尝试从开放端口读取数据,并在扫描完成后显示接收到的任何数据。可以使用 `--read-banner-size` 和 `--read-banner-timeout` 选项定义要读取的最大字节数和等待数据的时间。 默认情况下,对于未收到响应的端口,在将其标记为已过滤之前会重试一次。使用 `--try-count` 选项可以更改尝试连接的次数。 ### 配置文件 配置选项也可以在 JSON 格式的配置文件中给出。要读取配置文件,请使用 `--config` 命令行选项。配置文件应包含字段为命令行选项的 JSON 对象: ``` { "target": "192.168.1.0/24, 10.0.0.1, 10.0.0.2", "exclude": "192.168.1.100", "ports": "22,80,8080,443,8443,9000-9005", "read-banner": true } ``` 在命令行上设置的选项将覆盖配置文件中设置的选项。对于配置文件中未指定的选项,将使用命令行选项的默认值。 ## 输出 默认情况下,`pscan` 会在扫描完成后在命令行打印摘要: ``` jtt@jimmy:~/pscan$ ./pscan -t 192.168.1.0/24 -p 1-65535 -b 1000 -r 2 -B Scan complete: 192.168.1.1 is Up 5 Open Ports: 80 22 443 10001 53 65530 ports closed and 0 filtered (delays: min 0ms, max 133ms) 192.168.1.202 is Up 10 Open Ports: 22 5514 3000 8843 8080 8081 6789 8443 8880 8086 65525 ports closed and 0 filtered (delays: min 0ms, max 10ms) Banners received from open ports: Port: 22 "SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u2" 192.168.1.241 is Up 4 Open Ports: 1443 1843 1400 1410 64271 ports closed and 1260 filtered (delays: min 1ms, max 355ms) 65535 ports on 256 hosts scanned, 2 hosts did not have open ports, 241 hosts reported down by OS ``` 如果指定了 `--verbose` 命令行选项,`pscan` 将在扫描主机时打印信息,并在扫描完成后打印摘要。 `pscan` 的输出可能会不时发生变化,并不旨在供其他程序解析。JSON 输出更稳定,可供其他程序解析结果。 ### JSON 输出 使用 `--json` 命令行选项,结果将以 JSON 格式打印到具有给定名称的文件中。如果将 `-` 作为文件名,则 JSON 数据将写入 stdout。 结果以单个 JSON 对象后跟换行符的形式写入。解析数据时,读取一行后应已收到格式良好的 JSON 对象。 JSON 输出如下: ``` { "message": "scan_complete", "number_of_hosts": 256, "number_of_ports": 65535, "results": [ { "host": "192.168.1.202", "open_ports": [ 22, 5514, 3000, 6789, 8080, 8081, 8843, 8443, 48668, 46122, 42762, 8086, 8880 ], "closed": 65522, "filtered": 0, "banners": { "22": "U1NILTIuMC1PcGVuU1NIXzcuOXAxIERlYmlhbi0xMCtkZWIxMHUyDQo=" } }, { "host": "192.168.1.241", "open_ports": [1443, 1843, 1400, 1410], "closed": 65293, "filtered": 238, "banners": {} }, { "host": "192.168.1.1", "open_ports": [80, 22, 443, 10001, 53], "closed": 65530, "filtered": 0, "banners": {} } ] } ``` | 元素 | 值 | | ----------------- | ------------------------------------------------------------------------------------ | | message | 数据的 "type",目前仅支持 "`scan_complete`" | | numer_of_hosts | 扫描的主机数量 | | number_of_ports | 每台主机上扫描的端口数量 | | results | 对象数组,每个对象包含至少有一个开放端口的主机的结果 | | result:host | 被扫描主机的 IP 地址 | | result:open_ports | 包含开放端口号的数组 | | result:closed | 关闭(远端已回复)的端口数量 | | result:filtered | 已过滤(未收到回复)的端口数量 | | result:banners | 包含端口号作为 "key"(键),接收到的数据以 base64 编码作为 value(值)的对象 |
标签:API安全, Banner抓取, DNS查询工具, JSON输出, MacOS, Rust, TCP扫描, 可视化界面, 插件系统, 数据泄露防护, 服务器安全, 端口扫描器, 网络安全, 网络探测, 网络流量审计, 轻量级工具, 通知系统, 通知系统, 隐私保护