使用libcurl库把域名转化IP

原创 2015年07月10日 17:42:45

环境

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,前三个添加要不然会出现链接错误


libcurl 一旦出现连接失败后,后续请求该域名,DNS则不会重新解析该域名(libcurl-7.35.0)

在使用 multi interface过程中,出现了一个问题。/etc/hosts中某域名的 ip下架了,然后修改为最新的 ip, 但是程序请求该域名解析出来的IP依旧是之前已经下架了得 ip地址。...

curl获取站点的各类响应时间(dns解析时间,响应时间,传输时间)

有时候为了测试网络情况,需要返回每个阶段的耗时时间,比如DNS解析耗时,建立连接所消耗的时间,从建立连接到准备传输所使用的时间,从建立连接到传输开始所使用的时间,整个过程耗时,下载的数据量,下载速度,...

安全使用libcurl的正确姿势

安全使用libcurl的正确姿势 在我们的项目中,数次遇到 libcurl 导致的应用程序崩溃问题,这里总结了一下使用 libcurl 的正确姿势。 1: #include 2: #in...
  • xuheazx
  • xuheazx
  • 2016年09月28日 12:07
  • 1187

libcurl的share interface与curl_easy_perform的性能

最近在使用libcurl实现客户端程序和http server通讯功能的时候,发现libcurl的性能不好。 具体情况是我在每次http连接时初始化一个新的curl handle,参数设置完成后,调...

关于使用libcurl的注意事项

1. libcurl与CLOSE_WAIT 转载自:http://blog.sunshow.net/2010/03/libcurl-and-close-wait/ 调用libcurl下载,...

libcurl,多线程,gzip,共享DNS

转载 http://hi.baidu.com/jjxiaoyan/item/e17b9ec3e31b93d4964452d8 libcurl是一个不错的socket库,而且又是开源的。如果...

curl 使用详解

cURL.1 手册页 名称 cURL - transfer a URL 摘要 cURL[选项] [URL... ] 描述 cURL 是一个向服务器或从服务器传输...

libcurl之curl_easy_getinfo的使用教程

Code: // getinfo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; #includ...
  • php_fly
  • php_fly
  • 2013年12月06日 19:22
  • 10317

php curl 请求302跳转页面

若请求url已改变且设置了自动跳转,可通过设置 CURLOPT_FOLLOWLOCATION 参数实现自动请求跳转链接。若要手动判断是否跳转,可通过 curl_getinfo($ch) 方法获取具...

#C++#通过libcurl获取当前次HTTP请求的一些相关信息

libcurl库是一个非常完整和好用的HTTP请求库,通过它,我们可以方便的书写HTTP请求程序,而且不需要关心HTTP协议内部的细节处理。 最近在做一个HTTP监测的程序,就是通过li...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用libcurl库把域名转化IP
举报原因:
原因补充:

(最多只允许输入30个字)