中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Python中的發包收包利器Scapy

發布時間:2021-10-09 15:45:27 來源:億速云 閱讀:230 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關如何使用Python中的發包收包利器Scapy,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

今天跟大家講的是Python 用于發送接受網絡數據包的模塊-------scapy。

前言

眾所周知,我們每天上網都會有很多數據包需要發送,然后處理在接受在發送,這樣一個循環往復的過程,

如何使用Python中的發包收包利器Scapy

這里就顯示了很多數據包的發送接收數據。那么,什么是包呢?下面一起看看。

包(packet)是網絡通信傳輸中的數據單位,一般稱之為數據包,其主要由源地址,目標地址,凈載數據組成。包括包頭和包體,包頭是固定長度,包體長度不變。簡單了解下包的定義,下面我們來看看發包利器scapy的用法吧。(參考資料來源:百度百科-數據包)

一、常用命令

1、ls():顯示所有支持的數據包對象,可帶參數也可不帶,參數可以是任意具體的包。

如何使用Python中的發包收包利器Scapy

可以看出,它包含了全部的內容,如果我們想詳細查看某個模塊中的內容,比如說我想查看ARP ,tcp的話了,可以這樣:

如何使用Python中的發包收包利器Scapy

在這里要告訴大家的是,我們必須要注意大小寫,ls(ARP)這樣才可以得出正確結果,ls(arp)是錯誤的。

2、lsc():列出所有函數

如何使用Python中的發包收包利器Scapy

滿屏的英文,小編我頭都是大的,不知道大家此時此刻是什么樣的心情,哈哈哈哈。

3、hide_defaults():用來刪除一些用戶提供的那些和default value相同的項目

a=IP() print(a.hide_defaults())

4.display():可以簡單查看當前packet的各個參數的取值情況,

a=IP() a.display()

5.更多命令

命令                                  作用 show_interfaces()                  顯示網卡信息  str(pkt)                            組裝數據包  hexdump(pkt)                        十六進制轉儲  ls(pkt)                          顯示出字段值的列表  pkt.summary()                        一行摘要  pkt.show()                      針對數據包的展開視圖  pkt.show2()             顯示聚合的數據包(例如,計算好了的校驗和)  pkt.sprintf()                   用數據包字段填充格式字符串  pkt.decode_payload_as()         改變payload的decode方式  pkt.psdump()                繪制一個解釋說明的PostScript圖表  pkt.pdfdump()                   繪制一個解釋說明的PDF  pkt.command()               返回可以生成數據包的Scapy命令  nsummary()                      同上,但規定了數據包數量  conversations()                     顯示一個會話圖表  filter()                    返回一個lambda過濾后的數據包列表  hexdump()                       返回所有數據包的一個hexdump  import_hexcap()                 將hexdump重新導入到Scapy中  hexraw()                    返回所有數據包Raw layer的hexdump  padding()                   返回一個帶填充的數據包的hexdump  nzpadding()                 返回一個具有非零填充的數據包的hexdump  plot()                      規劃一個應用到數據包列表的lambda函數  make table()                    根據lambda函數來顯示表格  traceroute("baidu.com")     查看IP路徑的traceroute功能  export_object()             數據包轉換成base64編碼的Python數據結構  import_object()                     可以將輸出重新導入  save_session()                  保存所有的session變量  load_session()                  讀取保存的session  fuzz()      更改一些默認的不被計算的值(比如校驗和checksums),更改的值是隨機的,但是是符合字段的值的。

二、嗅探數據包

