DAY13 我們讓SMF認為我們的運行PFCP程式的主機為UPF,而接下來我們要來抓取UE在通訊時的GTPU封包。
而這方面我們也很幸運SCAPY依樣有函示庫可以解析GTPU的封包 Scapy GTP document
這邊簡單寫一個程式去抓取封包
from scapy.contrib.gtp import *
import socket
LOCAL_DATA_HANDLER = lambda x:x
REMOTE_DATA_HANDLER = lambda x:x
BUFFER_SIZE = 2 ** 15
proxy_socket2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
proxy_socket2.bind(("10.20.1.22", 2152))
while True:
data, address = proxy_socket2.recvfrom(BUFFER_SIZE)
print(GTP_U_Header(data))
show出來看的話則可以看到完整內容
而因為我們的程式沒有UPF的功能,因此我們這邊將封包轉送給真正的UPF
proxy_socket2.sendto(data,("10.244.0.90", 2152))
執行後再重新讓UE進行連線,並去PING 8.8.8.8
可以看到UE可正常進行通訊了,也代表我們的程式有正常的運作,並可去抓取並查看UE目前通訊的封包,這點就可以利用來作為防火牆,或是存進資料庫進行分析並顯示流量,而DAY15 我們總結一下再透過GTP PROXY的程式下,會有什麼風險或可以做到什麼。