tcpreplay 패킷 재전송 완벽 가이드: 네트워크 테스트의 필수 도구
- IT/네트워크(Network)
- 2026. 3. 14.
"실제 네트워크 트래픽을 그대로 재현할 수 있다면 얼마나 좋을까요? tcpreplay는 캡처된 패킷을 실시간으로 재전송하여 네트워크 장비 테스트, 보안 분석, 성능 측정을 가능하게 하는 강력한 도구입니다. 전 세계 네트워크 엔지니어들이 신뢰하는 이 도구의 모든 것을 마스터해보세요."
🎯 목차
🌟 tcpreplay란 무엇인가?
🔍 핵심 개념과 용도
tcpreplay는 미리 캡처된 네트워크 패킷(pcap 파일)을 실제 네트워크 인터페이스로 재전송하는 오픈소스 도구입니다. Wireshark나 tcpdump로 캡처한 트래픽을 그대로 재현할 수 있어 네트워크 테스트와 분석에 필수적인 도구입니다.
🎪 왜 tcpreplay가 필요한가?

현실적인 네트워크 테스트 상황들:
테스트 시나리오 기존 방법의 한계 tcpreplay 해결책
| 방화벽 성능 테스트 | 인위적 트래픽으로 제한적 | 실제 트래픽 패턴 재현 |
| IDS/IPS 검증 | 가상 공격만 테스트 | 실제 공격 패킷 재전송 |
| 네트워크 장비 부하 테스트 | 단순 ping으로만 측정 | 다양한 프로토콜 동시 테스트 |
| 애플리케이션 성능 분석 | 프로덕션 환경 직접 테스트 | 안전한 환경에서 실제 트래픽 재현 |
💡 실무 팁: tcpreplay를 사용하면 실제 프로덕션 트래픽을 99% 동일하게 재현할 수 있어, 테스트 환경에서도 현실적인 결과를 얻을 수 있습니다.
📊 tcpreplay 도구 모음
tcpreplay는 단일 도구가 아닌 패킷 처리 도구 모음입니다:
tcpreplay 패키지 구성:
├── tcpreplay : 패킷 재전송 (단일 인터페이스)
├── tcprewrite : 패킷 내용 수정
├── tcpprep : 트래픽 분할 준비
├── tcpreplay-edit: 패킷 편집 후 재전송
├── tcpbridge : 브릿지 모드 재전송
└── tcpliveplay : 실시간 패킷 캡처/재전송
📦 운영체제별 설치 가이드
🐧 Ubuntu/Debian 설치
APT 패키지 관리자 사용
# 패키지 목록 업데이트
sudo apt update
# tcpreplay 설치
sudo apt-get install tcpreplay
# 설치 확인
tcpreplay --version
추가 유용한 패키지
# 함께 설치하면 좋은 도구들
sudo apt-get install tcpdump wireshark-cli netcat-openbsd
# 개발 도구 (소스 컴파일 시 필요)
sudo apt-get install build-essential libpcap-dev git
🎩 Fedora 설치
DNF/YUM 패키지 관리자
# Fedora (최신 버전)
sudo dnf install tcpreplay
# 또는 구버전 Fedora
sudo yum install tcpreplay
# 설치 확인 및 기능 테스트
tcpreplay --listnics
🏗️ CentOS/RHEL 설치
패키지 저장소 방식 (RHEL 7+)
# EPEL 저장소 활성화
sudo yum install epel-release
# tcpreplay 설치
sudo yum install tcpreplay
소스 컴파일 방식 (권장)
# 개발 도구 그룹 설치
sudo yum groupinstall "Development Tools"
# 의존성 패키지 설치
sudo yum install libpcap-devel libnet-devel
# 최신 소스 다운로드 및 컴파일
wget <https://github.com/appneta/tcpreplay/releases/download/v4.4.3/tcpreplay-4.4.3.tar.xz>
tar -xf tcpreplay-4.4.3.tar.xz
cd tcpreplay-4.4.3
# 컴파일 옵션 설정
./configure --enable-dynamic-link --enable-64bits --with-libpcap
# 컴파일 및 설치
make -j$(nproc)
sudo make install
# 라이브러리 경로 설정
sudo ldconfig
🍎 macOS 설치
Homebrew 사용
# Homebrew 설치 (미설치 시)
/bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"
# tcpreplay 설치
brew install tcpreplay
# 권한 설정 (필요시)
sudo chown -R $(whoami) /usr/local/lib/pkgconfig
🔧 설치 후 환경 설정
권한 설정 및 보안
# tcpreplay를 위한 특별 권한 설정 (Linux)
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpreplay
# 또는 sudo 없이 사용하기 위한 그룹 추가
sudo usermod -a -G wireshark $USER
newgrp wireshark
# 설치 확인 및 인터페이스 목록 보기
tcpreplay --listnics
⚙️ 기본 사용법과 핵심 옵션
🎯 기본 패킷 재전송
가장 간단한 사용법
# 기본 패킷 재전송 (eth0 인터페이스 사용)
sudo tcpreplay -i eth0 captured_traffic.pcap
# 여러 pcap 파일 동시 재전송
sudo tcpreplay -i eth0 file1.pcap file2.pcap file3.pcap
# 특정 패킷 수만 재전송
sudo tcpreplay -i eth0 -L 100 large_capture.pcap
상세 정보 출력 옵션
# 자세한 재전송 정보 출력
sudo tcpreplay -i eth0 -v traffic.pcap
# 더 상세한 디버그 정보
sudo tcpreplay -i eth0 -vv traffic.pcap
# 패킷별 상세 정보 (매우 상세)
sudo tcpreplay -i eth0 -vvv traffic.pcap
🚀 속도 제어 옵션
PPS (Packets Per Second) 제어
# 초당 100개 패킷으로 제한
sudo tcpreplay -i eth0 --pps=100 traffic.pcap
# 초당 1000개 패킷 (고속 재전송)
sudo tcpreplay -i eth0 --pps=1000 heavy_traffic.pcap
# 동적 PPS 조절 스크립트
#!/bin/bash
PCAP_FILE="test_traffic.pcap"
INTERFACE="eth0"
for pps in 10 50 100 500 1000; do
echo "PPS $pps로 테스트 중..."
sudo tcpreplay -i $INTERFACE --pps=$pps $PCAP_FILE
sleep 2
done
대역폭 기반 속도 제어
# 초당 10Mbps로 제한
sudo tcpreplay -i eth0 --mbps=10.0 traffic.pcap
# 초당 1Gbps (기가비트) 속도
sudo tcpreplay -i eth0 --mbps=1000.0 high_bandwidth.pcap
# 실시간 대역폭 모니터링과 함께
sudo tcpreplay -i eth0 --mbps=100.0 -v traffic.pcap &
watch -n 1 'iftop -i eth0 -t -s 5'
최고 속도 및 배속 조절
# 최대 가능한 속도로 재전송
sudo tcpreplay -i eth0 --topspeed traffic.pcap
# 원래 속도의 2배로 재전송
sudo tcpreplay -i eth0 --multiplier=2.0 traffic.pcap
# 원래 속도의 절반으로 재전송
sudo tcpreplay -i eth0 --multiplier=0.5 traffic.pcap
# 가능한 빨리 재전송 (짧은 옵션)
sudo tcpreplay -i eth0 -t traffic.pcap
🔁 반복 재전송 옵션
반복 횟수 제어
# 5번 반복 재전송
sudo tcpreplay -i eth0 -l 5 traffic.pcap
# 무한 반복 (Ctrl+C로 중지)
sudo tcpreplay -i eth0 -l 0 traffic.pcap
# 시간 기반 반복 (10분간 계속)
timeout 600 sudo tcpreplay -i eth0 -l 0 traffic.pcap
🛡️ 방화벽 설정 (RST 패킷 방지)
iptables를 이용한 RST 패킷 차단
# RST 패킷 차단 (송신)
sudo iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
# 특정 인터페이스에서만 RST 차단
sudo iptables -A OUTPUT -o eth0 -p tcp --tcp-flags RST RST -j DROP
# 특정 포트에 대한 RST 차단
sudo iptables -A OUTPUT -p tcp --dport 80 --tcp-flags RST RST -j DROP
# 설정 확인
sudo iptables -L OUTPUT -v -n
# 설정 저장 (Ubuntu)
sudo iptables-save > /etc/iptables/rules.v4
방화벽 설정 스크립트
#!/bin/bash
# setup_tcpreplay_firewall.sh
echo "tcpreplay를 위한 방화벽 설정 중..."
# 기존 RST 차단 규칙 제거
sudo iptables -D OUTPUT -p tcp --tcp-flags RST RST -j DROP 2>/dev/null
# 새로운 RST 차단 규칙 추가
sudo iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
# 설정 확인
echo "현재 방화벽 규칙:"
sudo iptables -L OUTPUT -v -n | grep RST
echo "방화벽 설정 완료!"
echo "tcpreplay 사용 후 다음 명령으로 규칙을 제거하세요:"
echo "sudo iptables -D OUTPUT -p tcp --tcp-flags RST RST -j DROP"
🎭 고급 패킷 재전송 기법
🔧 패킷 수정 및 편집
tcprewrite를 이용한 패킷 수정
# MAC 주소 변경
sudo tcprewrite --enet-dmac=00:11:22:33:44:55 \\
--enet-smac=66:77:88:99:aa:bb \\
--infile=original.pcap \\
--outfile=modified.pcap
# IP 주소 변경 (1:1 매핑)
sudo tcprewrite --srcipmap=192.168.1.0/24:10.0.1.0/24 \\
--dstipmap=192.168.2.0/24:10.0.2.0/24 \\
--infile=original.pcap \\
--outfile=ip_changed.pcap
# 포트 번호 변경
sudo tcprewrite --portmap=80:8080,443:8443 \\
--infile=web_traffic.pcap \\
--outfile=port_changed.pcap
패킷 편집 후 즉시 재전송
# IP 주소 변경하면서 바로 재전송
sudo tcpreplay-edit -i eth0 \\
--srcipmap=0.0.0.0/0:192.168.1.100 \\
--fixcsum \\
original_traffic.pcap
# 체크섬 자동 수정 옵션
sudo tcpreplay-edit -i eth0 \\
--fixcsum \\
--mtu=1500 \\
--mtu-trunc \\
large_packet.pcap
🌐 듀얼 인터페이스 재전송
tcpprep을 이용한 트래픽 분할
# 트래픽을 클라이언트/서버로 분할
sudo tcpprep --auto=bridge \\
--pcap=bidirectional.pcap \\
--cachefile=traffic.cache
# 분할된 트래픽을 두 인터페이스로 재전송
sudo tcpreplay --intf1=eth0 \\
--intf2=eth1 \\
--cachefile=traffic.cache \\
bidirectional.pcap
네트워크 브릿지 시뮬레이션
# tcpbridge를 이용한 실시간 브릿지
sudo tcpbridge --intf1=eth0 --intf2=eth1 --mac=00:11:22:33:44:55
# 패킷 캡처하면서 동시에 브릿지
sudo tcpbridge --intf1=eth0 --intf2=eth1 \\
--snaplen=1518 \\
--verbose \\
--fixcsum
📊 고급 성능 최적화
멀티스레드 재전송
# preload를 이용한 고성능 재전송
sudo tcpreplay --preload-pcap \\
--timer=rdtsc \\
--netmap \\
--intf1=eth0 \\
--topspeed \\
high_volume.pcap
# NUMA 최적화 (고성능 서버)
sudo numactl --cpunodebind=0 --membind=0 \\
tcpreplay --intf1=eth0 \\
--timer=gtod \\
--pps=1000000 \\
massive_traffic.pcap
정밀한 타이밍 제어
# 나노초 정밀도 타이밍
sudo tcpreplay --intf1=eth0 \\
--timer=nano \\
--accurate \\
--preload-pcap \\
precise_timing.pcap
# 지터(Jitter) 추가
sudo tcpreplay --intf1=eth0 \\
--pps=100 \\
--jitter=50 \\
realistic_network.pcap
💼 실무 활용 시나리오
🛡️ 방화벽 성능 테스트
단계적 부하 증가 테스트
#!/bin/bash
# firewall_stress_test.sh
PCAP_FILE="mixed_traffic.pcap"
INTERFACE="eth0"
RESULTS_FILE="firewall_test_results.txt"
echo "방화벽 성능 테스트 시작" > $RESULTS_FILE
echo "===================" >> $RESULTS_FILE
# 다양한 PPS로 테스트
for pps in 100 500 1000 5000 10000 50000; do
echo "PPS $pps 테스트 중..." | tee -a $RESULTS_FILE
# 시작 시간 기록
start_time=$(date +%s)
# 1분간 패킷 재전송
timeout 60 sudo tcpreplay -i $INTERFACE --pps=$pps -l 0 $PCAP_FILE
# 종료 시간 기록
end_time=$(date +%s)
duration=$((end_time - start_time))
# CPU 사용률 측정
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | awk -F'%' '{print $1}')
echo "지속 시간: ${duration}초, CPU 사용률: ${cpu_usage}%" >> $RESULTS_FILE
# 다음 테스트 전 잠시 대기
sleep 30
done
echo "테스트 완료! 결과: $RESULTS_FILE"
실제 공격 패턴 재현
# DDoS 공격 패턴 재전송
sudo tcpreplay -i eth0 \\
--pps=10000 \\
--loop=0 \\
ddos_attack.pcap &
# SYN Flood 공격 시뮬레이션
sudo tcpreplay -i eth0 \\
--topspeed \\
--loop=100 \\
syn_flood.pcap
# HTTP Flood 공격
sudo tcpreplay -i eth0 \\
--mbps=100 \\
--loop=50 \\
http_flood.pcap
📡 네트워크 장비 테스트
스위치/라우터 처리량 테스트
#!/bin/bash
# network_device_test.sh
DEVICE_UNDER_TEST="192.168.1.1"
TEST_INTERFACE="eth0"
echo "네트워크 장비 처리량 테스트"
echo "테스트 대상: $DEVICE_UNDER_TEST"
echo "=========================="
# 다양한 패킷 크기로 테스트
for packet_size in 64 128 256 512 1024 1518; do
echo "패킷 크기 ${packet_size}바이트 테스트..."
# 해당 크기의 테스트 패킷 생성 및 재전송
sudo tcpreplay -i $TEST_INTERFACE \\
--pps=100000 \\
--duration=30 \\
--fixcsum \\
packet_${packet_size}.pcap
# 지연시간 측정
ping_result=$(ping -c 10 -s $packet_size $DEVICE_UNDER_TEST | tail -1 | awk -F'/' '{print $5}')
echo "평균 지연시간: ${ping_result}ms"
sleep 10
done
🔍 애플리케이션 성능 분석
웹 서버 부하 테스트
# 웹 트래픽 패턴 재현
sudo tcpreplay -i eth0 \\
--pps=1000 \\
--loop=10 \\
web_traffic_peak_hour.pcap &
# 실시간 서버 성능 모니터링
watch -n 1 'curl -w "@curl-format.txt" -o /dev/null -s <http://target-server/>'
# curl-format.txt 내용:
# time_namelookup: %{time_namelookup}\\n
# time_connect: %{time_connect}\\n
# time_appconnect: %{time_appconnect}\\n
# time_pretransfer: %{time_pretransfer}\\n
# time_redirect: %{time_redirect}\\n
# time_starttransfer: %{time_starttransfer}\\n
# time_total: %{time_total}\\n
데이터베이스 연결 테스트
#!/bin/bash
# db_connection_test.sh
DB_HOST="192.168.1.100"
DB_PORT="3306"
TEST_INTERFACE="eth0"
echo "데이터베이스 연결 부하 테스트"
# MySQL 트래픽 재전송
sudo tcpreplay -i $TEST_INTERFACE \\
--pps=500 \\
--loop=20 \\
mysql_queries.pcap &
# 연결 수 모니터링
while true; do
connections=$(mysql -h$DB_HOST -P$DB_PORT -e "SHOW STATUS LIKE 'Threads_connected';" | tail -1 | awk '{print $2}')
echo "현재 연결 수: $connections"
sleep 5
done
🎯 보안 테스트 시나리오
침입 탐지 시스템(IDS) 테스트
# 알려진 공격 패턴 재전송
sudo tcpreplay -i eth0 \\
--topspeed \\
malware_samples.pcap
# 이상 트래픽 패턴 재현
sudo tcpreplay -i eth0 \\
--pps=1000 \\
--jitter=100 \\
anomalous_traffic.pcap
# 스텔스 스캔 시뮬레이션
sudo tcpreplay -i eth0 \\
--pps=10 \\
--duration=3600 \\
stealth_scan.pcap
⚡ 성능 최적화와 트러블슈팅
🚀 성능 최적화 기법
시스템 레벨 최적화
# 네트워크 버퍼 크기 증가
echo 'net.core.rmem_max = 134217728' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 134217728' >> /etc/sysctl.conf
echo 'net.core.netdev_max_backlog = 30000' >> /etc/sysctl.conf
# CPU 스케일링 비활성화 (성능 모드)
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 인터럽트 친화성 설정
echo 2 > /proc/irq/24/smp_affinity # eth0 인터럽트를 CPU 1에 고정
# 적용
sudo sysctl -p
tcpreplay 고성능 옵션
# 최고 성능을 위한 완전한 명령어
sudo tcpreplay --intf1=eth0 \\
--preload-pcap \\
--timer=rdtsc \\
--pps-multi=1000000 \\
--netmap \\
--no-flow-stats \\
--quiet \\
high_performance.pcap
# 메모리 맵 파일 사용
sudo tcpreplay --intf1=eth0 \\
--preload-pcap \\
--mmap \\
--enable-file-cache \\
--topspeed \\
large_file.pcap
🔧 일반적인 문제 해결
패킷 드롭 문제
# 문제 진단
# 1. 인터페이스 통계 확인
ip -s link show eth0
# 2. 버퍼 오버런 확인
cat /proc/net/dev
# 3. tcpreplay 통계 확인
sudo tcpreplay -i eth0 -v -S traffic.pcap 2>&1 | grep -E "(Successful|Failed|Truncated)"
# 해결책
# 1. 버퍼 크기 증가
sudo tcpreplay --intf1=eth0 \\
--preload-pcap \\
--timer=select \\
--pps=1000 \\
traffic.pcap
# 2. 작은 배치로 분할 전송
split -l 10000 large.pcap small_batch_
for file in small_batch_*; do
sudo tcpreplay -i eth0 "$file"
sleep 1
done
권한 관련 문제
# 문제: "Can't open eth0: Operation not permitted"
# 해결 1: sudo 사용
sudo tcpreplay -i eth0 traffic.pcap
# 해결 2: capabilities 설정
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpreplay
# 해결 3: 사용자 그룹 추가
sudo usermod -a -G wireshark $USER
newgrp wireshark
# 권한 확인
getcap /usr/bin/tcpreplay
메모리 부족 문제
# 대용량 pcap 파일 처리
# 1. 스트리밍 모드 사용
sudo tcpreplay --intf1=eth0 \\
--enable-file-cache \\
--cachefile=/tmp/tcpreplay.cache \\
huge_file.pcap
# 2. 파일 분할
tcpdump -r huge_file.pcap -w small_file -C 100 # 100MB 단위로 분할
# 3. 압축 파일 직접 처리
zcat compressed.pcap.gz | sudo tcpreplay --intf1=eth0 -
📊 성능 모니터링
실시간 성능 측정 스크립트
#!/bin/bash
# tcpreplay_monitor.sh
INTERFACE="eth0"
INTERVAL=1
echo "tcpreplay 성능 모니터링"
echo "===================="
echo "시간,전송 패킷,수신 패킷,드롭 패킷,CPU %,메모리 MB"
while true; do
# 네트워크 통계 수집
tx_packets=$(cat /sys/class/net/$INTERFACE/statistics/tx_packets)
rx_packets=$(cat /sys/class/net/$INTERFACE/statistics/rx_packets)
tx_dropped=$(cat /sys/class/net/$INTERFACE/statistics/tx_dropped)
# 시스템 리소스 수집
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | awk -F'%' '{print $1}')
mem_usage=$(free -m | awk 'NR==2{print $3}')
# CSV 형태로 출력
timestamp=$(date '+%H:%M:%S')
echo "$timestamp,$tx_packets,$rx_packets,$tx_dropped,$cpu_usage,$mem_usage"
sleep $INTERVAL
done
🛡️ 보안 테스트와 분석 활용
🎭 펜테스트 시나리오
네트워크 스캔 시뮬레이션
# Nmap 스캔 패킷 재현
sudo tcpreplay -i eth0 \\
--pps=100 \\
--loop=5 \\
nmap_scan.pcap
# 포트 스캔 탐지 테스트
sudo tcpreplay -i eth0 \\
--pps=1000 \\
--duration=300 \\
port_scan_patterns.pcap
# 스텔스 스캔 (느린 속도)
sudo tcpreplay -i eth0 \\
--pps=1 \\
--loop=0 \\
stealth_scan.pcap