httpdns

优质
小牛编辑
184浏览
2023-12-01

httpdns功能简介

- 1: httpdns 是一款递归DNS服务,与权威DNS不同,HTTPDNS 并不具备决定解析结果的能力,而是主要负责解析过程的实现。
- 2:使用 HTTP 协议访问阿里云或者华为云的服务端,获得域名解析结果,绕过运营商的 Local DNS ,避免域名劫持。
- 3:httpdns 能够直接得到客户端的出口网关 IP,从而更准确地判断客户端地区和运营商,得到更精准的解析结果。
- 4: httpdns 支持全网域名的解析,包括在阿里云(万网)注册的域名,和其它第三方的域名。

GSLB:Global Service Load Balance

功能:
实现对公司设备入口流量的多维度调度策略,满足多云流量调度、灰度测试流量调度等多种需求

使用httpdns解析域名

- 使用httpdns解析域名,请求示例:"https://gslb-dev.rokid.com/api/v1/?sn=dev_sn&devicetype=dev_tyep"

API响应格式

  • 解析结果JSON格式示例如下: ``` {
"code":0,
   "msg":"Successfully!",
"tag":"Huawei",
"data":[
        {
            "host":"apigwws.open.rokid.com",
            "client_ip":"183.129.185.66",
            "ips":["119.3.1.49"]
        },
        {
            "host":"apigwrest.open.rokid.com",
            "client_ip":"183.129.185.66",
            "ips":["119.3.1.49"]
        }
   ]

} ```

  • 请求失败
错误码错误信息错误说明
400Invalid Request Method, POST and GET Supported Only!!请求方法错误,目前仅支持GET和POST
401Invalid Request Body, Json Supported Only !!请求体JSON解析出错
402SN and DeviceType Must Provided !!请求体JSON解析出错

C库提供的HTTPDNS 接口说明

    typedef struct
    {
        char  *h_name;
        char  **h_ips;
        int32_t ips_num;
    }host_ips;

    typedef struct
    {
        host_ips **host;
        int32_t host_num;
    }ips_list;
  • typedef int (httpdns_finished_notify)(int status, void userdata);
2个返回值类型参数含义数值说明备注
返回值int-1 失败, 0 成功
参数 1statuschar*请求httpdns 服务结果
参数 2userdatavoid*用户回调函数要处理的数据
  • int32_t httpdns_service_init();
0个参数类型参数含义数值说明备注
参数httpdns 使用curl初始化类型CURL_GLOBAL_ALL
  • int32_t httpdns_service_destroy()
0个参数类型参数含义数值说明备注
参数httpdns使用的curl释放空间的线程
  • int32_t httpdns_resolve_gslb(char sn, char device_type, int timeout_ms,httpdns_finished_notify cb,void *userdata);
2个参数类型参数含义数值说明备注
参数1sn设备sn 号
参数2device_type设备deviceypeID
参数3timeout_ms请求超时时间(Millisecond
参数4cb用户回调处理的函数,通知用户请求dns完成
参数5userdata用户回调处理的数据

-int httpdns_getips_by_host(char host_name, char ip);

1个返回值类型参数含义数值说明备注
返回值int-1 失败, 0 成功
参数 1host_namechar*要查训的hostname
参数 2ipchar*查询到对应ip 返回给该参数
  • 测试代码以及实例
  • sample 目录下的测试文件httpdns_samplae.c
  • 测试方式,测试调用接口已经在测试代码写好,如果测试 host name 直接编译运行就行
  • make package/httpdns/insall -j1 V=s
  • ./httpdns_samplae