一、实验要求
本次实验主要考察大家的编程能力及子域名的信息收集方法,在文件 夹“Lab1_code”提供了使用 Bing 搜索引擎的域名收集功能。请对该 代码进行扩展,使其可支持百度搜索引擎的域名收集功能。需要实现 如下功能:
- 支持百度搜索引擎的域名提取,其中从百度搜索引擎提取的域名 需为真实域名,而非百度的域名跳转链接;
- 可扩充其他功能,比如域名所在的标题等信息。
二、实验步骤
- 导入模块,分别用来请求网页、处理获取的到的网页源码数据、用于处理url
import requests #用于请求网页
from bs4 import BeautifulSoup #用于处理获取的到的网页源码数据
from urllib.parse import urlparse #用于处理url
- 定义采用百度搜索引擎,同时定义空列表、请求头与请求url
def baidu_search():
Subdomain = [] #定义一个空列表用于存储收集到的子域名
#定义请求头,绕过反爬机制
hearders = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38',
'Accept': '*/*',
'referer':'https://www.baidu/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=site%3Apku.edu&fenlei=256&oq=site%253Awechat&rsv_pq=d3dc168d0016c859&rsv_t=09c89Z6QKcJ4xzJZrwCCrEG%2BhqUFqgggnvrkWjvfq5N%2Bqk8ZXAviJT3HLZY&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_btype=t&inputT=13893&rsv_sug3=21&rsv_sug4=15260',
'cookie':'BAIDUID=9AAFB781E7A495630A3E99603C647298:FG=1; BIDUPSID=7C9932C0E0306D481FA23A4047DAC370; PSTM=1572779713; __yjs_duid=1_26c1cd348283567d4c94df518bbb60851624975916759; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=34443_34380_34144_31254_34004_34524_34585_34092_34106_26350_34557; delPer=0; BD_CK_SAM=1; PSINO=1; H_PS_645EC=09c89Z6QKcJ4xzJZrwCCrEG%2BhqUFqgggnvrkWjvfq5N%2Bqk8ZXAviJT3HLZY; BA_HECTOR=81a18ka584012hakqq1gjk7fi0r; BDSVRTM=10; WWW_ST=1631198807201'
}
#定义请求url
url = "https://www.baidu//s?ie=utf-8&mod=1&isbd=1&isid=d3dc168d0016c859&ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=site%3Apku.edu&fenlei=256&oq=site%253Awechat&rsv_pq=d3dc168d0016c859&rsv_t=09c89Z6QKcJ4xzJZrwCCrEG%2BhqUFqgggnvrkWjvfq5N%2Bqk8ZXAviJT3HLZY&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_btype=t&inputT=13893&rsv_sug3=21&rsv_sug4=15260&bs=site%3Awechat&rsv_sid=undefined&_ss=1&clist=&hsug=&f4s=1&csor=15&_cr1=33613"
resp = requests.get(url,headers=hearders) #访问url,获取网页源码
- 创建BeautifulSoup对象,使用find_all()查找源码中所有返回网址信息的内容
soup = BeautifulSoup(resp.content,'html.parser') #创建一个BeautifulSoup对象,第一个参数是网页源码,第二个参数是Beautiful Soup 使用的 HTML 解析器,
job_bt = soup.find_all("div",class_="result") #find_all()查找源码中所有返回网址信息的内容
- 查找域名并存入域名表
for i in job_bt:
div = i.find("div",class_="f13") #进入有域名的最外面的标签
a_target = div.find("a",class_="c-showurl c-color-gray") #进入含有域名的标签中
link = a_target.text #找到网址原本的域名
name=i.h3.a.string #查a标签的string
#复原原本的域名
link = str("http" + "://" + link)
abstract = i.find("div",class_="c-abstract").text #获取描述
domain = link+"\t"+name+"\n"+"\t"+abstract
if domain in Subdomain: #如果解析后的domain存在于Subdomain中则跳过,否则将domain存入子域名表中
pass
else:
Subdomain.append(domain)
print(domain)
- 域名收集结果(采用pku.edu作为顶级域名)
更多推荐
【网络攻防技术】实验一——域名信息收集
发布评论