Scapy 從入門到放棄

0x00 前言

最近閒的沒事,抽空了解下地表最強的嗅探和收發包的工具:scapy。scapy是一個python模塊,使用簡單,並且能靈活地構造各種數據包,是進行網絡安全審計的好幫手。

0x01 安裝

因爲2020年python官方便不再支持python2,所以使用python3安裝。

 0x02 構造數據包

在構造數據包之前首先導入scapy模塊: from scapy.all import * 

scapy構造數據包也非常簡單,例如使用  IP()  就可以創建一個默認的數據包。使用  ls(IP()) 可以查看IP數據包可以有哪些參數。

其他數據包同理

 

 使用IP(dst="114.114.114.114") 來創建一個目的地址是 114.114.114.114 的數據包,再使用 ls() 可以看到數據包的目的地址已經修改。

 也可以使用 show 方法來查看數據包信息。

 使用summary()方法查看概要信息。

使用hexdump(pkt)開查看數據包的字節信息

 使用 '/' 操作符來給數據包加上一層。例如構造一個TCP數據包,在IP層指明數據包的目的地址。在TCP層可以設定數據包的目的端口等等。UDP數據包同理。

數據包的目標端口可以用範圍來表示,發送的時候就會發送dport 不同的多個數據包。

 如果設置了多個參數爲範圍的,最後發送的數據包就是笛卡爾積。

 0x03 發送數據包

發送數據包可能需要管理員權限,使用sudo python3 進入python即可。

構造完數據包,就可以發送了。

scapy發送數據包有常用的如下幾種方法:

send(pkt)  發送三層數據包,但不會受到返回的結果。

sr(pkt)  發送三層數據包,返回兩個結果,分別是接收到響應的數據包和未收到響應的數據包。

sr1(pkt)  發送三層數據包,僅僅返回接收到響應的數據包。

sendp(pkt)  發送二層數據包。

srp(pkt)  發送二層數據包,並等待響應。

srp1(pkt)  發送第二層數據包,並返回響應的數據包

例如,使用sr發送一個數據包,ans爲響應的數據包,uans爲未響應的數據包。

 

0x04 應用

1)可以構造數據包來實現一個簡單的SYN端口掃描,flags="S" 表示發送SYN數據包。

 

 可以看到在發返回的數據包中,22,445,3389端口返回的flag位爲SA,表示這些端口是開放的。而RA表示reset ack, 說明這些端口是關閉的。

 2)實現一個基於TCP的traceroute

 

 3) 模擬TCP的三次握手

 

 最後可以看到握手成功後,服務器返回信息中包含了當前端口開放的服務

 

 0x05 其他

scapy 還可以用來讀取網絡流量包或監聽網卡流量。

使用函數rdpcap("/abc/def/xxxx.pcap") 可以讀取包的內容,再使用haslayer(TCP)或haslayer(ICMP)等等來判斷數據包的類型。

使用sniff(iface="wlan1",count=100,filter="tcp xxxx") 可以監聽網卡流量,iface聲明監聽的網卡,filter是過濾條件,count是符合過濾條件的數據包的個數,達到指定的數據包個數後會停止監聽,不設count則沒有限制,按ctrl-c 結束監聽。

sniff也支持無線網卡的監聽模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章