0x00 前言前端
最近閒的沒事,抽空了解下地表最強的嗅探和收發包的工具:scapy。scapy是一個python模塊,使用簡單,而且能靈活地構造各類數據包,是進行網絡安全審計的好幫手。python
0x01 安裝安全
由於2020年python官方便再也不支持python2,因此使用python3安裝。服務器
0x02 構造數據包網絡
在構造數據包以前首先導入scapy模塊: from scapy.all import * tcp
scapy構造數據包也很是簡單,例如使用 IP() 就能夠建立一個默認的數據包。使用 ls(IP()) 能夠查看IP數據包能夠有哪些參數。函數
其餘數據包同理工具
使用IP(dst="114.114.114.114") 來建立一個目的地址是 114.114.114.114 的數據包,再使用 ls() 能夠看到數據包的目的地址已經修改。3d
也可使用 show 方法來查看數據包信息。blog
使用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也支持無線網卡的監聽模式。