https://github.com/qwq233/ua4f
Another User Agent faker, allowing users to bypass multi device detection for Campus Network via socks5 proxy.
https://github.com/qwq233/ua4f
campus-network http openwrt openwrt-package openwrt-zh-cn proxy socks5
Last synced: about 1 month ago
JSON representation
Another User Agent faker, allowing users to bypass multi device detection for Campus Network via socks5 proxy.
- Host: GitHub
- URL: https://github.com/qwq233/ua4f
- Owner: qwq233
- License: agpl-3.0
- Created: 2024-09-28T11:20:29.000Z (9 months ago)
- Default Branch: master
- Last Pushed: 2024-12-04T09:46:51.000Z (6 months ago)
- Last Synced: 2025-04-03T11:38:10.389Z (2 months ago)
- Topics: campus-network, http, openwrt, openwrt-package, openwrt-zh-cn, proxy, socks5
- Language: Rust
- Homepage:
- Size: 83 KB
- Stars: 8
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# UA4F
[中文](./README_CN.md)
Another User Agent faker, allowing users to bypass multi device detection for Campus Network via socks5 proxy.
Inspired by [UA3f](https://github.com/SunBK201/UA3F)
> [!WARNING]
> This is a toy project. No ANY guarantees are made regarding performance or stability.# Features
- Better performence ~~(i guess)~~
- Fully written in ***rust***
- Easy to migrate from ua3f
- Compatible with clash# Principle
It will first grab the first few bytes of the first packet to check if it is http traffic. If so, it will continue to grab a total of about 4k of traffic and modify the User Agent in it.
# Install
## Using prebuilt package
You can find most common pre-built packages in [Release](https://github.com/qwq233/UA4F/releases).
Download and install it. Then you are ready to use it.
## Build Manually
1. Make sure you have installed latest **nightly** version of rust toolchain and the target corresponding to the target platform. (E.G: `x86_64-unknown-linux-musl` for x86_64 OpenWrt platform or `x86_64-unknown-linux-gnu` for x86_64 GNU/Linux)
2. Clone this project
3. Build with `cargo`
4. You are ready to use. The build result is usually located in `target/TARGET_ARCH/release/ua4f`
#### Example Command
```shell
# Assuming you are using rustup to manage rust toolchain
rustup default nightly
rustup add x86_64-unknown-linux-muslcargo build --release --target x86_64-unknown-linux-musl
```## Build with OpenWrt
1. Make sure you have installed latest **nightly** version of rust toolchain and the target corresponding to the target platform and use musl as the C library. (E.G: `x86_64-unknown-linux-musl` for x86_64 platform)
2. Clone this project into the `package/ua4f`
3. Enable building luci-compat and ua4f package
4. You are ready to build the image or build the package separately.
#### Example Command
```shell
# Assuming you are using rustup to manage rust toolchain
rustup default nightly
rustup target add x86_64-unknown-linux-muslecho "CONFIG_PACKAGE_ua4f=y" >> .config
make defconfig# Build this package only
make package/ua4f/{clean,compile} V=s -j$(nproc)
# or include in the image
make -j$(nproc)
```# Configure
## By Luci
It can easily configured via luci. The configuration page is located at `Service -> UA4F`
## By command
Assuming you are using OpenWrt. You can run these command to configure and start it as background service.
```shell
# Custom UA
uci set ua4f.main.ua="Mozilla/5.0 (Window NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/555.66"
# Listen port
uci set ua4f.main.port="1080"
# Bind address
uci set ua4f.main.bind="127.0.0.1"
# Log level
uci set ua4f.main.log_level="info"# Apply
uci commit ua3f# Start service
service ua4f enable
service ua4f start
```## By systemd
For regular distributions (Like ***Arch Linux***), you will most likely use systemd to manage background services.
In this situation, you need to write the systemd service file. But don't worry, I have provided an example file and just modify it according to your needs.
1. Create file in `/etc/systemd/system/multi-user.target.wants/ua4f.service`
2. Copy these lines below and modify it according your needs.
```ini
[Unit]
Description=Another User Agent faker, allowing users to bypass multi device detection for Campus Network via socks5 proxy.
Documentation=https://github.com/qwq233/ua4f/
After=network.target[Install]
WantedBy=multi-user.target[Service]
# Configure part
Environment=bind_address=127.0.0.1
Environment=port=1080
Environment=custom_ua=Mozilla/5.0 (Window NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/555.66
Environment=log_level=info# Prevent writes to /usr, /boot, and /etc
User=nobody
ProtectSystem=full
# Prevent accessing /home, /root and /run/user
ProtectHome=true# Allow modify log file
ReadWritePaths=-/var/log/Type=simple
ExecStart=/path/to/ua4f -b "$bind_address" -l "$log_level" -p "$port" -f "$custom_ua"
KillSignal=SIGTERM
Restart=on-abort
RestartSec=5s```
3. Enable and start the service
#### Example Command
```shell
# Download the unit file (same content as above)
curl https://github.com/qwq233/UA4F/raw/refs/heads/master/misc/ua4f.service -0 -o /etc/systemd/system/multi-user.target.wants/ua4f.service# Edit the file
vim /etc/systemd/system/multi-user.target.wants/ua4f.service# Enable and start the service
systemctl enable ua4f.service
systemctl start ua4f.service
```# License
**AGPL-3.0-or-later**
```
UA4F - Another User Agent faker
Copyright (C) 2024 James ClefThis program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
```# Credit
Some luci code from [UA3F](https://github.com/SunBK201/UA3F)
License: `GPL-3.0-only`
```
UA3f
Copyright (C) 2024 SunBK201This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.You should have received a copy of the GNU General Public License
along with this program. If not, see .
```