zoukankan      html  css  js  c++  java
  • 基于visual c++之windows核心编程代码分析(55)使用GoogleUrl方便安全地解析URL

    我们在进行google搜索的时候,google为了安全起见,经常对于URL通过谷歌的安全过滤,以过滤网络木马,如下图

    下面我们来亲自实践,基于VC++来实现使用GoogleUrl方便安全地解析URL

    #include "stdafx.h"
    #include "googleurl\src\gurl.h"
    
    
    void testURL(const char* lpszUrl)
    {
    	char szDomain[256];
    	char szUrlPath[256];
    	szDomain[0] = 0;
    	szUrlPath[0] = 0;
    
    	const char *szStart = NULL;
    	const char *szPathStart = NULL;
    
    	if (strnicmp(lpszUrl, "http://", 7) == 0)
    	{
    		//http开头
    		szStart = lpszUrl + 7;
    	} else if (strnicmp(lpszUrl, "https://", 8) == 0) {
    		//https开头
    		szStart = lpszUrl + 8;
    	} else {
    		szStart = lpszUrl;
    	}
    
    	szPathStart = strstr(szStart, "/");
    	if (szPathStart)
    	{
    		strcpy(szUrlPath, szPathStart);
    	}
    	strncpy(szDomain, szStart, szPathStart - szStart);
    	szDomain[szPathStart - szStart] = 0;
    
    	printf("%s\nDomain: %s\nPath: %s\n", lpszUrl, szDomain, szUrlPath);
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	std::cout << std::endl << "testURL" << std::endl;
    	testURL("http://www.baidu.com/index.html");
    	//testURL("http://www.ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ.com/index.html?ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
    	
    	//GoogleUrl
    	std::cout << std::endl << "GoogleUrl" << std::endl;
    	GURL gurl("http://user:123456@foo.tengattack.com:8080/index.php?action=init");
    
    	std::cout<< "URL: " << gurl << std::endl << std::endl;
    
    	//得到域名\主机地址
    	std::cout << "host() -> " << gurl.host() << std::endl;
    	//得到端口号
    	if (gurl.has_port())
    		std::cout << "port() -> " << gurl.port() << std::endl;
    	//得到query
    	if (gurl.has_query())
    		std::cout << "query() -> " << gurl.query() << std::endl;
    
    	//得到用户名密码
    	if (gurl.has_username())
    		std::cout << "username() -> " << gurl.username() << std::endl;
    	if (gurl.has_password())
    		std::cout << "password() -> " << gurl.password() << std::endl;
    
    	//得到文件名
    	std::cout << "ExtractFileName() -> " << gurl.ExtractFileName() << std::endl;
    	//这个也是端口号,与port()的区别就是就算没有指定端口号默认会返回HTTP 80端口
    	std::cout << "EffectiveIntPort() -> " << gurl.EffectiveIntPort() << std::endl;
    
    	//判断域名是否为IP地址
    	std::cout << "HostIsIPAddress() -> " << gurl.HostIsIPAddress() << std::endl;
    
    	std::cin.get();
    	return 0;
    }
    


     

  • 相关阅读:
    set&enum小结(database)
    bootstrap基础
    看一篇,学一篇,今日份的pandas,你该这么学!No.2
    Python数据分析库之pandas,你该这么学!No.1
    面试Python工程师,这几道编码题有必要背背,Python面试题No8
    周三面试Python开发,这几道Python面试题差点答错,Python面试题No7
    昨天去面试,这5个Python面试题都被考到了,Python面试题No6
    2019年,Python工程师必考的6个面试题,Python面试题No5
    去面试Python工程师,这几个基础问题一定要能回答,Python面试题No4
    学习Python一年,基础忘记了,看看面试题回忆回议,Python面试题No3
  • 原文地址:https://www.cnblogs.com/new0801/p/6177770.html
Copyright © 2011-2022 走看看