宿舍頻寬有限,迅雷下載佔滿頻寬導致其他人看影片卡頓、網頁打不開。本文記錄一個基於 TP-Link 路由器後台 API 的智慧限速工具:自動發現頻寬上限、監測設備流量、動態判定「飢餓/飽食」狀態、公平重分配頻寬。專案開源:themis-von-wifi。

classs.js 中 securityEncode、orgAuthPwd)。ScriptEngine 執行提取的 JS 函數獲取密文。stok,後續請求 URL 附帶 ?stok=xxx 作為憑證。// Java 呼叫 JS 加密核心片段
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine se = sem.getEngineByName("javascript");
se.eval(extractFunction("this.securityEncode"));
se.eval(extractFunction("this.orgAuthPwd"));
se.eval("result=this.orgAuthPwd(\"" + plainPwd + "\")");
String encryptedPwd = se.get("result").toString();



參數: maxSpeed(觀測到的峰值頻寬)、hostCount(在線設備數)、watch_interval=3s、judge_interval=12s、minSpeedLimit(保底速度)。
maxSpeed * 0.9 / hostCount 給每台設備。利用率 = 平均速度 / 當前限速

static JSONObject retrieveSuggestion(Map<String, Long> speedSum, int maxSpeed, Map<String, Integer> currLimit) {
// 計算各設備平均速度、空閒頻寬
// 識別飢餓/飽食設備
// 依規則分配空閒頻寬,不低於 minSpeedLimit
// 返回 {mac: 建議限速} JSON
}
class WatchDogThread extends Thread {
public void run() {
while (true) {
storeHostInfo(listOnlineHosts()); // 採樣
if (++tick == judge_interval/watch_interval) {
judge(); // 分析+下發
tick = 0;
}
sleep(watch_interval);
}
}
private void judge() {
JSONObject suggestion = HostAnalyzer.retrieveSuggestion(...);
for (mac : suggestion.keySet()) act(mac, suggestion.getInt(mac));
// 清空本輪統計
}
private void act(String mac, int limit) {
// 構造 JSON 下發限速指令至路由器
}
}
歡迎關注專案 GitHub,歡迎 PR 改進演算法與支援更多路由器型號!