저장된 패킷파일을 재 전송하기 위한 방법으로 tcpreplay 를 소개한다. 이미 익히 알고
있는 분들도 많이 계시겠지만, 패킷을 재 전송할때 유용하게 사용될 수 있다. 왜?
패킷을 재전송하냐고 반문할 수도 있겠지만, 나름 사용할 때가 꽤 많다. 도입된 장비에
대해서 다양한 테스트를 수행할 수도 있고, IDS 패턴 시그너처를 작성하고 정상적으로
차단하는지의 유무를 테스트할 때도 쓰일 수 있다.
일단 다운로드를 다음의 주소에서 한다.
기본적인 사용법은 다음과 같다. -i 옵션을 통해 트래픽이 나갈 인터페이스를 지정하고
전송에 사용될 패킷 파일을 지정하면 된다.
# tcpreplay -i eth0 packet.pcap
패킷을 전송할때 속도도 정의할 수 있는 이때 사용되는 옵션은
--pps
--mbps
--topspeed
--multiplier
와 같다. 대충 옵션 이름만 봐도 추정은 될 것이다. PPS 로 지정하여 초당 몇개의
패킷을 전달 할 것인지, mpbs 로 메가 단위로 전송속도를 조절할지, 최대 가능한
속도인 --topspeed 로 할 지를 정할 수 있다.
- 최대 가능한 전송 속도로 전송하기
# tcpreplay --topspeed --intf1=eth0 sample.pcap
# tcpreplay -i eth0 --topspeed test.pcap
sending out eth0
processing file: test.pcap
Actual: 72 packets (21961 bytes) sent in 0.46 seconds
Rated: 4724827.9 bps, 36.05 Mbps/sec, 15490.53 pps
Statistics for network device: eth0
Attempted packets: 72
Successful packets: 72
Failed packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
- 10Mbps 비율로 전송하기
# tcpreplay --mbps=10 --intf1=eth0 sample.pcap
- 원래 속도의 반 정도로 조절하여 보내기
# tcpreplay --multiplier=0.5 --intf1=eth0 sample.pcap
참고로, 가끔 속도 지정없이 패킷을 전송하는 경우 패킷파일이 작은데도 불구하고
꽤 오래 걸리는 경우가 있다. 이럴 경우에 --mbps=10000 과 같이 크게 지정하여
전송하면 바로 전송되는 경험도 있었다. 또는 --topspeed 를 이용해 보자.
또 다른 옵션으로 -l(--loop) 옵션이 있다. 캡쳐파일을 주어진 수 만큼 반복하는 것이다
아래 예는 sample.pcap 을 20번 반복해서 eth0 로 전송하게 되는 것이고, 만약
0 를 지정하면 무한루프를 돌게된다. 즉, Ctrl+C 로 중지하기 전 까지는 계속 동작한다.
# tcpreplay --loop=20 -i eth0 sample.pcap
속도가 얼마나 나오는지 테스트를 위하여 xxxx.pcap 을 10번 전송해 보았다.
# tcpreplay -i eth4 --topspeed --loop=10 xxxx.pcap
sending out eth4
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
Actual: 1352310 packets (238093580 bytes) sent in 4.90 seconds
Rated: 48583705.8 bps, 370.66 Mbps/sec, 275942.89 pps
Statistics for network device: eth4
Attempted packets: 1352310
Successful packets: 1352310
Failed packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
와, 나쁘지 않은 속도를 보여주고 있다. 초당 370Mbps 수준이다.
참고로 tcpreplay 홈페이지에서 리눅스 환경에서 속도를 높이기 위하여 다음과 같은
설정을 제시했다. 물론 사용하는 OS 마다 다 다르겠지만,
echo 524287 >/proc/sys/net/core/wmem_default
echo 524287 >/proc/sys/net/core/wmem_max
echo 524287 >/proc/sys/net/core/rmem_max
echo 524287 >/proc/sys/net/core/rmem_default
거의 10 배가까이 속도가 좋아졌다고 한다. 내 환경을 살펴보니 아래와 같았는데도,
초당 370 메가까지 나왔으니 참고하길 바란다. 사용커널은 2.6.26-2 이다.
# cat /proc/sys/net/core/wmem*
110592
131071
# cat /proc/sys/net/core/rmem*
110592
131071