Skip to content
LIVE FEED

BlogCấu hình Wireshark & tshark để đọc PCAP MAC / NAS / S1AP từ srsRAN

Khi chạy lab srsRAN 4G (eNB + srsUE) ghép với open5gs, srsRAN có thể xuất ra các file PCAP ở tầng MAC, NAS và S1AP. Các file này không mở xem được ngay trong Wireshark vì chúng dùng link-layer type (DLT) riêng. Bài viết tổng hợp cách cấu hình Wireshark (GUI) và tshark (CLI) để giải mã đầy đủ.

1. srsRAN đóng gói PCAP như thế nào

Tham chiếu srsRAN_4G/lib/include/srsran/common/pcap.h:

Loại PCAPDLTKiểu đóng góiNguồn
MAC-LTE / MAC-NR149UDP framing (UDP_DLT) – Wireshark decode UDP rồi heuristic bắt MACmac.cc
NAS-EPS (4G)148NAS-EPS trực tiếpnas_pcap.cc
S1AP150S1AP trực tiếps1ap_pcap.cc
NAS-5G151nas-5gsnas_pcap.cc
NGAP152ngapngap_pcap.cc

Wireshark map dải DLT 147–162 vào bảng DLT_USER (User 0 = 147, User 1 = 148, User 2 = 149, …), nên phải khai báo thủ công payload protocol cho từng DLT.

Bật PCAP trong file cấu hình srsRAN:

# srsue/ue.conf
[pcap]
enable        = mac,nas          # hoặc: mac_nr, none
mac_filename  = /tmp/ue_mac.pcap
nas_filename  = /tmp/ue_nas.pcap

# srsenb/enb.conf
[pcap]
enable        = true
filename      = /tmp/enb_mac.pcap
s1ap_enable   = true
s1ap_filename = /tmp/enb_s1ap.pcap

2. Cấu hình Wireshark (GUI)

2.1. Bảng DLT_USER

Edit → Preferences → Protocols → DLT_USER → Encapsulations Table → Edit…

DLTPayload protocolDùng cho
User 1 (DLT=148)nas-eps*_nas.pcap
User 2 (DLT=149)udp*_mac.pcap
User 3 (DLT=150)s1ap*_s1ap.pcap
User 4 (DLT=151)nas-5gsNAS 5G (nếu có)
User 5 (DLT=152)ngapNGAP (nếu có)

Các cột Header size / Trailer size để 0.

2.2. Bật heuristic MAC-LTE / MAC-NR trên UDP

Edit → Preferences → Protocols → MAC-LTE:

  • Bật Attempt to dissect LTE MAC frames tagged with framing header (một số bản ghi là “Try Heuristic LTE-MAC over UDP framing”)

Với gNB/NR: làm tương tự trong MAC-NR.

2.3. NAS-EPS – hiện message đã giải mã

Edit → Preferences → Protocols → NAS-EPS:

  • Bật Try to detect and decode security protected NAS EPS messages
  • Bật Dissect NAS-EPS messages containing IEs longer than 65535 octets (nếu có)

srsUE ghi NAS ở dạng plaintext nên sẽ thấy đầy đủ Attach Request / Authentication / Security Mode Command / ESM.

2.4. Cấu hình nhanh bằng file (không cần vào GUI)

Thêm vào ~/.config/wireshark/preferences:

uat:user_dlts:"User 1 (DLT=148)","","nas-eps","","0","","0",""
uat:user_dlts:"User 2 (DLT=149)","","udp","","0","","0",""
uat:user_dlts:"User 3 (DLT=150)","","s1ap","","0","","0",""
uat:user_dlts:"User 4 (DLT=151)","","nas-5gs","","0","","0",""
uat:user_dlts:"User 5 (DLT=152)","","ngap","","0","","0",""
mac-lte.attempt_to_dissect_framed: TRUE
mac-nr.attempt_to_dissect_framed: TRUE
nas-eps.dissect_plain: TRUE
nas-eps.null_decipher: TRUE

3. tshark (CLI)

tshark dùng chung file ~/.config/wireshark/preferences với Wireshark. Nếu đã làm mục 2.4 thì tshark chạy được ngay, không cần thêm gì.

