https://github.com/tekintian/adbyby-open
AdByBy-Open是一个专为嵌入式路由器设计的开源广告过滤代理程序,完全兼容原版AdByBy的所有功能接口。采用C语言精心打造,内存占用极小,运行效率极高,是Padavan、OpenWrt等路由器固件的理想广告拦截插件。
https://github.com/tekintian/adbyby-open
adbyby ads filter openwrt padavan router
Last synced: 4 days ago
JSON representation
AdByBy-Open是一个专为嵌入式路由器设计的开源广告过滤代理程序,完全兼容原版AdByBy的所有功能接口。采用C语言精心打造,内存占用极小,运行效率极高,是Padavan、OpenWrt等路由器固件的理想广告拦截插件。
- Host: GitHub
- URL: https://github.com/tekintian/adbyby-open
- Owner: tekintian
- Created: 2025-12-09T07:42:05.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-12-10T14:41:42.000Z (8 months ago)
- Last Synced: 2025-12-10T23:24:14.298Z (8 months ago)
- Topics: adbyby, ads, filter, openwrt, padavan, router
- Language: Shell
- Homepage: https://dev.tekin.cn
- Size: 213 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🚫 AdByBy-Open
[](https://github.com/tekintian/adbyby-open/releases)
[](https://github.com/tekintian/adbyby-open/actions)
[](LICENSE)
[](https://github.com/tekintian/padavan)
[]()
**🚀 轻量级开源广告过滤器 - 为路由器而生的智能广告拦截解决方案**
[快速开始](#快速开始) • [安装指南](#安装方法) • [使用文档](#使用方法) • [贡献指南](#开发和贡献)
---
## 🎯 项目简介
AdByBy-Open是一个专为嵌入式路由器设计的开源广告过滤代理程序,完全兼容原版AdByBy的所有功能接口。采用C语言精心打造,内存占用极小,运行效率极高,是Padavan、OpenWrt等路由器固件的理想广告拦截插件。
### ✨ 核心特性
- 🎯 **精准拦截**: 智能识别并过滤网页广告、弹窗、视频广告
- ⚡ **极速响应**: 代理模式运行,几乎零延迟,不影响上网体验
- 💾 **超轻量级**: 仅为32KB的可执行文件,内存占用<1MB
- 🔧 **即插即用**: 一键安装,自动配置,无需复杂设置
- 📦 **自动构建**: GitHub Actions自动编译,提供预编译二进制文件
- 🔄 **持续更新**: 规则库自动更新,应对最新广告形式
- 🛡️ **隐私保护**: 除广告外不拦截任何正常内容,保护用户隐私
### 🏷️ 关键词
`广告过滤` `路由器` `Padavan` `开源` `轻量级` `代理` `MIPS` `广告拦截` `网络代理` `嵌入式`
### 🔗 相关项目
- **K2P路由固件**: https://github.com/tekintian/padavan
- **工具链**: https://github.com/tekintian/padavan/releases
## 功能特性
- **HTTP代理服务**: 监听8118端口,提供HTTP代理功能
- **广告过滤**: 基于规则库过滤广告请求
- **规则管理**: 支持多种类型的过滤规则(简单匹配、域名匹配、通配符等)
- **实时统计**: 记录过滤统计信息
- **可配置性**: 支持命令行参数配置
- **轻量级**: C语言实现,内存占用小
## 编译安装
### 自动编译(推荐)
项目已配置GitHub Actions自动编译,会自动下载交叉编译工具链并构建MIPS版本的可执行文件。
**自动触发条件:**
- 推送到 `main` 或 `master` 分支
- 创建 Release
- 手动触发 Workflow
**获取编译版本:**
1. 访问项目的 [Actions 页面](https://github.com/用户名/adbyby-open/actions)
2. 下载最新构建的 `adbyby-open-*.tar.gz` 文件
3. 解压后直接使用编译好的 `adbyby` 可执行文件
### 本地开发编译(用于测试)
```bash
cd src
make clean && make
```
### 路由器交叉编译(生产环境)
**重要:** 为了在MIPS架构的路由器上运行,必须使用项目提供的交叉编译工具链进行编译。
工具链下载地址 https://github.com/tekintian/padavan/releases/download/toolchain/mipsel-linux-musl.tar.xz
```bash
cd trunk/user/adbyby/src
# 清理之前的编译文件
make clean
# 使用路由器工具链编译
CROSS_COMPILE=/Volumes/csdisk/padavan/toolchain/toolchain-mipsel-darwin_v4.4.x/bin/mipsel-linux-musl- make
# 验证编译结果
file adbyby
# 应该显示:ELF 32-bit LSB executable MIPS MIPS32 rel2 version 1
```
### 编译工具链说明
- **工具链路径**: `toolchain/toolchain-mipsel-darwin_v4.4.x/`
- **编译器版本**: GCC 13.2.0
- **目标架构**: MIPS32 (little-endian)
- **C库**: musl
- **交叉编译器**: `mipsel-linux-musl-gcc`
### 编译结果对比
| 特性 | 本地编译 | 交叉编译 |
|------|----------|----------|
| **架构** | x86_64 (Darwin) | MIPS32 (路由器) |
| **兼容性** | 仅开发测试 | 路由器运行 |
| **文件大小** | ~71KB | ~24KB |
| **链接库** | libSystem.B.dylib | ld-musl-mipsel.so.1 |
编译完成后会生成`adbyby`可执行文件,可以替换原有的`share/adbyby`文件用于路由器固件。
## 使用方法
### 基本使用
```bash
# 默认配置启动(监听8118端口)
./adbyby
# 指定端口
./adbyby -p 8118
# 调试模式
./adbyby -d
# 指定规则文件
./adbyby -r /path/to/rules.txt
# 前台运行(非守护进程)
./adbyby --no-daemon
# 显示统计信息
./adbyby -s
# 显示帮助
./adbyby -h
```
### 命令行参数
- `-p PORT`: 指定监听端口(默认8118)
- `-d`: 启用调试模式
- `-r FILE`: 指定规则文件路径
- `-s`: 显示统计信息并退出
- `-h`: 显示帮助信息
- `--no-daemon`: 在前台运行
## 规则格式
规则文件格式:`pattern|type|description`
### 规则类型
- `0`: 简单字符串匹配
- `1`: 正则表达式匹配
- `2`: 域名匹配
- `3`: URL匹配
- `4`: 通配符匹配
### 示例规则
```
# 简单字符串匹配
doubleclick|0|Google DoubleClick广告
advertisement|0|通用广告关键词
# 域名匹配
doubleclick.net|2|广告域名
googleadservices.com|2|Google广告服务
# 通配符匹配
*/ad/*|4|广告路径
*.doubleclick.*|4|DoubleClick通配符
# 带描述的规则
google-analytics.com|2|Google分析跟踪
facebook.com/tr|0|Facebook跟踪像素
```
## 内置规则
程序内置了常见的广告域名和URL模式:
- 主要广告服务提供商域名(Google、Facebook、Amazon等)
- 常见广告路径模式
- 跟踪和分析服务域名
## 配置文件位置
- 规则文件: `/usr/share/adbyby/data/rules.txt`
- PID文件: `/var/run/adbyby.pid`
- 日志输出: 标准输出/系统日志
## 与原版兼容性
本实现与原版adbyby的主要兼容性:
1. **端口兼容**: 默认监听8118端口
2. **配置兼容**: 读取相同的配置文件路径
3. **功能兼容**: 提供相同的广告过滤功能
4. **接口兼容**: 支持相同的启动参数
## 架构说明
```
adbyby.c - 主程序入口
proxy.c/h - HTTP代理处理
rules.c/h - 规则管理引擎
utils.c/h - 工具函数
```
### 主要模块
1. **主程序** (`adbyby.c`): 程序入口、命令行解析、主循环
2. **代理模块** (`proxy.c`): HTTP请求解析、响应生成
3. **规则模块** (`rules.c`): 规则加载、匹配、统计
4. **工具模块** (`utils.c`): 日志、URL解析、字符串处理
## 调试和监控
### 调试模式
```bash
./adbyby -d --no-daemon
```
调试模式会输出详细的请求和匹配信息。
### 统计信息
```bash
./adbyby -s
```
显示规则统计、命中次数等信息。
## 性能优化
- 使用内存池减少内存分配
- 优化的字符串匹配算法
- 异步I/O处理(可扩展)
- 规则缓存机制
## 扩展功能
本版本预留了扩展接口,可以轻松添加:
- HTTPS代理支持
- 更复杂的规则引擎
- Web管理界面
- 规则自动更新
- 统计数据持久化
## 注意事项
### 通用注意事项
1. 需要root权限运行(绑定端口<1024时)
2. 确保有足够的系统资源
3. 定期更新规则库以保持过滤效果
4. 在生产环境建议使用守护进程模式
### 路由器部署注意事项
1. **架构兼容性**: 必须使用MIPS交叉编译工具链编译
2. **编译环境**: 使用项目提供的`toolchain-mipsel-darwin_v4.4.x`工具链
3. **文件路径**: 确保可执行文件放置在`/usr/share/adbyby/`目录
4. **权限设置**: 确保adbyby文件具有执行权限(chmod +x)
5. **内存限制**: 路由器内存有限,注意监控内存使用情况
6. **固件集成**: 编译后需要正确打包到固件镜像中
## 故障排除
### 常见问题
1. **端口被占用**
- 检查是否有其他程序占用8118端口
- 使用`-p`参数指定其他端口
2. **规则文件不存在**
- 程序会自动创建基本规则
- 可以手动创建规则文件
3. **权限问题**
- 确保有权限读取配置文件
- 确保有权限创建PID文件
### 路由器环境问题
4. **架构不兼容**
- 现象:程序无法启动,提示"Exec format error"
- 解决:使用MIPS交叉编译工具链重新编译
- 检查:使用`file adbyby`验证是否为ELF 32-bit LSB executable MIPS
5. **链接库缺失**
- 现象:程序启动时报错找不到动态链接库
- 解决:确保使用musl编译工具链
- 检查:链接库应为`/lib/ld-musl-mipsel.so.1`
6. **内存不足**
- 现象:程序运行时经常崩溃或被系统杀死
- 解决:调整编译优化参数,减少内存使用
- 检查:监控路由器内存使用情况
### 日志分析
调试模式下的日志格式:
```
[2024-01-10 15:30:45] INFO: Proxy server started on port 8118
[2024-01-10 15:30:46] DEBUG: Connection from 192.168.1.100:54321
[2024-01-10 15:30:46] DEBUG: Blocked by rule: doubleclick.net (hits: 1)
```
## 开发和贡献
欢迎提交Issue和Pull Request来改进这个项目。
### 编译要求
#### 本地开发编译
- GCC编译器
- 标准 POSIX 环境
- Make工具
#### 路由器交叉编译
- MIPS交叉编译工具链(项目提供)
- Make工具
- 兼容的构建环境
**推荐使用项目的交叉编译工具链:**
```bash
toolchain/toolchain-mipsel-darwin_v4.4.x/bin/mipsel-linux-musl-gcc
```
### 测试
```bash
make debug
./adbyby -d --no-daemon -p 8888
```
然后在浏览器中设置代理为`127.0.0.1:8888`进行测试。
## GitHub CI/CD
### 工作流程
项目配置了两个主要的GitHub Actions工作流程:
#### 1. 自动构建工作流 (`build.yml`)
- **触发条件**: 推送到主分支、PR、发布、手动触发
- **功能**:
- 自动下载MIPS交叉编译工具链
- 编译生成MIPS架构的adbyby可执行文件
- 打包为完整的发布包(包含配置、脚本、文档等)
- 创建GitHub Release并上传构建产物
#### 2. 发布工作流 (`release.yml`)
- **触发条件**: 推送版本标签 (如 `v1.0.0`)
- **功能**:
- 专门用于版本发布
- 包含安装脚本和校验和
- 生成完整的发布说明
### 使用方法
#### 方法一:下载预编译版本
```bash
# 下载最新构建
wget https://github.com/tekintian/adbyby-open/releases/latest/download/adbyby-open-*.tar.gz
# 或从Actions页面下载
# https://github.com/tekintian/adbyby-open/actions
# 解压
tar -xzf adbyby-open-*.tar.gz
cd adbyby-open/
# 使用自动安装脚本
./install_adbyby.sh
```
#### 方法二:手动构建
```bash
# 克隆项目
git clone https://github.com/tekintian/adbyby-open.git
cd adbyby-open
# 本地交叉编译
wget https://github.com/tekintian/padavan/releases/download/toolchain/mipsel-linux-musl.tar.xz
tar -xf mipsel-linux-musl.tar.xz
export CROSS_COMPILE=$PWD/toolchain/bin/mipsel-linux-musl-
make clean && make compile
```
### 构建产物
每次构建会生成以下文件:
- `adbyby-open-mipsel-数字.tar.gz` - 完整的发布包
- `bin/adbyby` - 主程序(MIPS架构)
- `scripts/` - 安装和配置脚本
- `config/` - 配置文件
- `share/` - 规则文件和数据
- `install_adbyby.sh` - 自动安装脚本
- `build_info.txt` - 构建信息
### 版本管理
- **自动版本**: 每次推送到主分支会自动创建版本 `v{构建编号}`
- **标签版本**: 推送标签如 `v1.0.0` 会创建正式发布版本
- **校验和**: 每个版本都包含SHA256校验和文件
### 构建环境
- **运行环境**: Ubuntu latest
- **工具链**: mipsel-linux-musl (自动下载)
- **编译器**: mipsel-linux-musl-gcc
- **目标架构**: MIPS32 (little-endian)
## 与我联系
tekintian@gmail.com
QQ:932256355