mirror of
https://github.com/SunBK201/UA3F.git
synced 2025-12-16 08:44:29 +00:00
feat: add OpenWrt detection
This commit is contained in:
parent
a661427365
commit
c68fbe132a
@ -7,6 +7,7 @@ import (
|
||||
"log"
|
||||
"log/slog"
|
||||
"net"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/user"
|
||||
"strings"
|
||||
@ -297,6 +298,10 @@ func (f *Firewall) DeleteTproxyRoute(fwmark, routeTable string) error {
|
||||
}
|
||||
|
||||
func detectFirewallBackend(cfg *config.Config) string {
|
||||
isOpenwrt := isOpenWrt()
|
||||
if isOpenwrt {
|
||||
slog.Info("Detected OpenWrt environment")
|
||||
}
|
||||
nftAvailable := IsCommandAvailable("nft")
|
||||
iptAvailable := IsCommandAvailable("iptables")
|
||||
nftTproxyAvailable := isOpkgPackageInstalled("kmod-nft-tproxy") && nftAvailable
|
||||
@ -308,6 +313,9 @@ func detectFirewallBackend(cfg *config.Config) string {
|
||||
if !nftAvailable {
|
||||
return false
|
||||
}
|
||||
if !isOpenwrt {
|
||||
return true
|
||||
}
|
||||
if nfqueueNeeded && !nftNfqueueAvailable {
|
||||
return false
|
||||
}
|
||||
@ -376,6 +384,36 @@ func getLocalIPv4CIDRs() ([]string, error) {
|
||||
return cidrs, nil
|
||||
}
|
||||
|
||||
func isOpenWrt() bool {
|
||||
checkFiles := []string{
|
||||
"/etc/openwrt_release",
|
||||
}
|
||||
for _, f := range checkFiles {
|
||||
if _, err := os.Stat(f); err == nil {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
data, err := os.ReadFile("/etc/os-release")
|
||||
if err == nil && strings.Contains(string(data), "OpenWrt") {
|
||||
return true
|
||||
}
|
||||
|
||||
if _, err := user.Lookup("uci"); err == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
if _, err := exec.LookPath("opkg"); err == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
if _, err := user.Lookup("apk"); err == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func IsCommandAvailable(cmd string) bool {
|
||||
_, err := exec.LookPath(cmd)
|
||||
return err == nil
|
||||
|
||||
Loading…
Reference in New Issue
Block a user