主要代码如下:
#include "CDNS.h"
#include "random.h"
#include "CString.h"
#include <WinSock2.h>
#include <Windows.h>
#include <Windns.h>
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "Dnsapi.lib")
CDNS::CDNS() {
m_bSockInited = false;
}
CDNS::~CDNS() {
if (m_bSockInited) {
WSACleanup();
}
}
bool CDNS::InitSock() {
if (!m_bSockInited) {
if (!WSAStartup(MAKEWORD(2, 2), &m_wsaData)) {
m_bSockInited = true;
}
}
return m_bSockInited;
}
unsigned long CDNS::ResolveAddress(const char *szHost) {
if (!m_bSockInited)
return 0;
unsigned long lAddr = inet_addr(szHost);
/*
if (lAddr == INADDR_NONE) {
hostent *pHE = gethostbyname(szHost);
if (!pHE)
return INADDR_NONE;
int iCount = 0;
while (pHE->h_addr_list[iCount])
iCount++;
init_random();
int iHost = brandom(0, iCount - 1);
lAddr = *((unsigned long*) pHE->h_addr_list[iHost]);
}
*/
if (lAddr == INADDR_NONE) {
hostent *pHE = gethostbyname(szHost);
if (!pHE)
return INADDR_NONE;
for (int iHost=0;pHE->h_addr_list[iHost];iHost++) {
CString ip;
for (int i=0;i<4;i++) {
pHE->h_addr_list[iHost][i] & 0x00ff;
if (i > 0) {
printf(".");
}
printf("%d", pHE->h_addr_list[iHost][i] & 0x00ff);
if (3 == i) {
printf("\n");
}
}
}
lAddr = *((unsigned long*) pHE->h_addr_list[0]);
}
return lAddr;
}
测试:
#include <stdio.h>
#include "CDNS.h"
int main()
{
CDNS cdns;
char szHost[20];
if (!cdns.InitSock()) {
return 0;
}
printf("Input domain:\n");
scanf("%s", szHost);
cdns.ResolveAddress(szHost);
return 0;
}
结果:
Input domain:
www.baidu.com
115.239.210.27
115.239.210.26
请按任意键继续. . .