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)