存档在 ‘【技术】’ 分类

怎样使用Python抽取各级域名

2018年6月13日

【介绍】

在分析日志及数据分析的时候,会遇到一些url抽取域名信息的需求。虽然urlparse可以把所有的域名给提取出来,但是不能精确到一级域名,二级域名,x级域名。

ExtractLevelDomain模块可以取顶级域名的模块,当然也可以提取二级,三级。

因为库里有大量的子域名,所以只需要对同顶级域名的其中一个域名获取信息即可,否则会造成数据库大量冗余信息,而且在后期更新的时候还会造成系统及网络不必要的压力。

官网:http://xiaorui.cc/2015/11/06/%E4%BD%BF%E7%94%A8python%E8%A7%A3%E6%9E%90%E6%8A%BD%E5%8F%96url%E4%B8%AD%E5%90%84%E7%BA%A7%E5%9F%9F%E5%90%8D%E4%BF%A1%E6%81%AF/
官网:https://github.com/rfyiamcool/ExtractLevelDomain
官网:https://pypi.org/project/ExtractLevelDomain/
参考:http://www.vuln.cn/8567

【安装】

PIP安装:

pip install ExtractLevelDomain

源码安装:

git clone https://github.com/rfyiamcool/ExtractLevelDomain.git && cd ExtractLevelDomain && python setup.py install

【使用】

import ExtractLevelDomain
filter = ExtractLevelDomain.ExtractLevelDomain()

#普通抽取域名,默认是最多匹配
print filter.parse_url('http://dmp.301.xiaorui.cc/redirect/xiaorui.cc')

#parse_url_level可以控制level级,可接收的参数两种参数 1 2 3 或"*"
print filter.parse_url_level('http://dmp.301.xiaorui.cc/redirect/xiaorui.cc',level=2)

#set_level设置level级别
filter.set_level(1)
print filter.parse_url_level('http://dmp.301.xiaorui.cc/redirect/xiaorui.cc',level=1)

#现实Level级别
print filter.level

怎样安装dnsmap

2018年6月13日

dnsmap 主要用来在渗透测试的信息收集阶段来协助测试网络的基础设施的安全性,它能发现目标的网段,域名,甚至是电话号码等等。
子域名穷举在穷举子域名方面也是一项新的技术,尤其是在zone transfer技术失效的时候。

是跟dnsenum类似的域名信息收集工具:dnsenum是一款非常强大的 域名信息收集工具,它是由参与backtrack 开发项目的程序员所设计,设计者名叫Fillp (barbsie) Waeythens ,该名开发者是一个精通web渗透测试的安全人员,并对DNS信息收集有着非常丰富的经验。dnsenum的目的是尽可能收集一个域的信息,它能够通过谷歌或者字典文件猜测可能存在的域名,以及对一个网段进行反向查询。它可以查询网站的主机地址信息、域名服务器、mx record(函件交换记录),在域名服务器上执行axfr请求,通过谷歌脚本得到扩展域名信息(google hacking),提取自域名并查询,计算C类地址并执行whois查询,执行反向查询,把地址段写入文件。

官网:https://dnsmap.io/

参考:https://yq.aliyun.com/articles/392470
参考:http://kalitools.com/2016/07/02/dnsmap/
参考:http://www.vuln.cn/6982
参考:http://www.cnblogs.com/tk091/archive/2012/09/27/2705598.html
参考:https://yq.aliyun.com/articles/452440?spm=a2c4e.11153940.blogcont392470.18.5e973144pMW55K

怎样安装DNSmasq

2018年6月13日

DNSmasq是一个轻巧的,容易使用的DNS服务工具,它可以应用在内部网和Internet连接的时候的IP地址NAT转换,也可以用做小型网络的DNS服务.

它可以提供如下几个实用的功能:
1 提供dns服务
2 优先使用本地自定义dns
3 提供dhcp服务

参考:http://heqingfei2007.blog.163.com/blog/static/46392933201131155428761/

怎样使用Python抓取WHOIS字典

2018年6月13日

参考:http://www.cnblogs.com/zhangmengqin/p/9167358.html

