dns
服务器端
bind powerdns dnsmasq
常见的dns记录类型有:
A :ipv4 主机地址
AAAA :IPv6主机地址
NS :权威名称服务器
CNAME :别名
SOA :标记权威区域的开始
PTR :反向dns记录
MX :邮件交换,邮件域名必须要提供反解(可以邮件服务器不进行反解)
TXT :文本字符串一般记录说明信息
SRV :SRV记录是服务器资源记录的缩写,SRV记录的作用是说明一个服务器能够提供什么样的服务!
SRV记录在微软的Active Directory中有着重要地位,因为域内的计算机要依赖DNS的SRV记录来定位域控制器!
客户端
linux:
dig nslookup host
dig +short www.baidu.com
dig +trace www.baidu.com
一般客户端的请求必须递归响应
一般服务器之间的请求为迭代
python:
dnspython
#pip3 install dnspython
例: 查询百度的ip
from dns import resolver
ret = resolver.query('www.baidu.com','A')
for ip in ret:
print(ip)
例: 查询腾讯的邮箱服务器
from dns import resolver
ret = resolver.query('qq.com','MX')
for ip in ret:
print(ip)
requests
http的客户端,可以访问http资源
http协议
0.9版本,只有一作用就是传送文件
1.0 有了响应头及内容
get
post
head
option put delete patch trace
2.*
浏览器: 可以解析http协议
可以分析渲染html文件
后端:
可以使用任意语言,大部分使用java python php javascript
前端:
html 这是一个网页的框架,html格式的纯文本文件
css 层叠样式表,化妆
javascript 是一种浏览器的解释语言(和python,php是一样),主要负责交互
静态文件(图片,视频,音乐,文档)
请求报文
<method> <request-URI> <version> 起始行
<headers> 报文首部
<entity-body> 报文主体
响应报文
<version> <status> <reason-phrase>
<headers>
<entity-body>
爬虫:
本质就是一个http客户端
python写爬虫: scrapy , requests(urllib urllib3)
#pip3 install requests
url :
协议://域名:端口/[路径1/路径2/文件名?name=libai&score=100#锚点]
get请求
http://httpbin.org/
专门用来学习http协议
每个网站的url是不同的,因为这个是专门学习用的,所以它的url特别简单
示例: 发送一个get请求
import requests
req = requests.get(url=‘http://httpbin.org/get’)
print(req.text) 得到请求资源的文本信息
print(req.content) 得到请求资源的二进制数据
print(req.json()) 如果响应的为json格式可以直接将其转化成字典
print(req.status_code) 响应状态码
print(req.headers) 响应头信息
示例: 发送一个get参数给服务器
import requests
# url = 'http://httpbin.org/get?name=libai&password=123456'
url = 'http://httpbin.org/get'
data = {
'name':'libai',
'pass':'123456',
}
# req = requests.get(url=url)
req = requests.get(url=url,params=data)
print(req.text)
示例: requests常用参数
#params get请求传参数
#headers 定制请求头
#timeout 指定超时时间
#verify 当请求的加密时,完全相信对方的身份,不进行CA验证
import requests
url = 'http://httpbin.org/get'
data = {
'name':'libai',
'pass':'123456',
}
headers = {
'User-Agent':r'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
req = requests.get(url=url,params=data,headers=headers,timeout=10,verify=False)
print(req.text)
post请求
因为get请求信息完全暴露并且url上面传的数据量有限,而且不支持文件
示例1: 发送数据
import requests
url = 'http://httpbin.org/post?score=100'
data = {
'name':'libai',
'pass':'123456',
}
headers = {
'User-Agent':r'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
req = requests.post(url=url,data=data,headers=headers,timeout=10,verify=False)
print(req.text)
示例2: 发送文件
import requests
url = 'http://httpbin.org/post?score=100'
data = {
'name':'libai',
'pass':'123456',
}
files = {
'filed1':('c.txt',open('c.txt','r').read()),
'filed2':('a.png',open('abc.png','rb').read(),'image/png'),
}
headers = {
'User-Agent':r'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
req = requests.post(url=url,data=data,headers=headers,timeout=10,files=files)
print(req.text)
使用代理 : 翻墙,防止被封杀
import requests
proxies = {
“http”: “http://10.10.1.10:3128”,
“https”: “http://10.10.1.10:1080”,
}
#如果代理需要账户和密码,则需这样:
#proxies = {
# “http”: “http://user:[email protected]:3128/”,
#}
requests.get(“http://www.baidu.com”, proxies=proxies)
cookie 是保存在浏览器中的一个纯文本文件
示例1: 默认requests是不会保持会话的,即不会每次带着cookie
import requests
url = ‘http://httpbin.org/cookies’
headers = {
'User-Agent':r'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
req = requests.get(url=url,headers=headers,timeout=10)
print(req.text)
url1 = 'http://httpbin.org/cookies/set/name/libai'
req = requests.get(url=url1,headers=headers,timeout=10)
print(req.text)
req = requests.get(url=url,headers=headers,timeout=10)
print(req.text)
示例2: 保持会话
import requests
session = requests.Session()
url = 'http://httpbin.org/cookies'
headers = {
'User-Agent':r'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
req = session.get(url=url,headers=headers,timeout=10)
print(req.text)
url1 = 'http://httpbin.org/cookies/set/name/libai'
req = session.get(url=url1,headers=headers,timeout=10)
print(req.text)
req = session.get(url=url,headers=headers,timeout=10)
print(req.text)