【网络攻防技术】实验1:域名信息收集工具

实验1:域名信息收集工具

实验内容:
本次实验主要考察大家的编程能力及子域名的信息收集方法,在文件夹“Lab1_code”提供了使用Bing搜索引擎的域名收集功能。请对该代码进行扩展,使其可支持百度搜索引擎的域名收集功能。需要实现如下功能:
a) 支持百度搜索引擎的域名提取,其中从百度搜索引擎提取的域名需为真实域名,而非百度的域名跳转链接;
b) 可扩充其他功能,比如域名所在的标题等信息。

示例:bing搜索qq.com的子域名

#本次实验内容主要为:收集baidu.com域名下的子域名,
#收集方法为使用bing搜索引擎,采用爬手段,爬取搜索到的域名
 bing搜索引擎搜索子域名的语法为:domain:[域名]
import requests                          #用于请求网页
from bs4 import BeautifulSoup            #用于处理获取的到的网页源码数据
from urllib.parse import urlparse        #用于处理url

#定义一个采用bing搜索的方法
def bing_search():
    Subdomain = []           #定义一个空列表用于存储收集到的子域名
    #定义请求头,绕过反爬机制
    hearders = {
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.56',
        'accept':'*/*',
        'referer':'https://cn.bing.com/search?q=domain%3abaidu.com&qs=HS&pq=domain%3a&sc=10-7&cvid=B99CC286861647E79EF504A4D5B819F1&FORM=QBLH&sp=1',
        'cookie':'MUID=15F7A3347F9B66091BBBAC017EB56733'
    }
    #定义请求url
    url = "https://cn.bing.com/search?q=domain%3aqq.com&qs=n&sp=-1&pq=domain%3abaidu.com&sc=0-16&sk=&cvid=E6DAE965B2BD4FDC8DF857015E0499C1&first=9&FORM=PQRE1"
    resp = requests.get(url,headers=hearders)           #访问url,获取网页源码
    print("\n")
    print(type(resp))
    soup = BeautifulSoup(resp.content,'html.parser')    #创建一个BeautifulSoup对象,第一个参数是网页源码,第二个参数是Beautiful Soup 使用的 HTML 解析器,
    job_bt = soup.find_all('h2')                        #find_all()查找源码中所有

标签的内容 for i in job_bt: print("i\n") print(type(i)) print("i.a\n") print(type(i.a)) link = i.a.get('href') #循环获取‘href’的内容 #urlparse是一个解析url的工具,scheme获取url的协议名,netloc获取url的网络位置 domain = str(urlparse(link).scheme + "://" + urlparse(link).netloc) if domain in Subdomain: #如果解析后的domain存在于Subdomain中则跳过,否则将domain存入子域名表中 pass else: Subdomain.append(domain) print(domain) bing_search()

实验环境:
vscode
python 3.7.7
实验步骤及结果
1.运行Sub_Domain_Search.py,得到运行结果。
2. . 绕过反爬机制 【网络攻防技术】实验1:域名信息收集工具_第1张图片观察bing_search的headers,图中referer是在bing中搜索domain:qq.com的结果,需要将其改为在百度中搜索domain:qq.com的结果;并将cookie改为自己的浏览器发送报文时候的cookie.
结果如图:
【网络攻防技术】实验1:域名信息收集工具_第2张图片

3.修改url
在这里插入图片描述
图中网址是在bing中搜索domain:qq.com的结果,需要换成百度的:
结果如图:
在这里插入图片描述

4.修改源码处理方式:
在这里插入图片描述
【网络攻防技术】实验1:域名信息收集工具_第3张图片

图中代码和在bing搜索domain:qq.com检查元素的标签一致,需要换成百度中的,即把h2换成h3
【网络攻防技术】实验1:域名信息收集工具_第4张图片

修改如图:
在这里插入图片描述

运行结果:
在这里插入图片描述
发现源码中的链接是由百度跳转到我们要的网址的
尝试把全部链接显示出来,在打印的url后面加path、params、query
在这里插入图片描述
运行结果:
【网络攻防技术】实验1:域名信息收集工具_第5张图片现在我们需要把它们转换为重定向后的url。
在这里插入图片描述改回原来的url打印方式: 在这里插入图片描述
成功获得子域名:
【网络攻防技术】实验1:域名信息收集工具_第6张图片
5.扩展功能——打印子域名的标题:
【网络攻防技术】实验1:域名信息收集工具_第7张图片
【网络攻防技术】实验1:域名信息收集工具_第8张图片
最终代码:


# 本次实验内容主要为:收集baidu.com域名下的子域名,
# 收集方法为使用bing搜索引擎,采用爬手段,爬取搜索到的域名
# bing搜索引擎搜索子域名的语法为:domain:[域名]
import requests                          #用于请求网页
from bs4 import BeautifulSoup            #用于处理获取的到的网页源码数据
from urllib.parse import urlparse        #用于处理url
import urllib
#定义一个采用bing搜索的方法
def baidu_search():
    Subdomain = []           #定义一个空列表用于存储收集到的子域名
    #定义请求头,绕过反爬机制
    hearders = {
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.56',
        'accept':'*/*',
        'referer':'https://www.baidu.com/s?ie=UTF-8&wd=domain%3Abaidu.com',
        'cookie':'<你浏览器的cookie,别人的可用cookie也行>',
        'Connection':'close'
    }
    #定义请求ul
    # url = "https://www.baidu.com/s?ie=UTF-8&wd=domain%3Aqq.com"
    url="https://www.baidu.com/s?ie=UTF-8&wd=domain%3Aqq.com&qq-pf-to=pcqq.c2c"
    resp = requests.get(url,headers=hearders)           #访问url,获取网页源码
    
    soup = BeautifulSoup(resp.content,'html.parser')    #创建一个BeautifulSoup对象,第一个参数是网页源码,第二个参数是Beautiful Soup 使用的 HTML 解析器,
    job_bt = soup.find_all('h3')                        #find_all()查找源码中所有

标签的内容 for i in job_bt: link0 = i.a.get('href') #循环获取‘href’的内容 link=urllib.request.urlopen(link0).geturl() #urlparse是一个解析url的工具,scheme获取url的协议名,netloc获取url的网络位置 domain = str(urlparse(link).scheme + "://" + urlparse(link).netloc) if domain in Subdomain: #如果解析后的domain存在于Subdomain中则跳过,否则将domain存入子域名表中 pass else: Subdomain.append(domain) print(domain) #接下来打印title source = requests.get(domain,headers=hearders) #访问url,获取网页源码 # print(resp.content) soup = BeautifulSoup(source.content,'html.parser') title0 = soup.find('head') title= title0.title.getText() #getText函数获取标签文本 print(title) baidu_search()

你可能感兴趣的:(攻防,搜索引擎,爬虫)