Khi không muốn / không thể đụng vào file config đó (máy khác, CI, profile sạch), truyền thẳng bằng -o — mỗi lần chạy tự override, không ghi vào đâu cả:

NAS-EPS (DLT 148)

tshark -r ue_nas.pcap \
  -o 'uat:user_dlts:"User 1 (DLT=148)","","nas-eps","","0","","0",""' \
  -o 'nas-eps.dissect_plain:TRUE' \
  -o 'nas-eps.null_decipher:TRUE' \
  -V

MAC-LTE / MAC-NR (DLT 149 = UDP framing)

tshark -r enb_mac.pcap \
  -o 'uat:user_dlts:"User 2 (DLT=149)","","udp","","0","","0",""' \
  -o 'mac-lte.attempt_to_dissect_framed:TRUE' \
  -o 'mac-nr.attempt_to_dissect_framed:TRUE' \
  -Y mac-lte

S1AP (DLT 150)

tshark -r enb_s1ap.pcap \
  -o 'uat:user_dlts:"User 3 (DLT=150)","","s1ap","","0","","0",""' \
  -V

Gói lại cho gọn

# Cách 1: biến shell dùng chung cho mọi file
WS_OPTS=(
  -o 'uat:user_dlts:"User 1 (DLT=148)","","nas-eps","","0","","0",""'
  -o 'uat:user_dlts:"User 2 (DLT=149)","","udp","","0","","0",""'
  -o 'uat:user_dlts:"User 3 (DLT=150)","","s1ap","","0","","0",""'
  -o 'mac-lte.attempt_to_dissect_framed:TRUE'
  -o 'mac-nr.attempt_to_dissect_framed:TRUE'
  -o 'nas-eps.dissect_plain:TRUE'
  -o 'nas-eps.null_decipher:TRUE'
)
tshark "${WS_OPTS[@]}" -r ue_nas.pcap -V | less
tshark "${WS_OPTS[@]}" -r enb_mac.pcap -Y mac-lte

# Cách 2: profile riêng, không đụng config mặc định
mkdir -p ~/.config/wireshark/profiles/srsran
# chép nội dung mục 2.4 vào file preferences trong thư mục đó
tshark -C srsran -r ue_nas.pcap -V

4. Một số lệnh trích xuất hay dùng

# Danh sách message NAS (EMM/ESM type)
tshark "${WS_OPTS[@]}" -r ue_nas.pcap \
  -T fields -e frame.number -e nas_eps.nas_msg_emm_type -e nas_eps.nas_msg_esm_type

# Thống kê MAC theo RNTI + hướng
tshark "${WS_OPTS[@]}" -r enb_mac.pcap \
  -T fields -e mac-lte.rnti -e mac-lte.direction | sort | uniq -c

# Procedure S1AP + Cause
tshark "${WS_OPTS[@]}" -r enb_s1ap.pcap \
  -T fields -e s1ap.procedureCode -e s1ap.Cause

# Kiểm tra nhanh dissector có ăn không
tshark "${WS_OPTS[@]}" -r ue_nas.pcap  -Y nas-eps  | head
tshark "${WS_OPTS[@]}" -r enb_mac.pcap -Y mac-lte  | head

5. Lưu ý

  • -o 'uat:...' thêm dòng vào bảng, không xoá dòng cũ. Chạy lặp nhiều lần trong shell không sao vì mỗi tiến trình tshark là mới; chỉ tránh ghi trùng dòng vào file preferences.
  • Nếu mở MAC PCAP mà chỉ thấy UDP không thấy MAC-LTE: kiểm tra lại đã bật mac-lte.attempt_to_dissect_framed và DLT 149 đã map sang udp chưa.
  • Nếu NAS hiện Security protected NAS message mà không bung nội dung: bật nas-eps.dissect_plain và nas-eps.null_decipher.
  • Kiểm tra DLT thực tế của file: capinfos -t ue_nas.pcap hoặc tshark -r ue_nas.pcap -c1 (báo lỗi “User encapsulation not handled” chính là dấu hiệu thiếu map DLT_USER).
Contact
Facebook
TOP