python安全攻防---scapy使用

導入scapy包

from scapy.all import *

構造包

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

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

print(a.show())

發送包

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

解析回包

  1. 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方法(返回字符串)來查看其內容. 而前面幾層都是對數據包的一些統計描述.

  1. 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來讀取其內容.

  1. 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379840.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379840.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379840.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

唉!

學習到后面時&#xff0c;再返回看了一下前面學過的&#xff0c;發現以前學過&#xff0c;看不懂的東西現在能看懂了…… &#xff01;不過 為什么在剛學時就是不懂&#xff0c;這樣 不就老是慢一拍嗎&#xff1f;唉&#xff01;&#xff01;轉載于:https://www.cnblogs.com/ni…

Java—— TCP協議(相關代碼實現以及相關優化)

代碼運行的時候先運行服務端&#xff0c;然后在運行客戶端 * TCP協議&#xff1a;* 1&#xff0c;客戶端* 創建Socket連接服務器(指定IP地址&#xff0c;端口號)通過IP地址找到對應的服務器* 調用Socket的getInputStream()和getOutputStream()方法獲取和服務器端相連…

什么是adsense 想通過廣告掙錢的看過來

Adsense的含義Google AdSense是由Google公司推出的針對網站主&#xff08;簡稱發布商&#xff09;的一個互聯網廣告服務。AdSense是個合成詞。其中ad是“廣告”之意&#xff0c;sense是“感知”之意&#xff0c;綜合起來的意思就是相關廣告。Google通過程序來分析網站的內容&am…

Java GregorianCalendar getTimeZone()方法與示例

GregorianCalendar類的getTimeZone()方法 (GregorianCalendar Class getTimeZone() method) getTimeZone() method is available in java.util package. getTimeZone()方法在java.util包中可用。 getTimeZone() method is used to return the time zone for this GregorianCale…

python安全攻防---信息收集---ICMP主機探測 以及optionparser的使用

0x01 基礎概念 ICMP&#xff08;Internet control Message Protocal&#xff09;Internet報文協議&#xff0c;是TCP/IP的一種子協議&#xff0c;屬于網絡層協議&#xff0c;其目的是用于在IP主機、路由器之間傳遞控制信息 0x02 程序 程序 # -*- coding:utf-8 -*- from sca…

PHP文件系統-文件下載

一、網頁請求和響應的過程 請求&#xff1a; 1. HTTP 1.1 協議 版本 2. 頭信息&#xff0c;請求的ip&#xff0c;其他 3. 你請求的表單信息, 你提交給服務器的信息 http://localhost/one.php?aabbb&cccdd 響應&#xff1a; 1. 狀態 200 ok 404 頁面沒找到 2. 響應頭信息&a…

Java——網絡編程練習

練習一(黑馬程序員面試題)&#xff1a;客戶端向服務器寫字符串(鍵盤錄入)&#xff0c;服務器(多線程)將字符串反轉后寫回&#xff0c;客戶端再次讀取到的是反轉后的字符串 相關代碼如下&#xff1a; package com.wsq.test;import java.io.BufferedReader; import java.io.Buf…

第一章 基礎知識---1.4Crack小實驗--復現

0x01 程序及其編譯環境 程序如下&#xff0c;功能&#xff1a;我們必須輸入正確的密碼1234567才能得到密碼驗證的確認&#xff0c;跳出循環。否則程序提示密碼錯誤再次輸入。 #include <stdio.h>#define PASSWORD "1234567"int verify_password(char* passwo…

.net中調用exchange服務器發郵件

普通的郵件, 用System.Net.Mail 類 或 System.Web.Mail 類 處理即可, 但是Exchange Server 環境下, 這兩個類起不了作用-------至少目前我看到的情況如此. 整個過程如下: 1. 先添加COM 引用 "Microsoft CDO for Windows 2000 Library" .2. 發送郵件的代碼: CDO.Messa…

Java Double類doubleToLongBits()方法與示例

Double類doubleToLongBits()方法 (Double class doubleToLongBits() method) doubleToLongBits() method is available in java.lang package. doubleToLongBits()方法在java.lang包中可用。 doubleToLongBits() method follows IEEE 754 double floating-point standards and …

Firefox(火狐瀏覽器)彩蛋

①在地址欄上輸入&#xff1a; about:mozilla ②在地址欄上輸入&#xff1a; about:robots ③在地址欄上輸入&#xff1a; www.figma.com/404/ ④地址欄上輸入&#xff1a; chrome://global/content/alerts/alert.xul

jquery.history插件在ie中失效的問題

hash標志中不能有? ff中不存在這個問題。 轉載于:https://www.cnblogs.com/xyun/archive/2008/12/01/1345188.html

Java——反射(Class.forName()讀取配置文件舉例).

榨汁機(Juicer)榨汁機的案例&#xff1a; 分別有水果(Fruit),蘋果(Apple)&#xff0c;香蕉(Bananal)&#xff0c;橘子(Orange),榨汁(squeeze) 要求&#xff1a; 榨出不同的水果汁來喝 //一般方法求解 package com.testl;public class Text1 {public static void main(Strin…

java 根據類名示例化類_Java類類getEnclosingClass()方法及示例

java 根據類名示例化類類的類getEnclosingClass()方法 (Class class getEnclosingClass() method) getEnclosingClass() method is available in java.lang package. getEnclosingClass()方法在java.lang包中可用。 getEnclosingClass() method is used to return recent or im…

C++:cin.getline

轉&#xff1a;百度百科 http://baike.baidu.com/view/2383876.htm cin.getline 此函數是按行讀取,其語法為:cin.getline(字符指針,字符個數N,結束符); 功能是&#xff1a;一次讀取多個字符(包括空白字符&#xff09;&#xff0c;直到讀滿N-1個&#xff0c;或者遇到指定的結束符…

端口復用和重映射--STM32F103

什么是端口復用&#xff1f; STM32中有很多內置外設&#xff0c;這些外設的引腳都是與GPIO復用的&#xff0c;什么時候復用呢&#xff1f;就是當一個GPIO作為內置外設引腳使用時&#xff0c;就叫做復用。比如串口1的發送接收引腳是PA9&#xff0c;PA10&#xff0c;當PA9&#…

考研數學

眼前儼然一副冬的氣象&#xff0c;伴隨氣溫的驟降&#xff0c;考研復習也進入異常緊張的階段。在考試前這兩個月里&#xff0c;考生如何復習數學&#xff0c;成績還可以有所提高。萬學?海文數學教研組針對沖刺階段數學復習歸納總結以下復習經驗和建議&#xff0c;供大家參考。…

一個很好的自學網站~推薦一下

http://www.51zxw.net/study.asp?vip15746908

[轉]Ubuntu遠程桌面登陸

原文地址&#xff1a;http://www.cnblogs.com/xdzone/archive/2011/03/10/1979644.html 1.xp下默認的遠程桌面協議是rdp&#xff0c;默認端口3389&#xff0c;而ubuntu用的時vnc&#xff1a;默認端口5900 2.首先被訪問的主機&#xff08;windows/linux&#xff09;都要設置為允…

NVIC中斷管理---STM32

NVIC&#xff1a;嵌套向量中斷控制器 在了解中斷之前&#xff0c;我們先了解搶占優先級和響應優先級 搶占優先級和響應優先級 搶占優先級決定能不能打斷&#xff0c;高優先級的搶占可以中斷低優先級的搶占響應優先級在搶占優先級相同時&#xff0c;高響應優先級先執行&#x…