Files
BR_YKC/4G/tools/resource/soc_script/v2025.12.31.22/lib/httpdns.lua
2026-03-31 15:46:04 +08:00

80 lines
2.0 KiB
Lua

--[[
@module httpdns
@summary 使用Http进行域名解析
@version 1.0
@date 2023.07.13
@author wendal
@usage
-- 通过阿里DNS获取结果
local ip = httpdns.ali("air32.cn")
log.info("httpdns", "air32.cn", ip)
-- 通过腾讯DNS获取结果
local ip = httpdns.tx("air32.cn")
log.info("httpdns", "air32.cn", ip)
]]
local httpdns = {}
--[[
通过阿里DNS获取结果
@api httpdns.ali(domain_name, opts)
@string 域名
@table opts 可选参数, 与http.request的opts参数一致
@return string ip地址
@usage
local ip = httpdns.ali("air32.cn")
log.info("httpdns", "air32.cn", ip)
-- 指定网络适配器
local ip = httpdns.ali("air32.cn", {adapter=socket.LWIP_STA, timeout=3000})
log.info("httpdns", "air32.cn", ip)
]]
function httpdns.ali(n, opts)
if n == nil then return end
if opts == nil then
opts = {timeout=3000}
elseif opts.timeout == nil then
opts.timeout = 3000
end
local code, _, body = http.request("GET", "http://223.5.5.5/resolve?short=1&name=" .. tostring(n), nil, nil, opts).wait()
if code == 200 and body and #body > 2 then
local jdata = json.decode(body)
if jdata and #jdata > 0 then
return jdata[1]
end
end
end
--[[
通过腾讯DNS获取结果
@api httpdns.tx(domain_name, opts)
@string 域名
@table opts 可选参数, 与http.request的opts参数一致
@return string ip地址
@usage
local ip = httpdns.tx("air32.cn")
log.info("httpdns", "air32.cn", ip)
-- 指定网络适配器
local ip = httpdns.tx("air32.cn", {adapter=socket.LWIP_STA, timeout=3000})
log.info("httpdns", "air32.cn", ip)
]]
function httpdns.tx(n, opts)
if n == nil then return end
if opts == nil then
opts = {timeout=3000}
elseif opts.timeout == nil then
opts.timeout = 3000
end
local code, _, body = http.request("GET", "http://119.29.29.29/d?dn=" .. tostring(n), nil, nil, opts).wait()
if code == 200 and body and #body > 2 then
local tmp = body:split(",")
if tmp then return tmp[1] end
end
end
return httpdns