本文目录导读:

- 场景一:批量检测网站/服务是否存活(HTTP状态码)
- 场景二:批量检测IP地址是否在线(Ping扫描)
- 场景三:批量检测文件完整性(MD5校验)
- 场景四:批量检测账号/密码是否有效(配合API或登录接口)
- 实用建议:如何快速撰写批量检测脚本
可以的,实用脚本完全可以实现批量检测,而且这是脚本工具最常见的应用场景之一。
“批量检测”通常指的是:对大量目标(如IP地址、域名、账号、文件、链接等) 重复执行同一个检查或验证操作,并汇总结果。
下面我会分场景介绍几种常见且实用的批量检测脚本思路和简单示例,你可以根据自己的需求选择参考。
批量检测网站/服务是否存活(HTTP状态码)
这是最常见的需求,比如你有100个网址,想快速知道哪些还能打开。
工具推荐: Bash (Linux/Mac) 或 PowerShell (Windows)
Bash 脚本示例 (check_urls.sh):
#!/bin/bash
# 用法: ./check_urls.sh url_list.txt
file="url_list.txt" # 每行一个网址的文件
while IFS= read -r url; do
# -s 静默模式, -o /dev/null 丢弃内容, -w 只输出状态码, --connect-timeout 超时时间
http_code=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 "$url")
if [ "$http_code" -eq 200 ] || [ "$http_code" -eq 301 ] || [ "$http_code" -eq 302 ]; then
echo "[存活] $url -> $http_code"
else
echo "[异常] $url -> $http_code"
fi
done < "$file"
PowerShell 脚本示例 (Check-Urls.ps1):
# 用法: .\Check-Urls.ps1 urls.txt
$file = "urls.txt"
Get-Content $file | ForEach-Object {
$url = $_.Trim()
if ($url -ne "") {
try {
$response = Invoke-WebRequest -Uri $url -TimeoutSec 5 -ErrorAction Stop
$code = $response.StatusCode
if ($code -eq 200 -or $code -eq 301 -or $code -eq 302) {
Write-Host "[存活] $url -> $code" -ForegroundColor Green
} else {
Write-Host "[异常] $url -> $code" -ForegroundColor Yellow
}
} catch {
Write-Host "[失效] $url -> 错误: $($_.Exception.Message)" -ForegroundColor Red
}
}
}
批量检测IP地址是否在线(Ping扫描)
工具推荐: Bash / Python
Bash 脚本示例 (ping_scan.sh):
#!/bin/bash
# 批量ping一个IP段,192.168.1.1 ~ 192.168.1.254
network="192.168.1"
for ip in $(seq 1 254); do
# -c 1 发送1个包, -W 1 超时1秒, > /dev/null 2>&1 丢弃输出
if ping -c 1 -W 1 $network.$ip > /dev/null 2>&1; then
echo "[在线] $network.$ip"
else
echo "[离线] $network.$ip"
fi
done
Python 脚本示例 (ping_check.py):
import subprocess
import concurrent.futures
def ping_ip(ip):
# Windows用 -n 1,Linux/Mac用 -c 1
result = subprocess.run(['ping', '-n', '1', '-w', '1000', ip],
capture_output=True, text=True, timeout=5)
if result.returncode == 0:
return f"[在线] {ip}"
else:
return f"[离线] {ip}"
# 生成IP列表
ips = [f"192.168.1.{i}" for i in range(1, 255)]
# 多线程并发检测,速度极快
with concurrent.futures.ThreadPoolExecutor(max_workers=50) as executor:
futures = {executor.submit(ping_ip, ip): ip for ip in ips}
for future in concurrent.futures.as_completed(futures):
print(future.result())
批量检测文件完整性(MD5校验)
适合检测大量文件是否被修改或损坏。
Python 脚本示例 (check_md5.py):
import hashlib
import os
def get_md5(file_path):
hash_md5 = hashlib.md5()
with open(file_path, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
# 要检测的文件夹
dir_path = "./files_to_check"
correct_checksums = {
"file1.txt": "d41d8cd98f00b204e9800998ecf8427e",
"file2.bin": "098f6bcd4621d373cade4e832627b4f6"
}
for filename, correct_md5 in correct_checksums.items():
filepath = os.path.join(dir_path, filename)
if os.path.exists(filepath):
current_md5 = get_md5(filepath)
if current_md5 == correct_md5:
print(f"[通过] {filename}")
else:
print(f"[损坏] {filename} - 期望 {correct_md5},实际 {current_md5}")
else:
print(f"[缺失] {filename} 未找到")
批量检测账号/密码是否有效(配合API或登录接口)
这类脚本需要针对具体目标编写,但通用思路如下:
import requests
# 准备账号列表
accounts = [
{"username": "user1", "password": "pass1"},
{"username": "user2", "password": "pass2"},
# ...
]
login_url = "https://example.com/api/login"
for acc in accounts:
response = requests.post(login_url, json=acc, timeout=5)
if response.status_code == 200 and response.json().get("success"):
print(f"[有效] {acc['username']}")
else:
print(f"[无效] {acc['username']} - {response.status_code}")
注意: 不要利用这种脚本进行非法攻击或未授权测试,请确保你有检测目标的使用权限。
实用建议:如何快速撰写批量检测脚本
-
输入来源:
- 文本文件(每行一个目标)
- Excel/CSV 文件(用 Python 的
pandas或openpyxl读取) - 数据库查询结果
-
并发处理(提高速度):
- Python:
concurrent.futures.ThreadPoolExecutor(I/O密集型任务) - Bash:用
&放入后台,或使用xargs -P参数(如cat urls.txt | xargs -P 10 -I {} curl -s -o /dev/null -w "%{http_code} {}\n" {})
- Python:
-
输出格式化:
- 控制台彩色输出(
colorama库可跨平台实现) - 导出为 CSV/Excel 文件,方便后续分析
- 控制台彩色输出(
-
错误处理:
- 设置超时(
timeout参数) - 捕获网络异常(
try/except) - 记录失败日志
- 设置超时(
完全可以用脚本批量检测,而且非常高效,上面给出的都是可以直接复制修改的实用脚本,你可以根据自己的具体需求(检测网站、IP、文件、账号、服务端口等)选择对应的脚本模板,稍作调整即可投入使用。
如果你有具体的检测目标类型(比如想批量检测某个特定服务的端口、检测某个特定格式的文件是否正确等),欢迎告诉我,我可以帮你写一个更精准的脚本示例。