日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python安全攻防---scapy使用

發布時間:2023/12/1 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python安全攻防---scapy使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導入scapy包

from scapy.all import *

構造包

a = Ether()/IP(dst='114.114.114.114')/TCP(dport=80)/應用層數據

我們如果記不得每個包的選項使,可以使用show()來查看

print(a.show())

發送包

  • sr(IP(dst=‘192.168.1.0/24’)/TCP(dport=(1,65535)), timeout=2) :發送三層數據包,等待接收一個或多個數據包的響應(注意:當依次向每個IP的65535個端口發送完才算執行完這個函數,而不是調用一次只發一個包,以下所有發包方式都與之一樣)
  • sr1() :發送三層數據包,并僅僅只等待接收一個數據包的響應
  • srp(Ether(dst=‘11:11:11:11:11:11’)/IP(dst=‘1.1.1.1’)/ICMP()): 發送二層數據包,并且等待回應(這個函數可以編輯二層頭部,sr()不能編輯二層頭部)
  • send():僅僅發送三層數據包,不等待回包(發完就拉倒了)
  • sendp():僅僅發送二層數據包,不等待回包
  • 解析回包

  • sr
  • reply_packet = sr(IP(dst='114.114.114.114')/ICMP(), timeout=2)print(reply_packet) 結果:返回的是元組 (<Results: TCP:0 UDP:0 ICMP:1 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)

    第一個元素為接收到的包,第二個元素為沒有收到的包

    print(reply_packet[0].res) 結果:返回的是列表 [(<IP frag=0 proto=icmp dst=114.114.114.114 |<ICMP |>>, <IP version=4 ihl=5 tos=0x0 len=28 id=32921 flags= frag=0 ttl=75 proto=icmp chksum=0xbb37 src=114.114.114.114 dst=172.20.163.23options=[] |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>)]

    列表里面為所有回包情況,一個元素(元組)為一個回包. 其元組中第一個元素為發送的包,第二個元素為返回的包

    查看回包各項屬性:

    print(reply_packet[0].res[0][1].fields) 結果:返回的是字典類型 {'version': 4, 'ihl': 5, 'tos': 0, 'len': 28, 'id': 56445, 'flags': <Flag 0 ()>, 'frag': 0, 'ttl': 75, 'proto': 1, 'chksum': 24403, 'src': '114.114.114.114', 'dst': '172.20.163.23','options': []}

    到reply_packet[0].res[0][1]這一層就相當于是真正的回包包體了,包體可以用fields屬性(返回字典)和show方法(返回字符串)來查看其內容. 而前面幾層都是對數據包的一些統計描述.

  • sr1
  • reply_packet = sr1(IP(dst='114.114.114.114')/ICMP(), timeout=2)print(reply_packet) 結果:b'E\x00\x00\x1c\xe0\xd8\x00\x00H\x01]\xf8rrrr\xac\x14\xa3\x17\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

    sr1返回的對象沒有太多復雜東西,直接相當于sr返回對象的reply_packet[0].res[0][1],可以理解為sr1返回的對象是sr返回對象的一個子集.

    print(reply_packet.fields) 結果:字典類型{'version': 4, 'ihl': 5, 'tos': 0, 'len': 28, 'id': 19164, 'flags': <Flag 0 ()>, 'frag': 0, 'ttl': 66, 'proto': 1, 'chksum': 63988, 'src': '114.114.114.114', 'dst': '172.20.163.23', 'options': []}

    sr1的reply_packet == sr的reply_packet[0].res[0][1], 所以可以和sr一樣直接用fields來讀取其內容.

  • srp
  • reply_packet = srp(Ether(dst='00:23:89:bb:c7:85')/IP(dst='114.114.114.114')/ICMP())print(reply_packet[0].res[0][1].fields) 結果:返回類型是字典 {'dst': '00:0c:29:d9:3f:63', 'src': '00:23:89:bb:c7:85', 'type': 2048}

    注意:這里默認只給出了二層頭部,可以通過調節res后第三位的值來選擇性查看每層信息,res的第三位[0]表示精確到第幾層,[0]代表二層,[1]進一層到IP層,[2]進一步到傳輸層,[3]進一步到應用層
    例:

    print(reply_packet[0].res[0][1][1].fields) 結果:{'version': 4, 'ihl': 5, 'tos': 0, 'len': 28, 'id': 62339, 'flags': <Flag 0 ()>, 'frag': 0, 'ttl': 67, 'proto': 1, 'chksum': 20557, 'src': '114.114.114.114', 'dst': '172.20.163.23', 'options': []}print(reply_packet[0].res[0][1][2].fields) 結果: {'type': 0, 'code': 0, 'chksum': 65535, 'id': 0, 'seq': 0}print(reply_packet[0].res[0][1][3].fields) 結果:{'load': b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'}

    抓包、分析包

    • prn指向一個回調函數,意為將收到的包丟給prn指向的函數處理(注意:回調的意義!每收到一個包就丟到回調函數里執行一下,執行完了才再跑回來繼續抓包)

    • filter為包過濾規則(語法參照tcpdump過濾規則)

    • store為是否要存儲抓到的包(注意,如果沒有存儲則不會將抓到的包賦值給a,因為沒有存下就沒有東西可以賦,此參數默認開啟)

    • timeout為抓包時長,比如抓30秒就結束(注意:如果沒有指定抓包時長則會一直抓下去,程序會一直卡在這里)

    • iface為指定抓包的網卡

    a = sniff(prn=abc, filter='tcp port 80 and ip 192.168.1.1', store=1, timeout=30, iface='eth0')

    wrpcap('packet.cap', a) ======> 此函數可以將抓到的包存到本地(注意:將包寫入本地不能使用open(‘packet.cap’, ‘r’),因為open函數只能寫入字符串)。

    bbb = rdpcap('/root/桌面/ftp_pcapng.cap') =======> 此函數可以將本地存儲的數據包讀取出來

    for i in bbb: =======> 讀取出來的對象是由N個數據包組成的可迭代對象,每次迭代一個包

    try: ======> 有些包可能沒有要提取的對象,當提取包里沒有的屬性時則會報錯,所以捕獲異常好讓程序繼續往下執行print(i.getlayer('Raw').fields['load'].decode().strip()) ======> 輸出數據包的應用層負載except :continue

    總結

    以上是生活随笔為你收集整理的python安全攻防---scapy使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。