1. 各个域名后缀的whois server可能不一样,可能一样。
2. 各个whois server的whois格式 可能不一样,可能一样。

标题:有全世界各种后缀的whois server
网址:https://www.iana.org/domains/root/db

意图:使用Python爬虫,抓取whois server资料,在本地做成字典;使用时匹配这个字典的key就可以获取对应的whois server进行查询。
工具:BeautifulSoup,好处就是不用自己写正则,只要根据他的语法

1. 抓取域名后缀列表

import requests
from bs4 import BeautifulSoup
iurl = 'https://www.iana.org/domains/root/db'
res = requests.get(iurl,timeout=600)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text,'html.parser')
list1=[]
list2=[]
jsonStr={}
for tag in soup.find_all('span', class_='domain tld'):
	d_suffix = tag.get_text()
	print(d_suffix)

2. 抓取域名后缀对应的whois server列表

import requests
from bs4 import BeautifulSoup
import re
import time
iurl = 'https://www.iana.org/domains/root/db'
res = requests.get(iurl,timeout=600)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text,'html.parser')
list1=[]
list2=[]
jsonStr={}
for tag in soup.find_all('span', class_='domain tld'):
	d_suffix = tag.get_text()
	print(d_suffix)
	list2.append(d_suffix)
	n_suffix = d_suffix.split('.')[1]
	new_url = iurl + '/' + n_suffix
	server=''
	try:
		res2=requests.get(new_url,timeout=600)
		res2.encoding='utf-8'
		soup2= BeautifulSoup(res2.text,'html.parser')
		retxt = re.compile(r'<b>WHOIS Server:</b> (.*?)\n')
		arr = retxt.findall(res2.text)
		if len(arr) > 0:
			server = arr[0]
			list2.append(server)
		print(server)
		time.sleep(1)
	except Exception as e:
		print('超时')
	with open('suffixList.txt', "a",encoding='utf-8') as my_file:
		my_file.write(n_suffix + ":" + server+'\n')
print('抓取结束!!!')

本程序执行时间较长,可选择后台驻留执行:

nohup python servers.py &

3. 输入任何一个后缀的域名查询whois信息

temp = input('请输入你要查询的域名:')
result = temp.split('.')[0]
result1=temp.split('.')[1]
r_suf='.'+result1
print(type(r_suf))
# print(result)
print(r_suf)

# d = json.dumps(dictionary)
whois_server =dictionary.get(r_suf)
print(whois_server)
print(type(whois_server))

if whois_server is None:
	print(r_suf + '此后缀出小差啦~')
else:

	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.connect((whois_server, 43))
	temp=( temp +'\r\n').encode()
	s.send(temp)
	response = b''
	while True:
		data = s.recv(4096)
		response += data
		if not data:
			break
	s.close()
	print(response.decode())

怎样使用Python socket套接字模块

2018年6月13日

参考:http://www.iplaypy.com/module/socket.html

标题:python通过socket查询whois的方法
参考:http://www.aspku.com/tech/jiaoben/python/57419.html
测试:

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(('whois.networksolutions.com', 43)) 
s.send('sina.com.cn \r\n') 
while 1: 
v = s.recv(1024) 
if v == '' or v == None:
break
print v
s.close()

标题:python通过socket查询whois的方法
参考:http://www.cnblogs.com/zhangmengqin/p/9144022.html
测试:Py3.6实证成功

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('whois.internic.net', 43))
s.send(b"sina.com.cn \r\n")
response =b''
while True:
	data = s.recv(4096)
	response += data
	if not data :
		break
s.close()
print (response.decode())

标题:python通过socket查询whois的方法
参考:http://www.aichengxu.com/python/1256124.htm
测试:Py3.6实证成功

from socket import *

HOST = '202.12.29.220'
PORT = 43
BUFSIZ = 1024
ADDR = (HOST, PORT)
EOF="\r\n"
request_ip="219.146.3.110"

data_send=request_ip+EOF
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
tcpCliSock.send(data_send)

while True: 
    data_rcv = tcpCliSock.recv(BUFSIZ)
    if not len(data_rcv):
        break  
    print data_rcv

tcpCliSock.close()