PBH-BTN / PeerBanHelper

自动封禁不受欢迎、吸血和异常的 BT 客户端,并支持自定义规则。PeerId黑名单/UserAgent黑名单/IP CIDR/假进度/超量下载/进度回退/多播追猎/连锁封禁/伪装检测 支持 qBittorrent/Transmission/Deluge/BiglyBT
GNU General Public License v3.0
539 stars 15 forks source link

无法通过WebUI更新订阅(无法更新订阅?) #180

Closed TTsdzb closed 1 week ago

TTsdzb commented 1 week ago

问题

在 WebUI 中的规则订阅里点击“更新全部”,服务端返回 500 内部错误。

同时,配置了自动检查间隔,但不论挂多久页面上都显示“最后更新:无”以及“规则数量:0”。终端也没有相关额外输出。

订阅配置

  # 订阅规则
  ip-address-blocker-rules:
    enabled: true
    # 检查间隔
    # check-interval: 86400000 # 24小时检查一次 毫秒
    check-interval: 3600000 # 1小时检查一次 毫秒
    # 规则列表
    rules:
      # 规则ID(任意)
      0xde-0xad-0xbe-0xef:
        # 是否启用
        enabled: true
        # 显示名称
        name: 0xde-0xad-0xbe-0xef
        # 规则文件订阅地址
        url: https://raw.githubusercontent.com/PBH-BTN/BTN-Collected-Rules/main/0xde-0xad-0xbe-0xef.txt
      # 规则ID(任意)
      123pan:
        # 是否启用
        enabled: true
        # 显示名称
        name: 123pan
        # 规则文件订阅地址
        url: https://raw.githubusercontent.com/PBH-BTN/BTN-Collected-Rules/main/123pan.txt
      # 规则ID(任意)
      dt_torrent:
        # 是否启用
        enabled: true
        # 显示名称
        name: dt_torrent
        # 规则文件订阅地址
        url: https://raw.githubusercontent.com/PBH-BTN/BTN-Collected-Rules/main/dt_torrent.txt
      # 规则ID(任意)
      go_torrent:
        # 是否启用
        enabled: true
        # 显示名称
        name: go_torrent
        # 规则文件订阅地址
        url: https://raw.githubusercontent.com/PBH-BTN/BTN-Collected-Rules/main/go.torrent%20dev%2020181121.txt
      # 规则ID(任意)
      hp_torrent:
        # 是否启用
        enabled: true
        # 显示名称
        name: hp_torrent
        # 规则文件订阅地址
        url: https://raw.githubusercontent.com/PBH-BTN/BTN-Collected-Rules/main/hp_torrent.txt
      # 规则ID(任意)
      multi-dial:
        # 是否启用
        enabled: true
        # 显示名称
        name: multi-dial
        # 规则文件订阅地址
        url: https://raw.githubusercontent.com/PBH-BTN/BTN-Collected-Rules/main/multi-dial.txt

预期情况

WebAPI 返回非 5xx 值,并更新订阅或返回”请求错误”信息。

实际情况

返回 500,后台报错输出:

[10:31:54] [JettyServerThreadPool-Virtual-27/WARN]: 500 Internal Server Error
java.net.ConnectException: null
        at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1065) ~[java.net.http:?]
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:227) ~[java.net.http:?]
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:280) ~[java.net.http:?]
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$2(PlainHttpConnection.java:238) ~[java.net.http:?]
        at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773) ~[?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.base/java.lang.Thread.run(Thread.java:1570) ~[?:?]
Caused by: java.nio.channels.ClosedChannelException
        at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:204) ~[?:?]
        at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:873) ~[?:?]
        at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:961) ~[?:?]
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:210) ~[java.net.http:?]
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:571) ~[?:?]
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:212) ~[java.net.http:?]
        ... 9 more

其他信息

使用环境变量指定魔法:

all_proxy=http://127.0.0.1:7890/
http_proxy=http://127.0.0.1:7890/
https_proxy=http://127.0.0.1:7890/
ftp_proxy=http://127.0.0.1:7890/

其他程序可以正常访问:

image

PluieM commented 1 week ago

贴一下完整的日志呢,我猜大概率还是跟代理有关系

