Files
op-packages/luci-app-openclash/root/usr/share/openclash/openclash_debug_getcon.lua
T

72 lines
2.8 KiB
Lua

#!/usr/bin/lua
require "nixio"
require "luci.util"
require "luci.sys"
local uci = require("luci.model.uci").cursor()
local fs = require "luci.openclash"
local json = require "luci.jsonc"
local datatype = require "luci.cbi.datatypes"
local addr = arg[1]
local function debug_getcon()
local info, ip, host, diag_info
ip = fs.lanip()
local port = fs.uci_get_config("config", "cn_port")
local passwd = fs.uci_get_config("config", "dashboard_password") or ""
if ip and port then
info = luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://"%s":"%s"/connections', passwd, ip, port))
if info then
info = json.parse(info)
end
if info then
local conn_lines = {}
for i = 1, #(info.connections) do
if info.connections[i].metadata.host == "" then
host = "Empty"
else
host = info.connections[i].metadata.host
end
if not addr then
conn_lines[#conn_lines + 1] = string.format("%d. SourceIP:【%s】 - Host:【%s】 - DestinationIP:【%s】 - Network:【%s】 - RulePayload:【%s】 - Lastchain:【%s】\n",
i,
tostring(info.connections[i].metadata.sourceIP),
tostring(host),
tostring(info.connections[i].metadata.destinationIP),
tostring(info.connections[i].metadata.network),
tostring(info.connections[i].rulePayload),
tostring(info.connections[i].chains and info.connections[i].chains[1]))
else
if datatype.hostname(addr) and string.lower(addr) == host or datatype.ipaddr(addr) and addr == (info.connections[i].metadata.destinationIP) then
print("id: "..(info.connections[i].id))
print("start: "..(info.connections[i].start))
print("download: "..fs.filesize(info.connections[i].download))
print("upload: "..fs.filesize(info.connections[i].upload))
print("rule: "..(info.connections[i].rule))
print("rulePayload: "..(info.connections[i].rulePayload))
print("chains: ")
for o = 1, #(info.connections[i].chains) do
print(" "..o..": "..(info.connections[i].chains[o]))
end
print("metadata: ")
print(" sourceIP: "..(info.connections[i].metadata.sourceIP))
print(" sourcePort: "..(info.connections[i].metadata.sourcePort))
print(" host: "..host)
print(" destinationIP: "..(info.connections[i].metadata.destinationIP))
print(" destinationPort: "..(info.connections[i].metadata.destinationPort))
print(" network: "..(info.connections[i].metadata.network))
print(" type: "..(info.connections[i].metadata.type))
print("")
end
end
end
if not addr and #conn_lines > 0 then
local existing = fs.readfile("/tmp/openclash_debug.log") or ""
fs.writefile("/tmp/openclash_debug.log", existing .. table.concat(conn_lines))
end
end
end
os.exit(0)
end
debug_getcon()