hik.leo

hik.leo

0个粉丝

15

问答

0

专栏

1

资料

hik.leo  发布于  2016-07-26 16:37:02
采纳率 0%
15个问答
2691

海思平台上如何实现域名解析?

 
各位大神

        在海思平台上,如何实现域名解析? 如 ping www.baidu.com
我来回答
回答6个
时间排序
认可量排序

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-26 16:52:43
认可0
本帖最后由 ngswfx 于 2016-7-26 17:08 编辑

搞了这么就海思,代码也有,我还没试过呢,这和海思没关系,就是linux的事情。

编写程序,使用gethostbyname,getaddrinfo。

//不过你必须保证自己设备板子的DNS配置部分是正常的。

////////代码不一定完全正确,我简单测试了一下,可以用 。 主要是:bool TE_GetRealIP(char *HostName,char *strRealIP),输入的HostName可以是IP,也可以是域名,strRealIP得到真正的IP

//代码大体如下,没有的定义或者不用的东西,你屏蔽掉即可。

[code]

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#include


bool TE_CheckIfRealIp(char *IP)
{
        if(!IP)
                return false;
        int nlen=strlen(IP);
        //长度不能小于7不能大于15
        if(nlen<7||nlen>15)
                return false;
        //不能有非0-9以外的字母
        for(int i=0;i                 if((char)IP=='.')
                        continue;
                if((char)IP<'0'||(char)IP>'9')
                        return false;
        }
        return true;
}

DWORD platform_domain2ipEx(const char *szDomain, char *szDotNumIP)
{
        char szAddr[32] = {0};
        struct hostent *pHost;
        if((pHost = gethostbyname(szDomain)) == NULL)
                return -1;
        DWORD dwIP = inet_addr( inet_ntoa(*(struct in_addr *)*pHost->h_addr_list) );
        strcpy(szAddr, inet_ntoa(*((struct in_addr *)pHost->h_addr)));
        if(TE_CheckIfRealIp(szAddr)){
                strcpy(szDotNumIP, szAddr);
                return dwIP;
        }
        return 0;
}

bool TE_GetRealIP(char *HostName,char *strRealIP)
{
        if(!HostName||!strRealIP)
                return false;
        struct addrinfo hints;
        struct addrinfo *result, *result_pointer;
        int ret;
        bool bGetIP=false;
        memset(&hints, 0, sizeof(struct addrinfo));
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
        hints.ai_flags = AI_CANONNAME;
        hints.ai_protocol = 0;
        ret = getaddrinfo(HostName, NULL, &hints, &result);
        if (ret != 0)
                return false;
        DebugInf("getnameinfo:%s int \n",HostName);
        for (result_pointer = result; result_pointer != NULL; result_pointer = result_pointer->ai_next)
        {
                char hostname[1025] = "";
                ret = getnameinfo(result_pointer->ai_addr, result_pointer->ai_addrlen, hostname, sizeof(hostname), NULL, 0, NI_NUMERICHOST);
                if (ret != 0)
                        continue;
                else
                {
                   DebugInf("getnameinfo:%s IP: %s \n",HostName,hostname);
                   if(strlen(hostname)>0&&TE_CheckIfRealIp(hostname)){
                           printf("HostName:%s IP: %s \n",HostName,hostname);
                           sprintf(strRealIP,"%s",hostname);
                           bGetIP=true;
                           break;
                   }
                }
        }
        freeaddrinfo(result);
        DebugInf("getnameinfo:%s in 2 \n",HostName);
        //没有获取到
        if(!bGetIP){
                DebugInf("platform_domain2ipEx:%s int \n",HostName);
                if(platform_domain2ipEx(HostName,strRealIP)!=-1)
                        bGetIP=true;
        }
        ////////////////////////////////////////////////
        if(bGetIP)
                return true;
        else
                return false;
}[/code]

goodman

4个粉丝

30

问答

18

专栏

17

资料

goodman 2016-07-26 17:00:51
认可0
使用管道去执行ping 命令然后在解析出来就可以了

hik.leo

0个粉丝

15

问答

0

专栏

1

资料

hik.leo 2016-07-26 19:31:23
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34846&ptid=12088]ngswfx 发表于 2016-7-26 16:52[/url]
搞了这么就海思,代码也有,我还没试过呢,这和海思没关系,就是linux的事情。

编写程序,使用gethostby ...[/quote]

设备板子的DNS配置, 这个是如何进行配置。 我看都没有/etc/resolv.conf,这个配置文件

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-26 19:50:26
认可0
本帖最后由 ngswfx 于 2016-7-26 19:52 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=34854&ptid=12088]hik.leo 发表于 2016-7-26 19:31[/url]
设备板子的DNS配置, 这个是如何进行配置。 我看都没有/etc/resolv.conf,这个配置文件[/quote]

手动写一个或者直接用没办法的代码:

[code]void WriteNewDNS(char *_strNewDNS)
{
        char strCMD[128];
        memset(strCMD,0,sizeof strCMD);
        ////////删除系统的DNS文件
        printf("WriteNewDNS   delete resolv.conf \n");
        sprintf(strCMD,"/bin/rm /etc/resolv.conf");
        system(strCMD);
        ////////////////////
        printf("WriteNewDNS   recreate resolv.conf \n");
        sprintf(strCMD,"echo \"nameserver %s \">> /etc/resolv.conf",_strNewDNS);
        system(strCMD);
}
[/code]

hik.leo

0个粉丝

15

问答

0

专栏

1

资料

hik.leo 2016-07-26 20:12:46
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34856&ptid=12088]ngswfx 发表于 2016-7-26 19:50[/url]
手动写一个或者直接用没办法的代码:[/quote]

非常感谢,可以了

goodman

4个粉丝

30

问答

18

专栏

17

资料

goodman 2016-07-26 21:16:03
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34857&ptid=12088]hik.leo 发表于 2016-7-26 20:12[/url]
非常感谢,可以了[/quote]

问题解决请结贴
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区