from scapy.all import * pkt = sniff(iface = "Realtek PCIe GBE Family Controller",count = 3 ,filter='tcp',prn = lambda x: x.sprintf('{IP:%IP.src%->%IP.dst%\n}{Raw:%Raw.load%\n}'))  filter:過濾條件 iface:網卡接口名稱 count:數據包數量 prn:回調函數,通常與lambda搭配使用 sprintf()函數控制輸入信息  抓取源地址為192.168.3.3的端口為80的tcp報文: sniff(filter="ip src 192.168.3.3 and tcp and tcp port 80", prn=lambda x:x.summary())  抓取目的地址網段為192.168.3.3/24的報文: sniff(filter="dst net 192.168", prn=lambda x:x.summary())  抓取非ICMP的報文: sniff(filter="not icmp", prn=lambda x:x.summary())   將抓取到的報文的summary打印出來: sniff(filter="icmp", prn=lambda x:x.summary(), count=10)  將所有IP報文的源地址打印出來: sniff(filter="icmp", prn=lambda x:x[IP].src, count=10)

三、構造數據包

pkt= Ether()/IP(dst='192.168.1.2')/TCP(dport=80)

提到數據包,不得不說各個協議了,提到協議,又自然而然想到了osi七層模型。

OSI七層網絡模型TCP/IP四層概念模型對應網絡協議
應用層(Application)應用層HTTP、TFTP, FTP, NFS, WAIS、SMTP
表示層(Presentation)應用層Telnet, Rlogin, SNMP, Gopher
會話層(Session)應用層SMTP, DNS
傳輸層(Transport)傳輸層TCP, UDP
網絡層(Network)網絡層IP, ICMP, ARP, RARP, AKP, UUCP
數據鏈路層(Data Link)數據鏈路層FDDI, Ethernet, Arpanet, PDN, SLIP, PPP,
物理層(Physical)數據鏈路層IEEE 802.1A, IEEE 802.2到IEEE 802.11

以上便是各個網絡協議對應的osi模型,那么各個協議的用法是怎樣的了,下面我們一起來看下。

四、各個協議用法

1、構造一個 IP 包,并傳入一些參數

#構造一個 IP 包,并傳入一些參數 pkt = IP(dst="192.168.1.2",ttl=10) ls(pkt)   version:版本號 ihl:頭長度 tos:服務類型 len:IP數據包總長 id:標識符 flags:標記 flag:片偏移 ttl:生存時間 proto:協議類型 chksum:頭部校驗 src:源IP地址 dst:目的IP地址 options:可選項

2、構造ARP包

#構造ARP包 ARP(op=1, hwdst="ff:ff:ff:ff:ff:ff", pdst=ip_address) #arp類的構造函數列表: ls(ARP) hwtype     : XShortField          = (1)  值為1表示以太網地址,其它還可能表示令牌環地址 ptype      : XShortEnumField      = (2048)  0x0800表示IP地址,其它還可能是ICMP/IGMP hwlen      : ByteField            = (6)   ARP報文中,它的值為6 plen       : ByteField            = (4)  ARP報文中,它的值為4 op         : ShortEnumField       = (1) 取值為1或者2,代表ARP請求或者響應包。1.ARP請求,2.ARP應答,3.RARP請求,4.RARP應答   hwsrc      : ARPSourceMACField    = (None) 發送方Mac地址。 psrc       : SourceIPField        = (None) 發送方IP地址。 hwdst      : MACField             = ('00:00:00:00:00:00') 目標Mac地址。 pdst       : IPField              = ('0.0.0.0') 目標IP地址。

3、構造Ether

#構造Ether Ether(dst="ff:ff:ff:ff:ff:ff") ls(Ether) dst        : DestMACField         = (None) 目的MAC src        : SourceMACField       = (None) 源MAC type       : XShortEnumField      = (36864) 構造一個以太網數據包通常需要指定目標和源MAC地址,如果不指定,默認發出的就是廣播包ff:ff:ff:ff:ff:ff

4、構造TCP包

