2015-01-08

tcpdump-tcprelay-packet-relay scripts

3가지 단계로 packet relay를 할 수 있습니다. 패킷 캡쳐 - 패킷 수정 - 패킷 재전송

패킷 캡쳐

1분마다 tcpdump로 pcap파일 생성.

#!/bin/bash

while [ 1 ]
do
r_date=`date +%Y%m%d%H%M` --> 현재시간 년월일시분 으로 표기
echo $r_date
tcpdump -nn -i eth0 dst port 162 -w $r_date.pcap & --> 패킷 캡쳐 시작(r_date를 이름으로 가진다.)
ex_tcpdump=`echo $!` --> 백그라운드로 돌아가는 tcpdump의 pid 얻기
while [ 1 ]
do
        tmp_date=`date +%Y%m%d%H%M` --> 반복문에서 현재시간 년월일시분 으로 표기
        if [ $r_date -lt $tmp_date ]; --> r_date와 tmp_date를 비교하여 r_date가 작으면 tcpdump 중지.
        then
        kill $ex_tcpdump --> kill -9로 강제 종료 시킬경우 패킷이 캡쳐가 안된다.
        break
        else
        continue
        sleep 1
        fi
done
done


패킷 수정

#!/bin/bash

r_date=`date +%Y%m%d%H%M` --> 현재시간 년월일시분
echo $r_date

for fhs in `ls /root/relay_test | grep pcap | grep -v rewrite | awk -F . '{print $1}'`;do --> 반복문 이용 

        if [ $fhs -lt $r_date ]; --> 캡쳐중인 파일을 수정할 수는 없으므로 1분전 파일 수정
        then
        tcprewrite -i /root/relay_test/$fhs.pcap -o /root/relay_test/$fhs\_rewrite.pcap --dstipmap [수정할 IP]:[변경된 IP] --enet-dmac=[목적지 mac주소] -C
        rm -rf /root/relay_test/$fhs.pcap
        fi
done


패킷 재전송

!/bin/bash

r_date=`date +%Y%m%d%H%M`
echo $r_date

for fhs in `ls /root/relay_test | grep rewrite | grep -v sh | awk -F _ '{print $1}'`;do 

        if [ $fhs -lt $((r_date - 1)) ]; --> 수정중인 파일을 전송할 수는 없으므로 1분전에 수정된 파일 전송
        then
        tcpreplay --topspeed --intf1=eth0 /root/relay_test/$fhs\_rewrite.pcap
        rm -rf /root/relay_test/$fhs\_rewrite.pcap
        fi
done