TTsdzb commented 1 week ago
[10:30:53] [main/INFO]: PeerBanHelper v4.1.4 - by PBH-BTN Community, Made with ❤
[10:30:54] [main/INFO]: 正在加载配置文件……
[10:30:54] [main/INFO]: [配置升级实用工具] 请等待检查配置文件更新……
[10:30:54] [main/INFO]: [配置升级实用工具] 正在保存更改……
[10:30:54] [main/INFO]: [配置升级实用工具] 请等待检查配置文件更新……
[10:30:54] [main/INFO]: [配置升级实用工具] 正在保存更改……
[10:30:54] [main/INFO]:  + qBittorrent -> qbittorrent-ee (http://127.0.0.1:8085)
[10:30:54] [main/INFO]: Starting Javalin ...
[10:30:54] [main/INFO]: jetty-11.0.20; built: 2024-01-29T21:04:22.394Z; git: 922f8dc188f7011e60d0361de585fd4ac4d63064; jvm 22
[10:30:54] [main/INFO]: Session workerName=node0
[10:30:54] [main/INFO]: Started o.e.j.s.ServletContextHandler@2b917fb0{/,null,AVAILABLE}
[10:30:54] [main/INFO]: Started ServerConnector@3eee3e2b{HTTP/1.1, (http/1.1)}{0.0.0.0:9898}
[10:30:54] [main/INFO]: Started Server@66bacdbc{STARTING}[11.0.20,sto=0] @1292ms
[10:30:54] [main/INFO]: Javalin started in 126ms \o/
[10:30:54] [main/INFO]: Static file handler added: StaticFileConfig(hostedPath=/, directory=/static, location=CLASSPATH, precompress=false, aliasCheck=null, headers={Cache-Control=max-age=0}, skipFileFunction=com.ghostchu.peerbanhelper.web.JavalinWebContainer$$Lambda/0x00007f19fb2fa5f8@75769ab0, mimeTypes={}). File system location: 'jar:file:/home/liusq/.local/share/PeerBanHelper/PeerBanHelper.jar!/static/'
[10:30:54] [main/INFO]: Listening on http://localhost:9898/
[10:30:54] [main/INFO]: You are running Javalin 6.1.3 (released March 2, 2024. Your Javalin version is 114 days old. Consider checking for a newer version.).
[10:30:54] [main/INFO]: [BTN 网络] 请等待我们连接到 BTN 网络……
[10:30:54] [main/INFO]: [BTN 网络] 未启用 BTN 功能:此 PeerBanHelper 客户端未加入 BTN 网络
[10:30:54] [main/INFO]: PeerBanHelper SQLite Connection Pool - Starting...
[10:30:54] [main/INFO]: PeerBanHelper SQLite Connection Pool - Added connection org.sqlite.jdbc4.JDBC4Connection@a18649a
[10:30:54] [main/INFO]: PeerBanHelper SQLite Connection Pool - Start completed.
[10:30:54] [main/INFO]: 请等待功能模块初始化……
[10:30:54] [main/INFO]: [注册] IP Blacklist
[10:30:54] [main/INFO]: [注册] PeerId Blacklist
[10:30:54] [main/INFO]: [注册] ClientName Blacklist
[10:30:54] [main/INFO]: 请稍等,规则引擎正在编译用户脚本以提高执行性能,这可能需要一点时间……
[10:30:54] [main/INFO]: 已成功编译 2 条用户脚本,耗时 11ms
[10:30:54] [main/INFO]: [注册] Expression Engine
[10:30:54] [main/INFO]: [注册] Progress Cheat Blocker
[10:30:54] [main/INFO]: [注册] Auto Range Ban
[10:30:54] [main/INFO]: [注册] BTN Network Online Rules
[10:30:54] [main/INFO]: [注册] WebAPI - Downloader CIDR Blocklist
[10:30:54] [main/INFO]: [注册] IP Blacklist Rule List
[10:30:54] [main/INFO]: [注册] WebAPI - Metrics
[10:30:54] [main/INFO]: [注册] WebAPI - PBH Ban API
[10:30:54] [main/INFO]: [注册] WebAPI - Metadata
[10:30:54] [main/INFO]: [注册] WebAPI - Downloader API
[10:30:54] [main/INFO]: [注册] WebAPI - Rule Subscription
[10:30:54] [main/INFO]: [注册] WebAPI - Authenticate
[10:30:54] [main/INFO]: [注册] WebAPI - Logs
[10:30:55] [main/INFO]: [封禁] 已从保存的封禁列表缓存文件中恢复了 0 个封禁项
[10:30:55] [main/INFO]: PeerBanHelper BanWave Daemon 已启动
[10:31:54] [JettyServerThreadPool-Virtual-27/WARN]: 500 Internal Server Error
java.net.ConnectException: null
        at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1065) ~[java.net.http:?]
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:227) ~[java.net.http:?]
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:280) ~[java.net.http:?]
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$2(PlainHttpConnection.java:238) ~[java.net.http:?]
        at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773) ~[?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.base/java.lang.Thread.run(Thread.java:1570) ~[?:?]
Caused by: java.nio.channels.ClosedChannelException
        at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:204) ~[?:?]
        at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:873) ~[?:?]
        at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:961) ~[?:?]
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:210) ~[java.net.http:?]
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:571) ~[?:?]
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:212) ~[java.net.http:?]
        ... 9 more

