다행히 editcap으로 수정을 시도한 경우에 에러메세지가 출력 되어서 원인을 파악할 수 있었음.
원인은 캡쳐 시에 특정 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