1. 程式人生 > >使用libcurl庫把域名轉化IP

使用libcurl庫把域名轉化IP

環境

vs2005及win7

程式碼

int DomainToIP(const char *domain, string &out)
{
	if (domain == NULL)
	{
		return -3;
	}

	//判斷是否本身為ip,為ip直接返回
	int a,b,c,d; 
	int ret=0;
	ret=sscanf(domain,"%d.%d.%d.%d",&a,&b,&c,&d); 
	if(ret==4&&(a>=0&&a<=255)&&(b>=0&&b<=255)&&(c>=0&&c<=255)&&(d>=0&&d<=255)) 
	{ 
		out = domain;
		return 0;
	} 
	CURLcode res;
	CURL *curl;
	char *ipstr=NULL;
	if ((curl = curl_easy_init()) == NULL) {
		curl_global_cleanup();
		return -1;
	}
	if ((curl = curl_easy_init()) == NULL) {
		curl_global_cleanup();
		return -2;
	}
	curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L);
	curl_easy_setopt(curl, CURLOPT_URL,domain); 

	res = curl_easy_perform(curl);
	if (res != CURLE_OK)
	{
		curl_easy_cleanup(curl);
		curl_global_cleanup();
		return res;
	}

	res = curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ipstr);
	if (res != CURLE_OK)
	{
		curl_easy_cleanup(curl);
		curl_global_cleanup();
		return res;
	}
	out=ipstr;

	curl_easy_cleanup(curl);
	curl_global_cleanup();

	return CURLE_OK;
}

編譯及連結libcurl庫

1.加巨集BUILDING_LIBCURL,我使用的是靜態庫

2.要新增庫ws2_32.lib winmm.lib wldap32.lib libcurl.lib,前三個新增要不然會出現連結錯誤