日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Scapy:強(qiáng)大的Python網(wǎng)絡(luò)包解析庫

概述

Scapy 是一個(gè)用于對(duì)底層網(wǎng)絡(luò)數(shù)據(jù)包的Python模塊和交互式程序,該程序?qū)Φ讓影幚磉M(jìn)行了抽象打包,使得對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的處理非常簡便。該類庫可以在在網(wǎng)絡(luò)安全領(lǐng)域有非常廣泛用例,可用于漏洞利用開發(fā)、數(shù)據(jù)泄露、網(wǎng)絡(luò)監(jiān)聽、入侵檢測和流量的分析捕獲的。Scapy與數(shù)據(jù)可視化和報(bào)告生成集成,可以方便展示起結(jié)果和數(shù)據(jù)。Scapy的基本理念是提出一個(gè)基于領(lǐng)域特定語言,從而輕松快速地進(jìn)行有線格式(Wire Format)管理。

安裝運(yùn)行

Scapy可以通過pip安裝:

pip install scapy

也可以通過發(fā)行版的包管理器安裝,比如yum,但是其版本可能太老已經(jīng)過時(shí)。也可以通過直接從官方倉庫clone源碼安裝:

git clone github /secdev/scapy

然后,可以可以簡單地運(yùn)行:

cd scapy
./run_scapy

用法示例

解析PCAP抓包

用Scapy做的最簡單的事情就是讀取PCAP文件。讓我們下載Wireshark的sip-rtp-opus-hybrid.pcap 示例PCAP數(shù)據(jù)包為例子:用rdpcap()函數(shù)引入PCAP文件,讀取其內(nèi)容的函數(shù):

>>> pkts = rdpcap("sip-rtp-opus-hybrid.pcap")
>>> pkts

為了更詳細(xì)讀取PCAP文件中的數(shù)據(jù),可以使用PcapReader從打開的文件句柄中迭代地讀取數(shù)據(jù)包,一次一個(gè)包,bing實(shí)例化的對(duì)象:

>>> fd = open("sip-rtp-opus-hybrid.pcap", "rb")
>>> reader = PcapReader(fd)
>>> reader

>>> for CC in reader:
...: print(CC)
...:

>>> fd.close()

如上面所示,每個(gè)數(shù)據(jù)包都以有線格式提供。Scapy 將每個(gè)數(shù)據(jù)包以網(wǎng)絡(luò)層的堆棧。Scapy層對(duì)象對(duì)應(yīng)于網(wǎng)絡(luò)協(xié)議及其格式。獲取第一個(gè)數(shù)據(jù)包并檢查IP層是否可用:

>>> first= CC[0]
>>> first.haslayer(IP)
True
>>> IP in first
True

要解析來自特定層的數(shù)據(jù)包,可按想要的層對(duì)其進(jìn)行索引,并讓Scapy打印所有字段:

要以十六進(jìn)制打印數(shù)據(jù)包,可以使用hexdump()功能:>>> hexdump(first)

為了完全解析和完美地輸出一個(gè)數(shù)據(jù)包,需要調(diào)用show()方法:>>> first.show()

可以看到,上面未能有效地解析SI負(fù)載。這是因?yàn)镾capy主要處理二進(jìn)制協(xié)議 網(wǎng)絡(luò)堆棧的較低部分,而SIP不是。但是可以引入第三方模塊來解析一些應(yīng)用層協(xié)議,比如HTTP協(xié)議。

實(shí)時(shí)抓包解析

比如可以讀取帶有預(yù)先捕獲的數(shù)據(jù)包的PCAP文件,如果要做一些數(shù)據(jù)包嗅探,如果系統(tǒng)準(zhǔn)備好在混雜模式下使用網(wǎng)絡(luò)接口,可以調(diào)用sniff()從網(wǎng)卡獲取一些數(shù)據(jù)包的函數(shù):

>>> for CC in sniff(count=5):
...: CC.show()
...:

Scapy中也可以使用和Wireshark(tshark)、tcpdump 相同BPF語法來過濾嗅探到的數(shù)據(jù)包和許多其他工具支持:

>>> for CC in sniff(filter="udp", count=5):
...: CC.show()
...:

要將捕獲的數(shù)據(jù)包保存到 PCAP 文件中以供進(jìn)一步分析,可以使用wrpcap()函數(shù)來導(dǎo)出到文件:

>>> capture = sniff(filter="udp", count=5)
>>> capture

>>> wrpcap("udp.pcap", capture)

發(fā)送ping包

