日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

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

概述

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

安裝運行

Scapy可以通過pip安裝:

pip install scapy

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

git clone github /secdev/scapy

然后,可以可以簡單地運行:

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

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

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

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

>>> fd.close()

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

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

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

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

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

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

實時抓包解析

比如可以讀取帶有預(yù)先捕獲的數(shù)據(jù)包的PCAP文件,如果要做一些數(shù)據(jù)包嗅探,如果系統(tǒng)準備好在混雜模式下使用網(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 文件中以供進一步分析,可以使用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ù)包進行各種主動欺騙:網(wǎng)絡(luò)掃描、服務(wù)器探測、通過發(fā)送攻擊系統(tǒng)格式錯誤的請求等等。下面嘗試ping一個服務(wù)器,涉及到要給服務(wù)發(fā)送一個ICMP數(shù)據(jù)包:

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

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

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

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

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

Scapy通過重載了Python/運算符來實現(xiàn)層堆疊,不再不強制按照網(wǎng)絡(luò)層順序執(zhí)行,以達到以預(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è)計成這樣,主要是為了可以生成任意的網(wǎng)絡(luò)數(shù)據(jù)包(故意損壞的),用來進行漏洞測試研究或利用。當然對于對這一塊不熟悉的用戶,強烈建議不要輕易嘗試,以免造成問題。

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

Scapy也支持通過PyX(需要預(yù)先安裝模塊)對數(shù)據(jù)進行可視化??梢暂敵鰹橐粋€數(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)建生成隨機測試值利用模糊模板并循環(huán)發(fā)送進行測試。以下示例中,IP層正常,UDP和NTP層被fuzz。UDP 校驗和將正確,UDP 目標端口將被 NTP重載為123,并且NTP版本將被強制為4,所有其他端口將被隨機化:

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

總結(jié)

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


當前文章:Scapy:強大的Python網(wǎng)絡(luò)包解析庫
文章出自:http://www.5511xx.com/article/djhhoho.html