C++实现DNS域名解析(六)

2014-11-24 13:28:51 · 作者: · 浏览: 365
pDecodePos += (nLabelDataLen + 1);
335 usPlainStrLen += (nLabelDataLen + 1);
336 *pusEncodedStrLen += (nLabelDataLen + 1);
337 }
338 else //消息压缩格式,11000000 00000000,两个字节,前2位为跳转标志,后14位为跳转的偏移
339 {
340 if (szPacketStartPos == NULL)
341 {
342 return FALSE;
343 }
344 USHORT usJumpPos = ntohs(*(USHORT*)(pDecodePos)) & 0x3fff;
345 USHORT nEncodeStrLen = 0;
346 if (!DecodeDotStr(szPacketStartPos + usJumpPos, &nEncodeStrLen, szDotStr + usPlainStrLen, nDotStrSize - usPlainStrLen, szPacketStartPos))
347 {
348 return FALSE;
349 }
350 else
351 {
352 *pusEncodedStrLen += 2;
353 return TRUE;
354 }
355 }
356 }
357
358 szDotStr[usPlainStrLen - 1] = '\0';
359 *pusEncodedStrLen += 1;
360
361 return TRUE;
362 }
363
364 ULONG CDNSLookup::GetTickCountCalibrate()
365 {
366 static ULONG s_ulFirstCallTick = 0;
367 static LONGLONG s_ullFirstCallTickMS = 0;
368
369 SYSTEMTIME systemtime;
370 FILETIME filetime;
371 GetLocalTime(&systemtime);
372 SystemTimeToFileTime(&systemtime, &filetime);
373 LARGE_INTEGER liCurrentTime;
374 liCurrentTime.HighPart = filetime.dwHighDateTime;
375 liCurrentTime.LowPart = filetime.dwLowDateTime;
376 LONGLONG llCurrentTimeMS = liCurrentTime.QuadPart / 10000;
377
378 if (s_ulFirstCallTick == 0)
379 {
380 s_ulFirstCallTick = GetTickCount();
381 }
382 if (s_ullFirstCallTickMS == 0)
383 {
384 s_ullFirstCallTickMS = llCurrentTimeMS;
385 }
386
387 return s_ulFirstCallTick + (ULONG)(llCurrentTimeMS - s_ullFirstCallTickMS);
388 }
复制代码
复制代码
1 #include
2 #include
3 #include "DNSLookup.h"
4
5 int main(void)
6 {
7 char szDomainName[] = "www.baidu.com";
8 std::vector veculIPList;
9 std::vector vecstrIPList;
10 std::vector vecCNameList;
11 ULONG ulTimeSpent = 0;
12 CDNSLookup dnslookup;
13 BOOL bRet = dnslookup.DNSLookup(inet_addr("114.114.114.114"), szDomainName, &vecstrIPList, &vecCNameList, 1000, &ulTimeSpent);
14
15 printf("DNSLookup result (%s):\n", szDomainName);
16 if (!bRet)
17 {
18 printf("timeout!\n");
19 return -1;
20 }
21
22 for (int i = 0; i != veculIPList.size(); ++i)
23 {
24 printf("IP%d(ULONG) = %u\n", i + 1, veculIPList[i]);
25 }
26 for (int i = 0; i != vecstrIPList.size(); ++i)
27 {
28 printf("IP%d(string) = %s\n", i + 1, vecstrIPList[i].c_str());
29 }
30 for (int i = 0; i != vecCNameList.size(); ++i)
31 {
32 printf("CName%d = %s\n", i + 1, vecCNameList[i].c_str());
33 }
34 printf("time spent = %ums\n", ulTimeSpent);
35
36 return 0;
37 }