#!/usr/bin/lua5.1 local cjson=require("cjson") local frp_online_gateways_objs={} local all_gateways_objs={} local online_gateways_objs={} local all_devs_objs={} local all_dtues_objs={} local all_data={} local online_gateways_objs_cnt=0 local frp_online_gateways_objs_cnt=0 local all_gateways_objs_cnt=0 local all_devs_objs_cnt=0 local all_dtues_objs_cnt=0 function update_dev_list(base_url,user,passwd) --1. login and get token local text_result=io.popen(string.format("curl -s -c cookies.txt -H'Accept: application/json, text/plain, */*' -H'Content-Type: application/json;charset=UTF-8' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -d '{\"username\":\"%s\",\"password\":\"%s\"}' '%s/iot/system/user/login'", base_url, user, passwd, base_url)):read("*a") --print(text_result) local obj=cjson.decode(text_result) if not obj or obj.code ~= 200 then print("login failed") return -1 end local Authorization=string.format("Authorization: %s%s", obj.data.tokenHead, obj.data.token) local Cookie=string.format("Cookie: loginToken=%s%s", obj.data.tokenHead, obj.data.token) --2. get user list text_result=io.popen(string.format("curl -s -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/system/tenant/findPageList?page=1&size=100'", base_url, Authorization, Cookie, base_url)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or not obj.result or obj.result.status ~= 200 then print("get user list failed") return -2 end local all_tenants=obj.data all_data.all_tenants=all_tenants all_data.all_tenants_count=obj.pagination.totalCount for i,v in ipairs(all_tenants) do --print(v.name, v.tenantId) --3. get each user's token text_result=io.popen(string.format("curl -s -X POST -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/system/tenant/switch/%s'", base_url, Authorization, Cookie, base_url, v.tenantId)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or obj.code ~= 200 then print(string.format("get %s user's token failed", v.tenantId)) return -3 end Authorization=string.format("Authorization: %s%s", obj.data.tokenHead, obj.data.token) Cookie=string.format("Cookie: loginToken=%s%s", obj.data.tokenHead, obj.data.token) --4. get each user's gateway list text_result=io.popen(string.format("curl -s -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/gateway/findPageList?gateWayType=15&page=1&size=1000000'", base_url, Authorization, Cookie, base_url)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or not obj.result or obj.result.status ~= 200 then print(string.format("get %s user's gateway list failed", v.tenantId)) return -4 end local all_gateways=obj.data v.all_gateways=all_gateways v.all_gateways_count=obj.pagination.totalCount --5. get each user's dev list text_result=io.popen(string.format("curl -s -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/device/findPageList?page=1&size=1000000&isDev=1'", base_url, Authorization, Cookie, base_url)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or not obj.result or obj.result.status ~= 200 then print(string.format("get %s user's dev list failed", v.tenantId)) return -5 end local all_devs=obj.data v.all_devs=all_devs v.all_devs_count=obj.pagination.totalCount --7. get dev's data for i1,v1 in ipairs(all_devs) do text_result=io.popen(string.format("curl -s -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/device/data/current/%s'", base_url, Authorization, Cookie, base_url, v1.id)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or not obj.code or obj.code ~= 200 then print(string.format("get %s user's dev list failed", v.tenantId)) return -5 end v1.data=obj.data end --6. get each user's dtu list text_result=io.popen(string.format("curl -s -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/device/findPageList?page=1&size=1000000&isDtu=1'", base_url, Authorization, Cookie, base_url)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or not obj.result or obj.result.status ~= 200 then print(string.format("get %s user's dtu list failed", v.tenantId)) return -6 end local all_dtues=obj.data v.all_dtues=all_dtues v.all_dtues_count=obj.pagination.totalCount end return 0 end function update_port_list() local text_result=io.popen('curl -s -u "dywl:dywlfrp123" "http://frps.lnxall.com:7500/api/proxy/tcp"'):read("*a") local obj=cjson.decode(text_result) for i,v in ipairs(obj.proxies) do if v.status == "online" then table.insert(frp_online_gateways_objs,{name=v.name,remote_ip="192.168.170.23",remote_port=v.conf.remote_port,user="root",passwd="dyiot123"}) end end end function ssh_toport_exec(special_gateway_objs,cmd) for i,v in ipairs(frp_online_gateways_objs) do for i1,v1 in ipairs(special_gateway_objs) do if v.name == "ssh_" .. v1 then print(string.format("--------- %s --------", v.name)) local text_result=io.popen(string.format('./auto_ssh.exp %s %s %s %s "%s"', v.remote_ip,v.remote_port,v.user,v.passwd, cmd)):read("*a") print(text_result) print(string.format("========= %s ========", v.name)) print("\n") end end if #special_gateway_objs == 0 then print(string.format("--------- %s --------", v.name)) local text_result=io.popen(string.format('./auto_ssh.exp %s %s %s %s "%s"', v.remote_ip,v.remote_port,v.user,v.passwd, cmd)):read("*a") print(text_result) print(string.format("========= %s ========", v.name)) print("\n") end end end function sort_data() local tenantId="63287620" print("SN,Name,Type,TenantName,Status,LastHeartBeatTime,BeforeCurrent,SoftVer,UpLinkDeviceName,Data") for k,v in pairs(all_data.all_tenants) do --if v.tenantId == tenantId then if v.tenantId then for k1,v1 in pairs(v.all_gateways) do v1.lastHeartBeatTime=type(v1.lastHeartBeatTime) == "userdata" and "NULL" or v1.lastHeartBeatTime local beforeCurrent=v1.lastHeartBeatTime == "NULL" and "NULL" or tostring(os.time()-v1.lastHeartBeatTime/1000) v1.softVer=type(v1.softVer) == "userdata" and "NULL" or v1.softVer print(string.format('%s,%s,%s,%s,%s,%s,%s,%s,%s,\'%s\'', v1.channelNumber,v1.name,v.name,"GW",v1.status,v1.lastHeartBeatTime,beforeCurrent,v1.softVer," ","{}")) end print(string.format('%s,%s,%s,%s,%s,%s,%s,%s,%s,\'%s\'',"=","=","=","=","=","=","=","=","=","=" )) for k1,v1 in pairs(v.all_devs) do v1.lastConnectTime=(type(v1.lastConnectTime) == "userdata") and "NULL" or v1.lastConnectTime if v1.data ~= nil then local tmp_data={} if v1.data['data'] == nil then for i3,v3 in pairs(v1.data) do if type(v3) ~= "userdata" then tmp_data[tostring(v3.name)]=v3.value v1.lastConnectTime=(v1.lastConnectTime~="NULL" or type(v3.collectTime)=="userdata" or v3.collectTime == nil or v1.lastConnectTime > v3.collectTime) and v1.lastConnectTime or v3.collectTime end end v1.data=cjson.encode(tmp_data) else v1.data=(type(v1.data.data)=="userdata") and "NULL" or v1.data.data end else v1.data="NULL" end local beforeCurrent=v1.lastConnectTime == "NULL" and "NULL" or (os.time()-v1.lastConnectTime/1000) v1.softwareVersion=type(v1.softwareVersion) == "userdata" and "NULL" or v1.softwareVersion print(string.format('%s,%s,%s,%s,%s,%s,%s,%s,%s,\'%s\'', v1.channelNumber,v1.name,v.name,"DEV",v1.status,v1.lastConnectTime,beforeCurrent,v1.softwareVersion,v1.upLinkDeviceName,v1.data)) end end end end function main() local base_url="http://iot.lnxall.com" local user="admin" local passwd="dywliot123456" if update_dev_list(base_url, user, passwd) == 0 then sort_data() end base_url="http://183.129.159.168:12120" user="admin" passwd="123456" if update_dev_list(base_url, user, passwd) == 0 then sort_data() end base_url="http://39.100.115.127" user="admin" passwd="jjiot2019" if update_dev_list(base_url, user, passwd) == 0 then sort_data() end base_url="http://122.224.150.210:25999" user="admin" passwd="123456" if update_dev_list(base_url, user, passwd) == 0 then sort_data() end end main()