OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14166|回复: 17

请教LWIP的DNS问题

[复制链接]

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
发表于 2014-3-27 17:22:51 | 显示全部楼层 |阅读模式
我是新手,最近在学习关于LWIP方面的东西,用了xiaoyan版主分享的LWIP例程可以实现TCP服务器,TCP客户端,UDP服务器,UDP客户端,WEBSEVER等功能,现在还想加入一些DNS方面东西

在原来的程序里简单地加入




在op.H里配置了LWC_DNS   1


ip_addr_t result;
static void my_found(const char *name, ip_addr_t *ipaddr, void *arg)
{
uint8_t ip[4];
result = *ipaddr;

ip[0] = result.addr>>24; 
ip[1] = result.addr>>16;
ip[2] = result.addr>>8; 
ip[3] = result.addr; 

printf("%d.%d.%d.%d",ip[3], ip[2], ip[1], ip[0]); 

}
int main(void)
{
char hostname[]="www.baidu.com";
ip_addr_t *addr;
lwip_init();

dns_gethostbyname(hostname,addr,my_found,NULL);

while(1)
{
还有其他无关函数;
}
} 


简单的调用dns_gethostbyname得不到正确的结果不知道为什么

dns_gethostbyname 设置断点,看到addr的地址是0x00000001是不是有问题啊?

不知道哪位有做过相关的实验或者测试能够给指导一下



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2067

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-27 22:21:14 | 显示全部楼层
回复【楼主位】xiaosi204:
---------------------------------
ip_addr_t *addr;你这个addr是个野指针。我刚刚测试了是可以得到主机名对应的IP的。

struct ip_addr DNS_Addr;
dns_gethostbyname("www.openedv.com",&DNS_Addr,dns_serverFound,NULL);

void dns_serverFound(const char *name, struct ip_addr *ipaddr, void *arg)
{
u32 ip=0;
  if ((ipaddr) && (ipaddr->addr))
  {
ip = ipaddr->addr;
printf("IP地址%ld,%ld,%ld,%ld\r\n",(ip&0x000000ff),(ip&0x0000ff00)>>8,(ip&0x00ff0000)>>16,(ip&0xff000000)>>24);
 
  }
  else{

}

}

注意while中必须执行
LWIP_Polling();
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
 楼主| 发表于 2014-3-28 10:59:15 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
谢谢版主您的回答,我用您这个的程序在while(1)里面有调用LWIP_Polling();这个函数里面我添加了    if(timer_expired(&last_dns_time,DNS_TMR_INTERVAL/CLOCKTICKS_PER_MS))
  {
 dns_tmr();
  } 

但是还是没有打印出来IP值,
我用单步执行追踪dns_gethostbyname("www.openedv.com",&DNS_Addr,dns_serverFound,NULL);这个函数的时候是返回ERR_INPROGRESS

运行到
void dns_serverFound(const char *name, struct ip_addr *ipaddr, void *arg)

这个函数的时候,发现ipaddr的地址为0x00000000

返回的值的一直是错的,
这个程序只是在您的过程里改动的
难道还需要在dns.c或者dns.h初始化里改动什么吗?

源函数:
typedef void (*dns_found_callback)(const char *name, ip_addr_t *ipaddr, void *callback_arg);//dns.h
dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback found, void *callback_arg)//dns.c
回复 支持 反对

使用道具 举报

38

主题

2067

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-28 12:41:04 | 显示全部楼层
回复【3楼】xiaosi204:
---------------------------------
“难道还需要在dns.c或者dns.h初始化里改动什么吗?”
不需要改动的。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

7

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2012-8-23
在线时间
0 小时
发表于 2014-3-28 13:11:28 | 显示全部楼层
搭车问个问题额  LWIP如何实现双IP功能额?
调了2次 netif_add,  netif_set_default, netif_set_up,如果是同网段的IP均可以ping通
但是如果设置的是不同网段的IP 则会 时通时不通 。
求解 应该改动什么地方才可以实现 单网卡 双IP的功能啊?
回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
 楼主| 发表于 2014-3-28 14:19:42 | 显示全部楼层
