scapy構造數據包


一、進入scapy交互界面

在終端下輸入:scapy ,進入交互界面:

二、查看scapy已經實現的網絡協議

ls()         列出scapy中已實現的網絡協議
ls(協議類型)     查看某個協議頭部字段格式
lsc()        列出scapy中可以使用的命令或函數,比如嗅探時,我們經常會用到sniff()函數
IP().show()    顯示包的IP信息
IP().display() 顯示包的模板

dpkg = sniff(filter="tcp",count=4) dpkg[2].show()   顯示包抓取到的tkpk的第3個數據包的的詳細內容
dpkg[2].summary()    查看捕獲到數據包的信息摘要

wrpcap("dpkgsniff.pcap",dpkg)     將嗅探到的packet內容寫到pcap文件
dpkg_read = rdpcap("dpkgsniff.pcap")  讀取pcap文件

三、構造數據包

#構造一個ip數據包
dpkg = IP()
#修改數據包的值
dpkg.ttl = 24

#構造一個ICMP數據包
dpkg = ICMP()
#構造一個TCP數據包
dpkg = TCP()

通過“/”來表示網絡中各個層的組合

dpkg=Ether()/IP(dst="www.baidu.com")/TCP()/"GET /index.html HTTP/1.0 \n\n"
dpkg.show()
hexdump(dpkg)

sprintf()輸出某一層某個參數的取值,如果不存在就輸出”??”,具體的format格式是:%[[fmt][r],][layer[:nb].]field%

%[[fmt][r],][layer[:nb].]field%

layer: 協議層的名字,如Ether、IP、Dot11、TCP等。

filed: 需要顯示的參數。

nb: 當有兩個協議層有相同的參數名時,nb用於到達你想要的協議層。

r:  一個標志。當使用r標志時,意味着顯示的是參數的原始值。

例如,TCP標志中使用人類可閱讀的字符串’SA’表示SYN和ACK標志,而其原始值是18.

例子:pkt.sprintf("Etherent source: %Ether.src%   IP src: %IP.src%")   

或者:pkt.sprintf('%Raw.load%')   #其中Raw為具體的協議層

 顯示具體的網絡層的信息:

dpkg["IP"].show()  或者dpkg[IP].show()  也可以
dpkg["TCP"].show() 
dpkg[
"Raw"].show()
#或者等價於
dpkg.getlayer(ip).show()
dpkg.getlayer(TCP).show()
dpkg.getlayer(Raw).show()

 

獲取某個協議的具體字段值:

dpkg["Raw"].load
dpkg.getlayer(TCP).window

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM