Python 多线程 Tor 代理,
你是否曾想过同时出现在两个不同的地方?
当我向自己提出这个问题时,实际上我就在脑海中开始开发这个解决方案。
在执行渗透测试时,安全设备屏蔽“攻击”IP 经常会引发问题。
这让我非常烦恼,于是我编写了一个脚本来解决这个问题。
使用大量 IP 地址执行攻击,能保证更好的结果——尤其是在尝试绕过 Web 应用防火墙、暴力破解类型攻击等场景下。
[Blackhat Asia] https://www.blackhat.com/asia-17/arsenal.html#pymultitor
[Owasp-IL 演讲] https://www.owasp.org/images/3/3d/OWASPIL-2016-02-02_PyMultiTor_TomerZait.pdf
[DigitalWhisper 文章(希伯来语)] http://www.digitalwhisper.co.il/files/Zines/0x2E/DW46-3-PyMultitor.pdf

sudo apt install -y torsudo yum install -y torsudo dnf install -y tor{tor-win32-*_path}\Tor--tor-cmd 参数(例如:pymultitor --tor-cmd "c:\Pentest\Web\tor-win32-0.2.9.9\Tor\tor.exe")brew install torpip3 install pymultitor
docker pull realgam3/pymultitor
git clone https://github.com/realgam3/pymultitor.git
cd pymultitor
# 安装 Python 依赖。
# 根据你的设置,以下命令之一或全部可能需要 sudo。
pip3 install -r requirements.txt
python3 setup.py install
# 确认一切正常
pymultitor --help
欢迎反馈安装问题!
pymultitor --on-string "Your IP Address Blocked"。http://127.0.0.1:8080)。Your IP Address Blocked 时,你将从一个新的 IP 地址退出。docker run --rm -p 8080:8080 realgam3/pymultitor --on-string "Your IP Address Blocked"。http://127.0.0.1:8080)。Your IP Address Blocked 时,你将从一个新的 IP 地址退出。PyMultiTor 提供了一个 REST API 用于管理代理身份。你可以使用 API 按需更改代理身份。
API 需要使用 Bearer 令牌进行认证。可以通过两种方式设置令牌:
环境变量:设置 PYMULTITOR_TOKEN 环境变量:
export PYMULTITOR_TOKEN="your-secret-token-here"
注意:如果未设置 PYMULTITOR_TOKEN,PyMultiTor 将自动生成一个随机令牌。
命令行:启动 PyMultiTor:
pymultitor
更改身份
/identityPOST使用示例:
curl http://pymultitor/identity -X POST \
--header "Proxy-Authorization: Bearer {Token}" \
--proxy http://localhost:8080
状态
/statusGET使用示例:
curl http://pymultitor/status \
--header "Proxy-Authorization: Bearer {Token}" \
--proxy http://localhost:8080
注意:将 {Token} 替换为你的实际认证令牌。
pymultitor --help
usage: pymultitor.py [-h] [-v] [-lh LISTEN_HOST] [-lp LISTEN_PORT] [-s] [-a AUTH] [-i] [-d] [-p PROCESSES] [-c CMD] [-e CONFIG] [-t TIMEOUT] [-r TRIES]
[--request-timeout REQUEST_TIMEOUT] [--on-count ON_COUNT] [--on-string ON_STRING] [--on-regex ON_REGEX] [--on-rst] [--on-status-code [ON_STATUS_CODE ...]]
[--on-timeout]
options:
-h, --help 显示此帮助信息并退出
-v, --version 显示程序版本号并退出
-lh, --host LISTEN_HOST
代理监听主机(默认:127.0.0.1)
-lp, --port LISTEN_PORT
代理监听端口(默认:8080)
-s, --socks 使用 socks 代理(而非 http 代理)(默认:False)
-a, --auth AUTH 设置代理认证(格式:'username:pass')(默认:)
-i, --insecure 不安全的 SSL(默认:False)
-d, --debug 调试日志(默认:False)
-p, --tor-processes PROCESSES
循环中的 tor 进程数量(默认:2)
-c, --tor-cmd CMD tor 命令(可执行文件路径 + 参数)(默认:tor)
-e, --tor-config CONFIG
tor 扩展 JSON 配置(默认:{})
-t, --tor-timeout TIMEOUT
启动 tor 实例的超时时间(秒);0 表示禁用超时(默认:90)
-r, --tor-tries TRIES
启动 tor 实例失败前的尝试次数(默认:5)
--request-timeout REQUEST_TIMEOUT
HTTP 请求的超时时间(秒);0 表示禁用超时(默认:0)
--on-count ON_COUNT 每 x 个请求更改 IP(资源也被计数)(默认:0)
--on-string ON_STRING
当响应内容中发现指定字符串时更改 IP(默认:)
--on-regex ON_REGEX 当响应内容中发现匹配的正则表达式时更改 IP(默认:)
--on-rst 当连接因 TCP RST 关闭时更改 IP(默认:False)
--on-status-code [ON_STATUS_CODE ...]
当返回指定的状态码之一时更改 IP(默认:[])
--on-timeout 当请求超时时更改 IP(默认:False)