回复【4楼】xiaoyan:
---------------------------------
那我设置断点运行到
void dns_serverFound(const char *name, struct ip_addr *ipaddr, void *arg)

这个函数的时候,发现ipaddr的地址为0x00000000,是不是问题出在这里呢?然后就没办法得到正确的IP地址?

我是在你的那个工程main.c上添加的这些,就不知道问题出在哪里了
回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
 楼主| 发表于 2014-3-28 15:26:40 | 显示全部楼层




我把断点设置在那边的时候,发现ipaddr的地址变为0x0000000了


回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
 楼主| 发表于 2014-3-28 16:36:56 | 显示全部楼层
谢谢版主的帮忙,原来我们路由器绑定了IP地址,没办法连接网络。换了一个路由器就好了
回复 支持 反对

使用道具 举报

38

主题

2067

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-28 17:53:37 | 显示全部楼层
回复【5楼】月光魔术:
---------------------------------
这个我也不会,帮不上你忙,呵呵。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

11

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2013-9-29
在线时间
1 小时
发表于 2014-11-17 22:20:47 | 显示全部楼层
楼主 有没有实现开发板ping服务器的功能啊
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-2-7
在线时间
8 小时
发表于 2015-3-2 16:51:21 | 显示全部楼层
楼主到底是怎么解决的啊,现在遇到和楼主一样的问题了,路由器绑定Ip是怎么回???
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2015-5-8
在线时间
51 小时
发表于 2015-7-20 21:53:48 | 显示全部楼层
楼主你好 ,我参考你的帖子,绑定之后解析出来的IP地址对,
if ((localtime - DNSTimer) >= TCP_TMR_INTERVAL)
  {
    DNSTimer =  localtime;
    dns_tmr();
  }
void dns_serverFound(const char *name, struct ip_addr *ipaddr, void *arg) 


 
 unsigned char  ip[4];
 DNS_Addr = *ipaddr;
   
 ip[0] = DNS_Addr.addr>>24; 
 ip[1] = DNS_Addr.addr>>16;
 ip[2] = DNS_Addr.addr>>8; 
 ip[3] = DNS_Addr.addr; 
 printf("\r\n%d.%d.%d.%d\r\n",ip[3], ip[2], ip[1], ip[0]); 
}
解析出来的是56.231.0.32.而我的是192.168.1.6
求解答
回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
 楼主| 发表于 2015-7-21 10:29:04 | 显示全部楼层
回复【12楼】忧忧:
---------------------------------
你是要实现DNS还是DHCP功能呢?我看你的问题应该是想获取动态IP吧?动态IP的话你就把DHCP的设置为1就可以了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-9-29
在线时间
0 小时
发表于 2015-9-29 16:35:00 | 显示全部楼层
忧忧,你的DNS问题解决了吗?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-8-30
在线时间
0 小时
发表于 2015-12-4 21:02:27 | 显示全部楼层
回复【14楼】reandy:
---------------------------------
请问8楼,怎样才能获取路由器WAN口的公网IP?
回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
 楼主| 发表于 2015-12-8 09:41:13 | 显示全部楼层
回复【15楼】falitron:
---------------------------------
百度直接输入IP,应该就是公网的IP了吧?
回复 支持 反对

使用道具 举报

16

主题

173

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2441
金钱
2441
注册时间
2014-11-5
在线时间
348 小时
发表于 2016-6-3 15:30:05 | 显示全部楼层
忧忧 发表于 2015-7-20 21:53
楼主你好 ,我参考你的帖子,绑定之后解析出来的IP地址对,
if ((localtime - DNSTimer)& ...

域名对应多个ip?
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2020-7-20
在线时间
15 小时
发表于 2020-8-1 16:01:26 | 显示全部楼层
xiaoyan 发表于 2014-3-27 22:21
回复【楼主位】xiaosi204:
---------------------------------
ip_addr_t *addr;你这个addr是个野指针 ...

谢谢老哥
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-8 15:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表