在終端下輸入:scapy ,進入交互界面:html
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