[tcp] pcap 패킷 수정 불가능한 경우

1vl·2024년 11월 12일
0

삽질기록

목록 보기
3/5

상황: wireshark 또는 tcpdump로 저장한 pcap 파일을 수정하여 bittwist, tcpreplay등의 툴을 사용해 패킷을 보내려고 하는 상황

문제: bittwiste, tcprewrite 등 패킷 수정이 가능한 툴을 설치하여 적용하고자 하였지만, 아무런 에러 메시지도 나오지 않고, 수정된 pcap 파일의 패킷들은 모두 원본 파일과 동일함. 일부 패킷을 선별하여 범위를 좁혀 저장하는 동작은 정상적으로 가능했음.

다행히 editcap으로 수정을 시도한 경우에 에러메세지가 출력 되어서 원인을 파악할 수 있었음.

원인: Linux Cooked-mode Capture (SLL protocol)

원인은 캡쳐 시에 특정 NIC를 지정해서 캡쳐한 것이 아니라, any로 모든 네트워크 인터페이스의 패킷을 저장한 것이 문제였음.
linktype을 DLT_LINUX_SLL에서 DLT_EN10MB(이더넷)으로 바꿔주면 된다.

해결:

# 먼저 패킷에 MAC을 추가하여 linktype을 DLT_LINUX_SLL에서 DLT_EN10MB(이더넷)으로 변경
tcprewrite --dlt=enet --enet-dmac=(도착지 NIC의 MAC 주소) --enet-smac=(출발지 NIC의 MAC 주소) -i input.pcap -o out.pcap

# 저장된 패킷에 원하는 대로 변경을 가한다 (포트번호, ip 주소 등...)
tcprewrite -i out.pcap -o out_temp.pcap --portmap=(원본 포트):(새 포트) --srcipmap=(원본 ip 주소):(ip 주소) --dstipmap=(원본 ip 주소):(ip 주소)

tcprewrite -i out_temp.pcap -o out-prob.pcap --portmap=(원본 포트):(새 포트) --srcipmap=(원본 ip 주소):(ip 주소) --dstipmap=(원본 ip 주소):(ip 주소)

# 변경된 패킷이 들어있는 pcap 재생
tcpreplay -i en0 out-prob.pcap

참고 게시글:
https://byeo.tistory.com/entry/Linux-Cooked-Capture-SLL-protocol

https://tcpreplay-users.narkive.com/is5LFqtA/tcprewrite-error-dlt-linux-sll-pcap-s-must-contain-only-ethernet-packets

https://blog.naver.com/5bpa/130181210287

profile
React-Native, Flutter, Java, Spring, lua

0개의 댓글