Skip to content

一款部署于云端或本地的代理池中间件,可将静态代理IP灵活运用成隧道IP,提供固定请求地址,一次部署终身使用

License

Notifications You must be signed in to change notification settings

honmashironeko/ProxyCat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ProxyCat

English · 简体中文

目录

开发缘由

在渗透过程中,经常需要隐藏或更换IP地址以绕过安全设备。然而,市面上的隧道代理价格高昂,普遍在20-40元/天,这对于许多人来说难以接受。笔者注意到,短效IP的性价比很高,一个IP只需几分钱,平均每天0.2-3元。

综上所述,ProxyCat 应运而生!本工具旨在将持续时间仅有1分钟至60分钟不等的短效IP转变为固定IP供其他工具使用,形成代理池服务器,部署一次即可永久使用。

项目原理图

功能特点

  • 双协议支持:支持 SOCKS5 和 HTTP 协议监听,适配更多工具
  • 多重代理协议:支持 HTTP/HTTPS/SOCKS5 代理服务器,满足不同应用场景需求。
  • 多种切换模式:按照顺序循环使用代理列表中的每一个代理,确保均衡使用;随机选择可用代理,分摊流量负载,提升性能。允许用户自定义代理选择逻辑,灵活满足特定需求。
  • 函数获取代理:支持通过 GetIP 函数动态获取即时可用的代理,保证代理的实时性和有效性。
  • 自动检测有效性:在启动时自动检测代理的可用性,过滤无效代理,确保代理列表的可靠性。
  • 仅在代理转发时切换:在计时器归零时,有新的请求才会更换为新的代理服务器,防止运行时一直消耗资源。
  • 支持代理失效切换:在转发流量过程中,遇到代理服务器突然失效,可自动切换到新的代理上。
  • 代理池身份认证:支持基于用户名和密码的代理认证,增强代理的安全性,防止未授权访问。
  • 实时状态更新:显示当前代理状态和下次切换时间,帮助用户了解代理动态。
  • 可配置文件:通过 config.ini 文件轻松调整端口、模式、认证信息等参数,适应不同使用场景。
  • 版本检测:内置版本检测功能,自动检查最新版本并提醒用户更新,确保软件的持续优化。

安装与使用

依赖安装

工具基于 Python 实现,建议使用 Python 3.8 以上版本。在使用前,请使用以下命令配置依赖:

pip install -r requirements.txt
# 或推荐使用国内源:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

运行工具

在项目目录下运行以下命令,查看帮助信息以确认配置成功:

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:7890http://127.0.0.1:7890),一行一个填入 ip.txt 文件中:

socks5://127.0.0.1:7890
https://127.0.0.1:7890
http://127.0.0.1:7890
...

如果您缺少合适的国内代理地址,且有几块钱预算,可以查看微信公众号:樱花庄的本间白猫。菜单页面长期更新,获取多家低价代理购买地址,为作者带来几毛钱的推荐收益~

配置文件

config.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

# 代理地址列表文件(默认为:ip.txt)
proxy_file = ip.txt

# 是否启用代理检测功能 True or False(默认为True)
check_proxies = True

配置对应参数后即可使用:

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即可。

界面展示图

使用接口自动获取代理地址

工具支持直接调用代理地址获取的API接口。当您配置 use_getip = True 时,工具将不再从本地 ip.txt 中读取代理地址,而是通过执行 getip.py 脚本来获取新的代理地址(请确保您的IP已加白名单)。

此时,您需要将 getip.py 的内容修改为您自己的接口,格式为 IP:PORT。默认为 socks5 协议,如需使用 http,请手动更改。

性能表现

经过实际测试,在代理地址服务器性能充足的情况下,ProxyCat 能够处理 1000 并发连接且不丢包,基本可以覆盖大部分扫描和渗透测试需求。

性能测试图

免责申明

  • 如果您下载、安装、使用、修改本工具及相关代码,即表明您信任本工具。
  • 在使用本工具时造成对您自己或他人任何形式的损失和伤害,我们不承担任何责任。
  • 如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。
  • 请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款,并选择接受或不接受。
  • 除非您已阅读并接受本协议所有条款,否则您无权下载、安装或使用本工具。
  • 您的下载、安装、使用等行为即视为您已阅读并同意上述协议的约束。

更新日志

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 功能。

开发计划

  • 增加本地服务器身份鉴别功能,保证在公网使用过程中不被恶意盗用。
  • 增加每次请求更换 IP 功能。
  • 增加静态代理自动获取更新模块,从而永久运行。
  • 增加负载均衡模式,同时使用大量代理地址发送,提高并发效率,减少单一服务器负载。
  • 增加版本检测功能。
  • 增加代理地址身份鉴别支持。
  • 增加功能,仅在收到新请求的情况下才使用 getip 更新,减少 IP 消耗。
  • 首次启动时批量对 ip.txt 中的代理服务器进行有效性检查。
  • 增加本地监听 SOCKS 协议,或全面改成 SOCKS,以适配更多软件。
  • 增加详细日志记录,记录所有连接 ProxyCat 的 IP 身份,支持多用户。
  • 增加Web UI,提供更加强大易用的界面。
  • 增加docker一键部署,简单易用。
  • 开发 babycat 模块,可将 babycat 在任意服务器或主机上运行,即可变成一台代理服务器。

如果您有好的创意,或在使用过程中遇到bug,请通过以下方式联系作者反馈!

微信公众号:樱花庄的本间白猫

鸣谢

本排名不分先后,感谢为本项目提供帮助的师傅们。

Star History Chart

赞助开源

开源不易,如果您觉得工具不错,或许可以试着赞助一下作者的开发哦~

赞助

代理推荐

About

一款部署于云端或本地的代理池中间件,可将静态代理IP灵活运用成隧道IP,提供固定请求地址,一次部署终身使用

Topics

Resources

License

Stars

Watchers

Forks

Languages