scapy構造數據包

1、進入scapy交互界面

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

2、查看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文件

3、構造數據包python

#構造一個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%tcp

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

layer: 協議層的名字,如Ether、IP、Dot十一、TCP等。spa

filed: 須要顯示的參數。3d

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

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

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

例子: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

相關文章
相關標籤/搜索