ProxyCat/README.md
本间白猫 40bfcad5a4 Update
2025-01-03 17:18:42 +08:00

336 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

![ProxyCat](https://socialify.git.ci/honmashironeko/ProxyCat/image?description=1&descriptionEditable=%E4%B8%80%E6%AC%BE%E8%BD%BB%E9%87%8F%E7%BA%A7%E7%9A%84%E4%BC%98%E7%A7%80%E4%BB%A3%E7%90%86%E6%B1%A0%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%8C%E5%AE%9E%E7%8E%B0%E4%BB%A3%E7%90%86%E7%9A%84%E8%87%AA%E5%8A%A8%E8%BD%AE%E6%8D%A2&font=Bitter&forks=1&issues=1&language=1&logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F139044047%3Fv%3D4&name=1&owner=1&pattern=Circuit%20Board&pulls=1&stargazers=1&theme=Dark)
<p align="center">
<a href="/README-EN.md">English</a>
·
<a href="/README.md">简体中文</a>
</p>
## 目录
- [开发缘由](#开发缘由)
- [功能特点](#功能特点)
- [安装与使用](#安装与使用)
- [依赖安装](#依赖安装)
- [运行工具](#运行工具)
- [手动录入代理地址](#iptxt-手动录入代理地址)
- [配置文件](#配置文件)
- [演示效果](#演示效果)
- [使用接口自动获取代理地址](#使用接口自动获取代理地址)
- [Docker方式部署](#Docker方式部署)
- [性能表现](#性能表现)
- [免责申明](#免责申明)
- [更新日志](#更新日志)
- [开发计划](#开发计划)
- [鸣谢](#鸣谢)
- [赞助开源](#赞助开源)
- [代理推荐](#代理推荐)
## 开发缘由
在渗透过程中经常需要隐藏或更换IP地址以绕过安全设备。然而市面上的隧道代理价格高昂普遍在20-40元/天这对于许多人来说难以接受。笔者注意到短效IP的性价比很高一个IP只需几分钱平均每天0.2-3元。
综上所述,**ProxyCat** 应运而生本工具旨在将持续时间仅有1分钟至60分钟不等的短效IP转变为固定IP供其他工具使用形成代理池服务器部署一次即可永久使用。
![项目原理图](./assets/项目原理图.png)
## 功能特点
- **双协议支持**:支持 SOCKS5 和 HTTP 协议监听地址,适配更多工具。
- **多重代理协议**:支持 HTTP/HTTPS/SOCKS5 代理服务器,满足不同应用场景需求。
- **多种切换模式**:按照顺序循环使用代理列表中的每一个代理,确保均衡使用;随机选择可用代理,分摊流量负载,提升性能。允许用户自定义代理选择逻辑,灵活满足特定需求。
- **函数获取代理**:支持通过 GetIP 函数动态获取即时可用的代理,保证代理的实时性和有效性。
- **自动检测有效性**:在启动时自动检测代理的可用性,过滤无效代理,确保代理列表的可靠性。
- **仅在代理转发时切换**:在计时器归零时,有新的请求才会更换为新的代理服务器,防止运行时一直消耗资源。
- **支持代理失效切换**:在转发流量过程中,遇到代理服务器突然失效,可自动切换到新的代理上。
- **代理池身份认证**:支持基于用户名和密码的代理认证和黑白名单机制的代理认证,增强代理的安全性,防止未授权访问。
- **实时状态更新**:显示当前代理状态和下次切换时间,帮助用户了解代理动态。
- **可配置文件**:通过 config.ini 文件轻松调整端口、模式、认证信息等参数,适应不同使用场景。
- **版本检测**:内置版本检测功能,自动检查最新版本并提醒用户更新,确保软件的持续优化。
## 安装与使用
### 依赖安装
工具基于 Python 实现,建议使用 **Python 3.8** 以上版本。在使用前,请使用以下命令配置依赖:
```bash
pip install -r requirements.txt
# 或推荐使用国内源:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
```
### 运行工具
在项目目录下运行以下命令,查看帮助信息以确认配置成功:
```bash
python3 ProxyCat.py -h
```
回显如下信息即表示配置成功:
```
|\ _,,,---,,_ by 本间白猫
ZZZzz /,`.-'`' -. ;-;;,_
|,4- ) )-,_. ,\ ( `'-'
'---''(_/--' `-'\_) ProxyCat
用法: ProxyCat.py [-h] [-c]
参数:
-h, --help 显示此帮助信息并退出
-c C 指定配置文件名(默认config.ini)
```
### ip.txt 手动录入代理地址
按照以下格式 (`socks5://127.0.0.1:7890``http://127.0.0.1:7890`),一行一个填入 `ip.txt` 文件中:
```txt
socks5://127.0.0.1:7890
https://127.0.0.1:7890
http://127.0.0.1:7890
...
```
> 如果您缺少合适的国内代理地址,且有几块钱预算,可以查看微信公众号:樱花庄的本间白猫。菜单页面长期更新,获取多家低价代理购买地址,为作者带来几毛钱的推荐收益~
### 配置文件
`config.ini`(或自定义配置文件)中配置参数:
```ini
[SETTINGS]
# 本地服务器监听端口(默认为:1080)
port = 1080
# 代理地址轮换模式cycle 表示循环使用custom 表示使用自定义模式load_balance 表示负载均衡(默认为:cycle)
mode = cycle
# 代理地址更换时间(秒),设置为 0 时每次请求都更换 IP(默认为:300)
interval = 300
# 本地服务器端口认证用户名((默认为:neko)当为空时不需要认证
username = neko
# 本地服务器端口认证密码(默认为:123456)当为空时不需要认证
password = 123456
# 是否使用 getip 模块获取代理地址 True or False(默认为:False)
use_getip = False
# 获取新代理地址的URL
getip_url = http://example.com/getip
# 代理地址列表文件(默认为:ip.txt)
proxy_file = ip.txt
# 是否启用代理检测功能 True or False(默认为True)
check_proxies = True
# 语言设置 (cn/en)
language = cn
# IP白名单文件路径留空则不启用白名单
whitelist_file = whitelist.txt
# IP黑名单文件路径留空则不启用黑名单
blacklist_file = blacklist.txt
# IP认证优先级whitelist/blacklist
# whitelist: 优先判断白名单在白名单中的IP直接放行
# blacklist: 优先判断黑名单在黑名单中的IP直接拒绝
ip_auth_priority = whitelist
```
配置对应参数后即可使用:
```bash
python3 ProxyCat.py
```
### 演示效果
**固定代理地址(默认)**
```
http://neko:123456@127.0.0.1:1080
http://127.0.0.1:1080
socks5://neko:123456@127.0.0.1:1080
socks5://127.0.0.1:1080
```
如果您是部署在公网,将 `127.0.0.1` 替换为您的公网IP即可。
![主界面图](./assets/主界面图.png)
### 使用接口自动获取代理地址
工具支持直接调用代理地址获取的API接口。当您配置 `use_getip = True` 时,工具将不再从本地 `ip.txt` 中读取代理地址,而是通过执行 **getip.py** 脚本来获取新的代理地址请确保您的IP已加白名单并且格式为IP:端口,每次只能使用一个代理地址)。
此时,您需要保证 **getip.py** 获取到的地址信息格式为 `IP:PORT`。默认为 `socks5` 协议,如需使用 `http`,请手动更改。
## Docker方式部署
请提前安装好Docker和Docker-compose具体安装方法可自行百度查询。
```
# 拉取项目源码到本地
git clone https://github.com/honmashironeko/ProxyCat.git
# 修改config文件夹中的config.ini中的内容
# 进入ProxyCat文件夹中并构建镜像和启动容器
docker-compose up -d --build
# 停止服务和启动服务(每次修改完配置后需要重启服务)
docker-compose down | docker-compose up -d
# 查看日志信息
docker logs proxycat-app-1
```
## 性能表现
经过实际测试在代理地址服务器性能充足的情况下ProxyCat 能够处理 **1000** 并发连接且不丢包,基本可以覆盖大部分扫描和渗透测试需求。
![性能测试图](./assets/性能测试图.png)
## 免责申明
- 如果您下载、安装、使用、修改本工具及相关代码,即表明您信任本工具。
- 在使用本工具时造成对您自己或他人任何形式的损失和伤害,我们不承担任何责任。
- 如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。
- 请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款,并选择接受或不接受。
- 除非您已阅读并接受本协议所有条款,否则您无权下载、安装或使用本工具。
- 您的下载、安装、使用等行为即视为您已阅读并同意上述协议的约束。
## 更新日志
### 2025/01/03
- 集中配置参数到配置文件中管理,提升维护便利。
- 修复部分已知BUG并提升稳定性和并发能力。
### 2025/01/02
- 重构软件结构,更加整洁易用。
- 新增支持黑白名单机制进行身份认证。
- 在使用GetIP方式的时候需要先收到一次请求才会获取代理防止每次运行都浪费资金。
- 语言配置逻辑更改不再分为两个版本通过config.ini文件中的语言配置参数进行显示。
- 配置信息面板更新,不配置账号密码的情况下也能直接复制地址使用。
- 新增docker方式部署。
### **2024/10/23**
- 重构代码结构,将部分代码分割成单独文件。
- 支持代理过程中,遇到代理服务器突然失效,自动请求更换新的代理服务器,并重置更换计时器。
### 2024/09/29
- 去除使用较少的单次循环,更换为自定义模式,可根据需求自定义更换代理的逻辑。
- 对代理有效性检测修改为异步,提高速度。
- 去除问题较多的 SOCKS4 协议的代理支持。
- 对日志系统进行美化。
- 改进异常处理逻辑。
- 增加对代理格式的校验,确保格式正确。
### 2024/09/10
- 优化并发效率,支持在未收到响应包的情况下提前进行下一个请求,提高效率。
- 增加负载均衡模式,该模式下将随机向代理地址发送请求,并利用并发代理的方式,提高请求效率。
- 代理有效性检测修改为异步,提高效率。
### 2024/09/09
- 增加功能,可设置首次启动时是否对 `ip.txt` 中的代理地址进行有效性校验,并只使用有效的代理地址。
- 函数降级,支持更低版本的 Python。
### 2024/09/03
- 增加本地 SOCKS5 监听,适配更多软件。
- 部分函数更换,适配更低版本的 Python。
- 美化回显内容。
### 2024/08/31
- 项目大结构调整。
- 美化显示,持续提示下一次更换代理地址的时间。
- 支持 `Ctrl+C` 停止运行。
- 大幅度调整为异步请求,并发效率提升,实测 **1000** 并发,共 **5000** 包,丢包约 **50** 包,稳定性约 **99%****500** 并发无丢包。
- 不再采取运行时指定参数方案,修改为从本地 `ini` 配置文件中读取,易用性更高。
- 支持本地无认证,适配更多软件代理方式。
- 增加版本检测功能,自动提示版本信息。
- 增加代理服务器地址的身份鉴别功能,仅支持本地读取,因大多数 API 需白名单,未提供重复。
- 增加功能,仅在收到新请求的情况下才使用 `getip` 更新,减少 IP 消耗。
- 增加自识别代理服务器地址协议,以适配更多代理商。
- 增加支持 HTTPS、SOCKS4 代理协议,目前已覆盖 HTTP、HTTPS、SOCKS5、SOCKS4 协议。
- 修改 `asyncio.timeout()``asyncio.wait_for()`,适配更低的 Python 版本。
### 2024/08/25
- 读取 `ip.txt` 时自动跳过空行。
-`httpx` 更换为并发池,提高性能。
- 增加缓冲字典,相同站点降低延迟。
- 每次请求更换 IP 逻辑修改为随机选择代理。
- 采用更高效的结构和算法,优化请求处理逻辑。
### 2024/08/24
- 采用异步方案提高并发能力和减少超时。
- 重复代码封装,提高代码复用性。
### 2024/08/23
- 修改并发逻辑。
- 增加身份鉴别功能。
- 增加 IP 获取接口,永久更换 IP。
- 增加每次请求更换 IP 功能。
## 开发计划
- [x] 增加本地服务器身份鉴别功能,保证在公网使用过程中不被恶意盗用。
- [x] 增加每次请求更换 IP 功能。
- [x] 增加静态代理自动获取更新模块,从而永久运行。
- [x] 增加负载均衡模式,同时使用大量代理地址发送,提高并发效率,减少单一服务器负载。
- [x] 增加版本检测功能。
- [x] 增加代理地址身份鉴别支持。
- [x] 增加功能,仅在收到新请求的情况下才使用 `getip` 更新,减少 IP 消耗。
- [x] 首次启动时批量对 `ip.txt` 中的代理服务器进行有效性检查。
- [x] 增加本地监听 SOCKS 协议,或全面改成 SOCKS以适配更多软件。
- [ ] 增加详细日志记录,记录所有连接 ProxyCat 的 IP 身份,支持多用户。
- [ ] 增加Web UI提供更加强大易用的界面。
- [x] 增加docker一键部署简单易用。
- [ ] 开发 babycat 模块,可将 babycat 在任意服务器或主机上运行,即可变成一台代理服务器。
如果您有好的创意或在使用过程中遇到bug请通过以下方式联系作者反馈
微信公众号:**樱花庄的本间白猫**
## 鸣谢
本排名不分先后,感谢为本项目提供帮助的师傅们。
- [AabyssZG (曾哥)](https://github.com/AabyssZG)
- [ProbiusOfficial (探姬)](https://github.com/ProbiusOfficial)
- [gh0stkey (EvilChen)](https://github.com/gh0stkey)
- chars6
- qianzai千载
- ziwindlu
![Star History Chart](https://api.star-history.com/svg?repos=honmashironeko/ProxyCat&type=Date)
## 赞助开源
开源不易,如果您觉得工具不错,或许可以试着赞助一下作者的开发哦~
![赞助](./assets/赞助.png)
## 代理推荐
- [第一家便宜大碗代理购买用邀请码注册得5000免费IP+10元优惠券](https://h.shanchendaili.com/invite_reg.html?invite=fM6fVG)
- [各大运营商流量卡](https://172.lot-ml.com/ProductEn/Index/0b7c9adef5e9648f)
- [国外匿名代理](https://www.ipmart.io?source=Shironeko)