busybox無法ping網域名稱的解決辦法

2021-08-02 05:44:46 字數 3093 閱讀 9386



$ ping www.google.com

ping : bad address 'www.google.com

現在各個版本的busybox都一樣, 網上有人講需要libnss_dns* ...檔案, 拷貝過去還是不能用,

手編2.6.21核心+手編1.5.1busybox+一堆deb包解壓縮出gcc, 乙個自定義的linux基本完成了,就差這麼乙個東西, hack源**... 

最終發現getaddrinfo這個函式呼叫失敗,解決思路就是模擬dns協議把網域名稱發給dns伺服器,把網域名稱轉化為ip,然後再呼叫getaddrinfo,試驗成功。

1. 把下面這段**加入libbb/xconnect.c 的開頭。

2. 把xconnect.c的str2sockaddr函式中getaddrinfo改為hgetaddrinfo。

[cpp]view plain

copy

print?

#include 

#include 

#include 

#include 

#include 

#define oops(msg) 

#include

void fillip(char* buffer, const

char* ip);  

char* name2ip(const

char* name);  

/***  * head len: 12

*   * query: ? + 4

*    * total: strlen(query.buffer) + 16

*     */

typedef

structquery;  

}dns_req;  

/** length of resp: 12 */

typedef

structresp;  

}dns_res;  

int hgetaddrinfo(const

char *node, const

char *service,  

const

struct addrinfo *hints,  

struct addrinfo **res)  

char *get_dns_name()  

pdns = pstr;  

while(isdigit(*pstr) || (*pstr == '.') )  

*pstr = '\0';    

close(fd);  

return pdns;  

}  char * name2ip(const

char *node)  

index += ntohs(res.resp.len) + 12;  

}  return inet_ntoa(res.resp.addr);  

}  void fillip(char* buffer, const

char* ip)  

else  

}  buffer[j] = i - j;  

}

#include #include #include #include #include #define oops(msg) 

#includevoid fillip(char* buffer, const char* ip);

char* name2ip(const char* name);

/** * * head len: 12

* * query: ? + 4

* * total: strlen(query.buffer) + 16

* */

typedef structquery;

}dns_req;

/** length of resp: 12 */

typedef structresp;

}dns_res;

int hgetaddrinfo(const char *node, const char *service,

const struct addrinfo *hints,

struct addrinfo **res)

char *get_dns_name()

pdns = pstr;

while(isdigit(*pstr) || (*pstr == '.') )

*pstr = '\0';

close(fd);

return pdns;

}char * name2ip(const char *node)

index += ntohs(res.resp.len) + 12;

}return inet_ntoa(res.resp.addr);

}void fillip(char* buffer, const char* ip)

else

}buffer[j] = i - j;

}

另外如果是出現:

則需要檢視一下預設閘道器有沒有設定,可以通route命令檢視

# route

kernel ip routing table

destination     gateway         genmask         flags metric ref    use iface

192.168.1.0     *               255.255.255.0           u          0      0        0      rausb0

# route

kernel ip routing table

destination     gateway         genmask         flags metric ref    use iface

192.168.1.0     *               255.255.255.0   u     0      0        0 rausb0

default         192.168.1.1     0.0.0.0         ug    0      0        0 rausb0

docker容器無法ping網域名稱

現象 容器內ping 114.114.114.114 正常 ping baidu.com 超時原因 dns錯誤不能進行網域名稱解析。方法一 容器目錄下新建resolv.conf檔案。vi resolv.conf寫入 search donot nameserver 8.8.8.8 nameserver...

centos下ping不通外網網域名稱

問題描述 解決方法 1.首先確定已經連線上路由器,並且路由器能夠訪問外網,可以通過訪問閘道器進行確定 root localhost ping 192.168.1.1 ping 192.168.1.1 192.168.1.1 56 84 bytes of data.64 bytes from 192....

ping 網域名稱 具體能做什麼

注意 ping 後面有個空格 在加上您的網域名稱 如圖 第 一 這個網域名稱解析到哪個伺服器的ip上了 第二 可以看見這個網域名稱是不是在正常的工作 第三 可以大概我訪問這個 的速度怎麼樣 裡 點1 的地方,可以看見這個網域名稱解析到哪個ip上了 有時候我們就遇到過網域名稱沒有把網域名稱解析到我們的...