powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / DNS resolver
1 сообщений из 1, страница 1 из 1
DNS resolver
    #34039247
Belevern
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите, пожалуйста. Можите дать исходник самого простого 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
1 сообщений из 1, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / DNS resolver
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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