只有这些了

PluieM commented 1 week ago

看了一眼代码,应该是没有走你的代理,你clash开全局代理试试看,或者把规则文件fork到gitee试试看墙内地址是否就正常了

TTsdzb commented 1 week ago

用 proxychains 代理就可以更新了,我是 Linux 系统。

[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
[23:30:21] [main/INFO]: PeerBanHelper v4.1.4 - by PBH-BTN Community, Made with ❤
[23:30:21] [main/INFO]: 正在加载配置文件……
[23:30:21] [main/INFO]: [配置升级实用工具] 请等待检查配置文件更新……
[23:30:21] [main/INFO]: [配置升级实用工具] 正在保存更改……
[23:30:21] [main/INFO]: [配置升级实用工具] 请等待检查配置文件更新……
[23:30:21] [main/INFO]: [配置升级实用工具] 正在保存更改……
[23:30:21] [main/INFO]:  + qBittorrent -> qbittorrent-ee (http://127.0.0.1:8085)
[23:30:22] [main/INFO]: Starting Javalin ...
[23:30:22] [main/INFO]: jetty-11.0.20; built: 2024-01-29T21:04:22.394Z; git: 922f8dc188f7011e60d0361de585fd4ac4d63064; jvm 22
[23:30:22] [main/INFO]: Session workerName=node0
[23:30:22] [main/INFO]: Started o.e.j.s.ServletContextHandler@47ad69f7{/,null,AVAILABLE}
[23:30:22] [main/INFO]: Started ServerConnector@7965a51c{HTTP/1.1, (http/1.1)}{0.0.0.0:9898}
[23:30:22] [main/INFO]: Started Server@453d496b{STARTING}[11.0.20,sto=0] @1900ms
[23:30:22] [main/INFO]: Javalin started in 197ms \o/
[23:30:22] [main/INFO]: Static file handler added: StaticFileConfig(hostedPath=/, directory=/static, location=CLASSPATH, precompress=false, aliasCheck=null, headers={Cache-Control=max-age=0}, skipFileFunction=com.ghostchu.peerbanhelper.web.JavalinWebContainer$$Lambda/0x0000775dff2fa5f8@7bc6d27a, mimeTypes={}). File system location: 'jar:file:/home/liusq/.local/share/PeerBanHelper/PeerBanHelper.jar!/static/'
[23:30:22] [main/INFO]: Listening on http://localhost:9898/
[23:30:22] [main/INFO]: You are running Javalin 6.1.3 (released March 2, 2024. Your Javalin version is 114 days old. Consider checking for a newer version.).
[23:30:22] [main/INFO]: [BTN 网络] 请等待我们连接到 BTN 网络……
[23:30:22] [main/INFO]: [BTN 网络] 未启用 BTN 功能:此 PeerBanHelper 客户端未加入 BTN 网络
[23:30:22] [main/INFO]: PeerBanHelper SQLite Connection Pool - Starting...
[proxychains] DLL init: proxychains-ng 4.17
[23:30:22] [main/INFO]: PeerBanHelper SQLite Connection Pool - Added connection org.sqlite.jdbc4.JDBC4Connection@57402ba1
[23:30:22] [main/INFO]: PeerBanHelper SQLite Connection Pool - Start completed.
[23:30:22] [main/INFO]: 请等待功能模块初始化……
[23:30:22] [main/INFO]: [注册] IP Blacklist
[23:30:22] [main/INFO]: [注册] PeerId Blacklist
[23:30:22] [main/INFO]: [注册] ClientName Blacklist
[23:30:22] [main/INFO]: 请稍等,规则引擎正在编译用户脚本以提高执行性能,这可能需要一点时间……
[23:30:22] [main/INFO]: 已成功编译 2 条用户脚本,耗时 20ms
[23:30:22] [main/INFO]: [注册] Expression Engine
[23:30:22] [main/INFO]: [注册] Progress Cheat Blocker
[23:30:22] [main/INFO]: [注册] Auto Range Ban
[23:30:22] [main/INFO]: [注册] BTN Network Online Rules
[23:30:22] [main/INFO]: [注册] WebAPI - Downloader CIDR Blocklist
[23:30:22] [main/INFO]: [注册] IP Blacklist Rule List
[23:30:22] [main/INFO]: [注册] WebAPI - Metrics
[23:30:22] [main/INFO]: [注册] WebAPI - PBH Ban API
[23:30:22] [main/INFO]: [注册] WebAPI - Metadata
[23:30:22] [main/INFO]: [注册] WebAPI - Downloader API
[23:30:22] [main/INFO]: [注册] WebAPI - Rule Subscription
[23:30:22] [main/INFO]: [注册] WebAPI - Authenticate
[23:30:22] [main/INFO]: [注册] WebAPI - Logs
[proxychains] Dynamic chain  ...  127.0.0.1:7890  ...  raw.githubusercontent.com:443  ...  OK
[proxychains] Dynamic chain  ...  127.0.0.1:7890  ...  127.0.0.1:8085  ...  OK
[23:30:22] [main/INFO]: [封禁] 已从保存的封禁列表缓存文件中恢复了 0 个封禁项
[23:30:23] [main/INFO]: PeerBanHelper BanWave Daemon 已启动
[23:30:23] [/INFO]: IP黑名单订阅规则 0xde-0xad-0xbe-0xef 加载成功
[proxychains] Dynamic chain  ...  127.0.0.1:7890  ...  raw.githubusercontent.com:443  ...  OK
[23:30:24] [/INFO]: IP黑名单订阅规则 123pan 加载成功
[proxychains] Dynamic chain  ...  127.0.0.1:7890  ...  raw.githubusercontent.com:443  ...  OK
[23:30:25] [/INFO]: IP黑名单订阅规则 dt_torrent 加载成功
[proxychains] Dynamic chain  ...  127.0.0.1:7890  ...  raw.githubusercontent.com:443  ...  OK
[23:30:26] [/INFO]: IP黑名单订阅规则 go_torrent 加载成功
[proxychains] Dynamic chain  ...  127.0.0.1:7890  ...  raw.githubusercontent.com:443  ...  OK
[23:30:27] [/INFO]: IP黑名单订阅规则 hp_torrent 加载成功
[proxychains] Dynamic chain  ...  127.0.0.1:7890  ...  raw.githubusercontent.com:443  ...  OK
[23:30:27] [/INFO]: IP黑名单订阅规则 multi-dial 加载成功
[23:30:27] [pool-4-thread-1/INFO]: IP黑名单规则订阅完毕

请问能否添加一个配置项用来指定代理?proxychains 的原理是劫持动态链接库,并不像一个比较优雅的解决方案……

TTsdzb commented 1 week ago

请问能否添加一个配置项用来指定代理?

我会了,添加这几个命令行参数:

"-Dhttp.proxyHost=127.0.0.1" "-Dhttp.proxyPort=7890" "-Dhttps.proxyHost=127.0.0.1" "-Dhttps.proxyPort=7890"

相当于在代码中调用 System.setProperty 设置了 http.proxyHost, http.proxyPort, https.proxyHost, https.proxyPort 四个设置项。前两个相当于 http_proxy 环境变量,后两个相当于 https_proxy 环境变量。

我使用了一个 bash 脚本启动,所以这里用双引号引起来了。其他 Shell 可能不需要这样做。

合起来就是这样:

${JAVA_HOME}/bin/java -Xmx256M -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+ShrinkHeapInSteps "-Dhttp.proxyHost=127.0.0.1" "-Dhttp.proxyPort=7890" "-Dhttps.proxyHost=127.0.0.1" "-Dhttps.proxyPort=7890" -jar ./PeerBanHelper.jar nogui