[질문]DNS주소 알아내는 법
kppp와 같은 모뎁접속 프로그램을 만들고 있습니다.
pppd와 ppp0 모두 잘 뛰웠습니다.
하지만, resolv.conf파일에 dns주소를 써야 인터넷브라우저에서 인터넷접속을 할수있는데요..(당연히, ip주소로는 접속이 되져..)
dns주소를 알오는게 쉽지가 않습니다.
다음은 kppp의 dns주소를 찾는 함수입니다.
void auto_hostname() {
struct in_addr local_ip;
struct hostent *hostname_entry;
QString new_hostname;
int dot;
char tmp_str[100]; // buffer overflow safe
gethostname(tmp_str, sizeof(tmp_str));
tmp_str[sizeof(tmp_str)-1]=0; // panic
old_hostname=tmp_str; // copy to QString
if (!p_kdial->stats->local_ip_address.isEmpty() && gpppdata.autoname()) {
local_ip.s_addr=inet_addr(p_kdial->stats->local_ip_address.ascii());
hostname_entry=gethostbyaddr((const char *)&local_ip,sizeof(in_addr),AF_INET);
if (hostname_entry != 0L) {
new_hostname=hostname_entry->h_name;
dot=new_hostname.find('.');
new_hostname=new_hostname.remove(dot,new_hostname.length()-dot);
Requester::rq->setHostname(new_hostname);
modified_hostname = TRUE;
new_hostname=hostname_entry->h_name;
new_hostname.remove(0,dot+1);
add_domain(new_hostname);
}
}
}
문제는 gethostbyaddr()함수가 제대로 작동을 하지 못하고 있습니다.
그래서 hostname_entry는 널값을 갇게되어 다음작업을 수행할수가 없는데요..
gethostbyaddr()함수를 쓰기 위한 사전 준비작업이 따로 있는건지, 도움말에는 특별한것이 없어 보입니다만, 왠지모르게 함수가 정상적인 값을 리턴하지 못하고 있습니다.
리눅스 네트워크프로그램에 경험이 있으신분은 도움주셨으면 합니다.
감사합니다.
댓글 달기