LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6490|回复: 7

嵌入式环境下(使用busybox),能ping外网IP但域名解析失败!

[复制链接]
发表于 2006-9-16 13:23:11 | 显示全部楼层 |阅读模式
在类似babylinux的嵌入式环境下,ping外网ip成功,但ping相应域名就Unknown host,不知道什么原因?
配置文件如下:
resolv.conf
    nameserver 192.168.1.1
    nameserver 202.96.128.68

host.conf
    order hosts,bind

host
    127.0.0.1 localhost:localdomain localhost

nsswitch.conf
    ...
    hosts: files dns  (相应的lib我也copy过去了)
    ...

services
    ...
    nameserver 42/tcp  name
    nameserver 42/udp name
    ...

如果我在host中加上
  218.30.66.101 www.sina.com.cn sina
后,ping  www.sina.com.cn 就成功了,说明配置文件的信息应该是找到的,但dns好像不行!?

各位有没碰到这类问题而又成功解决的啊?先谢谢了!!

补充:
刚看到“定制的 LINUX 不能解释域名”一文章,我觉得我的情况和他的不同,我的嵌入式linux是能找到localhost的东西的,而且将外网的域名和ip地址写到hosts上后ping域名也是成功的,只是域名在本地hosts没的时候,好像dns就查找不到了。。。
 楼主| 发表于 2006-9-17 19:12:26 | 显示全部楼层
问题解决了!
我用busybox的ping、nslookup命令,域名就是解析不了。后来将redhat上的nslookup命令(当然,还copy了一大堆动态库)copy过来居然就行了!
开始怀疑busybox的ping、nslookup命令是不是有问题了!?于是用busybox的nslookup命令再试一次,这下也行了!
结论很明显,busybox静态编译,但ping、nslookup命令还得依赖某些动态库文件的(libnss_dns*、libresolv*)。
回复 支持 反对

使用道具 举报

发表于 2006-9-19 08:38:55 | 显示全部楼层
Post by luofuliang
问题解决了!
我用busybox的ping、nslookup命令,域名就是解析不了。后来将redhat上的nslookup命令(当然,还copy了一大堆动态库)copy过来居然就行了!
开始怀疑busybox的ping、nslookup命令是不是有问题了!?于是用busybox的nslookup命令再试一次,这下也行了!
结论很明显,busybox静态编译,但ping、nslookup命令还得依赖某些动态库文件的(libnss_dns*、libresolv*)。

考慮問題總是要多方面的。
回复 支持 反对

使用道具 举报

发表于 2006-9-23 23:04:11 | 显示全部楼层
Post by luofuliang
问题解决了!
我用busybox的ping、nslookup命令,域名就是解析不了。后来将redhat上的nslookup命令(当然,还copy了一大堆动态库)copy过来居然就行了!
开始怀疑busybox的ping、nslookup命令是不是有问题了!?于是用busybox的nslookup命令再试一次,这下也行了!
结论很明显,busybox静态编译,但ping、nslookup命令还得依赖某些动态库文件的(libnss_dns*、libresolv*)。


我有些怀疑这个问题的答案。首先busybox的所有的命令都是busybox这个binary的符号连接,我们调用诸如ping,nsloopup的命令的时候,busybox的main函数里面会check argv[0]究竟是什么,比如说是ping,然后busybox跳转到相应的代码处理ping这个命令。如果busybox是静态编译的话,那么它所依赖的所有外部和内部符号都应该被编译到busybox的这个binary里面。并不存在busybox自己的ping和nslookup依赖某些别的动态库。如果ping和nslookup依赖某些外部的动态库文件的话,那么运行ldd脚本肯定可以看到的。楼主可以试一下对busybox的ping和nslookup调用ldd看看。ldd脚本可以从FC5上copy一个过去。
回复 支持 反对

使用道具 举报

发表于 2006-12-1 20:08:59 | 显示全部楼层
我也有整个问题也是靠拷贝链接库搞定的。
回复 支持 反对

使用道具 举报

发表于 2006-12-2 01:16:50 | 显示全部楼层
我也有同样的疑问,而且当我选择静态编译的时候,复制了那几个文件也没用。只有将busybox配置成使用动态连接库文件的时候,复制了那几个文件就解决问题了。

我在busybox的命令帮助页面上找到了这样一段话:
LIBC NSS
When used with glibc, the BusyBox 'networking' applets will similarly require that you install at least some of the glibc NSS stuff (in particular, /etc/nsswitch.conf, /lib/libnss_dns*, /lib/libnss_files*, and /lib/libresolv*).

这是不是就表示无论是静态还是动态编译,网络命令都是需要这些库文件的?

顺便问一个udhcpc的问题,使用udhcpc正常获得了ip地址,上网也没有问题,但是udhcpc有一个错误:
  1. route: SIOC[ADD|DEL]RT: No such process
复制代码
有人知道是什么原因么?谢谢

Post by step_by_step
我有些怀疑这个问题的答案。首先busybox的所有的命令都是busybox这个binary的符号连接,我们调用诸如ping,nsloopup的命令的时候,busybox的main函数里面会check argv[0]究竟是什么,比如说是ping,然后busybox跳转到相应的代码处理ping这个命令。如果busybox是静态编译的话,那么它所依赖的所有外部和内部符号都应该被编译到busybox的这个binary里面。并不存在busybox自己的ping和nslookup依赖某些别的动态库。如果ping和nslookup依赖某些外部的动态库文件的话,那么运行ldd脚本肯定可以看到的。楼主可以试一下对busybox的ping和nslookup调用ldd看看。ldd脚本可以从FC5上copy一个过去。
回复 支持 反对

使用道具 举报

发表于 2007-7-30 17:08:01 | 显示全部楼层
sandro是在哪看到的帮助页面
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-25 14:56:15 | 显示全部楼层
Post by Sandr0
我也有同样的疑问,而且当我选择静态编译的时候,复制了那几个文件也没用。只有将busybox配置成使用动态连接库文件的时候,复制了那几个文件就解决问题了。

我在busybox的命令帮助页面上找到了这样一段话:

这是不是就表示无论是静态还是动态编译,网络命令都是需要这些库文件的?

顺便问一个udhcpc的问题,使用udhcpc正常获得了ip地址,上网也没有问题,但是udhcpc有一个错误:
  1. route: SIOC[ADD|DEL]RT: No such process
复制代码
有人知道是什么原因么?谢谢




呵呵,的确是这样的,busybox里面的help说的很清楚,部分命令是倚赖lib_nss的,即使你的busybox是static link的也需要这些lib的....
1年前的东西,当时做嵌入式不久,很多东西都不知道.解决了,也是很糊涂的...
回复 支持 反对

使用道具 举报

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

本版积分规则

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