除了可以嗅探(捕獲和解析)網(wǎng)絡(luò)數(shù)據(jù)包,但Scapy也支持生成數(shù)據(jù)包進(jìn)行各種主動(dòng)欺騙:網(wǎng)絡(luò)掃描、服務(wù)器探測、通過發(fā)送攻擊系統(tǒng)格式錯(cuò)誤的請求等等。下面嘗試ping一個(gè)服務(wù)器,涉及到要給服務(wù)發(fā)送一個(gè)ICMP數(shù)據(jù)包:

>>> CC = IP(dst="XXX") / ICMP()
>>> CC.show()

然后調(diào)用sr1()函數(shù),可以發(fā)送一個(gè)ICMP數(shù)據(jù)包(即ping),等待返回?cái)?shù)據(jù)包返回:

>>> rr=sr1(CC)
Begin emission:
Finished sending 1 packets.
...*
Received 4 packets, got 1 answers, remaining 0 packets
>>> rr

上面得到了正確的ICMP回復(fù)。為了發(fā)送多個(gè)數(shù)據(jù)包和接收響應(yīng)(例如實(shí)現(xiàn)ping掃描),可以用sr()功能。發(fā)送多個(gè)數(shù)據(jù)包,但等待單個(gè)響應(yīng)。還可以用sr1_flood()功能。

網(wǎng)絡(luò)協(xié)議層亂序

Scapy通過重載了Python/運(yùn)算符來實(shí)現(xiàn)層堆疊,不再不強(qiáng)制按照網(wǎng)絡(luò)層順序執(zhí)行,以達(dá)到以預(yù)期人為順序執(zhí)行(這在某些測試和應(yīng)用中很有用)。

>>> CC=ICMP() / UDP() / IP() / IP()
>>> CC
>>>
>>> CC.show()
###[ ICMP ]###
type= echo-request
code= 0
chksum= None
id= 0x0
seq= 0x0
###[ UDP ]###
sport= domain
dport= domain
len= None
chksum= None
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= ipv4
chksum= None
src= 127.0.0.1
dst= 127.0.0.1
\options\
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= hopopt
chksum= None
src= 127.0.0.1
dst= 127.0.0.1
\options\
>>> hexdump(CC)
WARNING: No IP underlayer to compute checksum. Leaving null.
0000 08 00 F7 65 00 00 00 00 00 35 00 35 00 30 00 00 ...e.....5.5.0..
0010 45 00 00 28 00 01 00 00 40 04 7C CF 7F 00 00 01 E..(....@.|.....
0020 7F 00 00 01 45 00 00 14 00 01 00 00 40 00 7C E7 ....E.......@.|.
0030 7F 00 00 01 7F 00 00 01

設(shè)計(jì)成這樣,主要是為了可以生成任意的網(wǎng)絡(luò)數(shù)據(jù)包(故意損壞的),用來進(jìn)行漏洞測試研究或利用。當(dāng)然對(duì)于對(duì)這一塊不熟悉的用戶,強(qiáng)烈建議不要輕易嘗試,以免造成問題。

數(shù)據(jù)可視化

Scapy也支持通過PyX(需要預(yù)先安裝模塊)對(duì)數(shù)據(jù)進(jìn)行可視化??梢暂敵鰹橐粋€(gè)數(shù)據(jù)包或數(shù)據(jù)包列表的圖形(PostScript/PDF格式):

>>> xxCC[404].pdfdump(layer_shift=1)
>>> xxCC[404].psdump("/tmp/xxCC.eps",layer_shift=1)

模糊測試

利用函數(shù)fuzz()可以利用快速構(gòu)建生成隨機(jī)測試值利用模糊模板并循環(huán)發(fā)送進(jìn)行測試。以下示例中,IP層正常,UDP和NTP層被fuzz。UDP 校驗(yàn)和將正確,UDP 目標(biāo)端口將被 NTP重載為123,并且NTP版本將被強(qiáng)制為4,所有其他端口將被隨機(jī)化:

send(IP(dst="target")/fuzz(UDP()/NTP(version=4)),loop=1)
................^C
Sent 16 packets.

總結(jié)

拋磚引玉,我們在此介紹了一些基本的Scapy用途,當(dāng)然這只是scapy龐大功能中的冰山一角,更多的用法請參考官方文檔。


本文標(biāo)題:Scapy:強(qiáng)大的Python網(wǎng)絡(luò)包解析庫
文章來源:http://www.dlmjj.cn/article/djhhoho.html