ip
- ip 测试
# test_crawl_sync.py
import requests
import random
import time
TARGET = "https://whumystery.cn" # <- 修改为你要测试的主机(包含协议)
PATHS = [
"/", "/index.php", "/index.html", "/home", "/web/xxx", "/admin", "/login",
"/robots.txt", "/sitemap.xml", "/api", "/search", "/static/style.css",
"/images/logo.png", "/unknown/path", "/.git/config"
]
USER_AGENTS = [
"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)",
"curl/7.64.1",
"Wget/1.20.3 (linux-gnu)",
"python-requests/2.x"
]
NUM_REQUESTS = 15
DELAY_BETWEEN = 0.2 # 每次请求间隔(秒),可调
def main():
session = requests.Session()
for i in range(NUM_REQUESTS):
path = random.choice(PATHS)
url = TARGET.rstrip("/") + path
headers = {
"User-Agent": random.choice(USER_AGENTS),
# 不发送 Referer 或 Cookies,模拟“纯爬虫”请求
}
try:
resp = session.get(url, headers=headers, timeout=10, allow_redirects=True)
print(f"[{i+1}/{NUM_REQUESTS}] {url} -> {resp.status_code} ({len(resp.content)} bytes)")
except Exception as e:
print(f"[{i+1}/{NUM_REQUESTS}] {url} -> ERROR: {e}")
time.sleep(DELAY_BETWEEN)
if __name__ == "__main__":
main()
复制同一个有效链接不停复制-没封 但会产生问题,很快的刷新不会调用put /joke脚本,会导致以2次/次的计数,5次封禁 将超时时间改为60s,每次更改ip_cache后打印,会得到121,232,343……共9次触发封禁 调试正常
- 存在一个问题,由于已加载的vue页面不会变,所以封禁后仍可以调用后端逻辑如查日志,但不能刷新页面或者跳转
ip
- 配置封禁 ip,针对 10 秒内 5 次异常访问的,封禁 10 分钟
- 发现网上的很多扫描行为:
- 端口有: /,/form.html,/upl.php,/t4,/geoip,/1.php,/password,/TQSd,/nXVA,/aab8, /jquery-3.3.1.slim.min.js,/aab9,/jquery-3.3.2.slim.min.js
- 还有 HEAD /start/index.html
- 使用
ssl_reject_handshake on可以避免 Censys 识别服务器 ip(真的吗?) - 使用 Censys 发现服务器 ip 已经泄漏了
- 禁止直接访问服务器 ip 可以避免在 Censys 上挂名
ip 封禁
- 未考虑竞态,应该不会出问题(,最多只是丢失一次请求的记录,当两个请求同时获取一个 count 并修改的时候
- 没有使用滑动窗口,如果 1s 访问 1 次,8-9s 访问 3 次,11-12s 访问 4 次,理论上 8-12s 访问 7 次超限了,但第 11s 清除了 1-10s 的记录故不会超限
- 错误路径触发 ip 封禁逻辑:
- 跳过武汉大学 ip
- 查找 ip 记录
- 跳过 -2(历史封禁,不处理)
- 如果为 -1
- 封禁中,返回 true
- 如果为 1-4
- 次数加 1
- 如果为 5
- 次数变为 -1
- 触发封禁,返回 true
- 如果不存在
- 插入新记录
- 解封
- 对于首次访问时间超过访问间隔的记录重置为 0
- 对于记录时间超过封禁间隔的记录设置为 -2