Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / DNS resolver / 1 сообщений из 1, страница 1 из 1
07.10.2006, 10:33
    #34039247
Belevern
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DNS resolver
Помогите, пожалуйста. Можите дать исходник самого простого DNS-resolvera... Или скажите где ошибка у меня:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
void printpacket(uint16 size, uint8* data){
        AnsiString tmp="";

        for(int i= 0 ; i<size; i++){
                if(i% 16 == 0 ) {
                        printf("%s\n",tmp.c_str()); tmp="";
                }
                tmp+=char((int(data[i]/ 16 )< 10 )?(int(data[i])/ 16 +'0'):(int(data[i]/ 16 )+'A'- 10 ));
                tmp+=char((data[i]% 16 < 10 )?(data[i]% 16 +'0'):(data[i]% 16 +'A'- 10 ));
                tmp+=' ';
        }
        printf("%s\n",tmp.c_str()); tmp="";
}

int main(int argc, char *argv[])
{
	random();
	std::string host="172.21.17.5";
	unsigned short port= 53 ;
	sockaddr_in sa;
	memset(&sa,NULL,sizeof(sa));
	sa.sin_family = AF_INET;
	struct hostent *hp;
	hp = gethostbyname(host.c_str());
	memcpy ((char *)&sa.sin_addr,hp->h_addr,hp->h_length);
	sa.sin_port = htons(port);
	int sckt = socket(AF_INET, SOCK_DGRAM,  0 );

	ByteBuffer buf;
	buf.add((uint16)rand());
	uint16 flags=0x0000;
	buf.add((uint16)flags);
	buf.add((uint16) 1 );
	buf.add((uint16) 0 );
	buf.add((uint16) 0 );
	buf.add((uint16) 0 );
	buf.add((uint8) 3 );
	buf.add((uint8*)"www", 3 );
	buf.add((uint8) 8 );
	buf.add((uint8*)"belevern", 8 );
	buf.add((uint8) 2 );
	buf.add((uint8*)"ru", 2 );
	buf.add((uint8) 0 );
	buf.add((uint16) 1 );
	buf.add((uint16) 1 );
	sendto(sckt, buf.bufstr, buf.size,  0 ,(sockaddr*)&sa,sizeof(sa));
	char bufstr[ 100 ];
	printpacket(buf.size,buf.bufstr);
	sockaddr_in server_addr;
	int server_addr_size=sizeof(server_addr);
	uint16 size=recvfrom(sckt, bufstr,  100 ,  0 ,(sockaddr*)&server_addr, (socklen_t*)&server_addr_size);
	printpacket(size,(uint8*)bufstr);
	close(sckt);
	return  0 ;
}

printpacket просто печатает содержимое пакета на экран в виде HEX.

результат выполнения такой:

1B CA 00 00 01 00 00 00 00 00 00 00 03 77 77 77
08 62 65 6C 65 76 65 72 6E 02 72 75 00 01 00 01
00

и дальше идёт ожидание того когда придёт пакет...
Заранее благодарен.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / DNS resolver / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]