#構造TCP包 sport      : ShortEnumField                      = 20              (20) 目標端口 dport      : ShortEnumField                      = 80              (80)  源端口 seq        : IntField                            = 0               (0) ack        : IntField                            = 0               (0) dataofs    : BitField (4 bits)                   = None            (None) reserved   : BitField (3 bits)                   = 0               (0) flags      : FlagsField (9 bits)                 = <Flag 2 (S)>    (<Flag 2 (S)>) window     : ShortField                          = 8192            (8192) chksum     : XShortField                         = None            (None) urgptr     : ShortField                          = 0               (0) options    : TCPOptionsField                     = []              (b'')

五、發包,收包

可分為兩種情況,用法如下:

1、只發不收

send(pkt, inter=0, loop=0, count=1, iface=N)  pkt:數據包 inter:發包間隔時間 count:發包數量 iface:網卡接口名稱  send(),在第三層發包,沒有接收功能;send(IP(dst="www.baidu.com",ttl=2)/ICMP())  sendp(),在第二層發包,沒有接收功能。sr(Ether()/IP(dst="www.baidu.com"))

2、發包且收包

sr()和sr1()都是在第三層發包,sr1表示只接收第一個回復。  sr(IP(dst="www.baidu.com",ttl=(1,4))/TCP(dport=[21,23,80],flags="S")) 返回兩個值  sr1(IP(dst="www.baidu.com",ttl=(1,4))/ICMP())   srloop(IP(dst="www.baidu.com",ttl=1)/ICMP()) #不停的ping百度  srloop(IP(dst="www.baidu.com",ttl=1)/ICMP(),inter=3,count=2) #每隔3秒ping一次,一共執行兩次  #inter表示間隔,count記錄次數  srp()和srp1()都是根據第二層發包,srp1表示只接收第一個回復 srp(Ether()/IP(dst="www.baidu.com")) srp1(Ether()/IP(dst="www.baidu.com"))

六、SYN半開式掃描

當TCP鏈接指定端口時,flags參數設為S時則為半開式掃描,若此時該端口處于監聽狀態,返回syn/ack,否則返回rst/ack.

sr1(IP(dst="192.168.1.2")/TCP(dport=80,flags="S"))

七、數據包序列化,反序列化

序列化:將數據包對象保存為pcap文件

反序列化:讀取pcap文件中的內容

pkt= Ether()/IP(dst='192.168.1.2')/TCP(dport=80) #將嗅探到的數據包內容寫到pcap文件中  wrpcap("hw.pcap",pkt)  #讀取pcap文件。 read=rdpcap('hw.pcap') print(read[1])#打印嗅探到的包的數據

八、數據包與字符串轉換

更加直觀清晰的分析數據。

zfc= str(pkts[0])  z= Ether(zfc)

九、導入導出base64編碼

為了方便我們對數據進行加密而發明的一種方式。

export_object(str(pkts[0])) 導出數據包 new_Pkt = import_object() #將上一步導出的字符串填入

十、離線數據包的解析

如果我們捕獲到數據包,未聯網的情況下如何解析呢?

現在就可以使用我們的離線數據包分析數據了:

sniff(offline = "hw.pcap")#離線數據包

通過上面的學習,我們對scapy算是有了一個基礎性的認識了,scapy的確很強大,簡單的幾行命令就能實現發包收包,極大的節省了我們的開發時間。如果你深入學習它的每個命令,你會發現更多有趣的事情,當然這么強大的工具可不要拿來做壞事哦!!

關于如何使用Python中的發包收包利器Scapy就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

惠州市| 横峰县| 博野县| 时尚| 通海县| 仁布县| 邵阳市| 永州市| 邵武市| 武川县| 来凤县| 墨江| 莆田市| 商洛市| 平原县| 册亨县| 博湖县| 鹤壁市| 新邵县| 九龙坡区| 都兰县| 奉贤区| 通河县| 磐石市| 广昌县| 榆树市| 正镶白旗| 金寨县| 永嘉县| 洛阳市| 呼玛县| 呼和浩特市| 南宫市| 大兴区| 巨野县| 黑河市| 汨罗市| 连山| 濮阳县| 保亭| 潞城市|