지금까지 패킷 편집 도구를 몇 가지 소개하였다. 패킷생성기능, 편집 기능등. 패킷인사이드를 검색해 보면 몇 가지를 찾아볼 수 있을 것이다. 이번 도구의 이름은 Bit-Twist 로 패킷을 생성하고, 편집할 수 있는 기능까지 갖추고 있다. 사용방법도 너무 쉬워서 한번 사용예제를 보는 것만으로도 쉽게 이해가 될 것이다.
일단, 다음의 경로를 통해 파일을 다운로드 받을 수 있다.
아차, 여기 예는 리눅스 기반에서 소개한 것이지만. 윈도우에서도 사용가능하다는 점!
도움말은 -h 를 통해서 볼 수 있고, 몇 가지 옵션을 살펴보도록 하자. 우선, 패킷 생성기인 bittwist 로 시작해 보자. -d 옵션은 현재 사용가능한 네트워크 인터페이스를 보여준다.
위 예를 보면 1235 개의 패킷을 전송하였고, Ctrl+C 를 눌러 중단했다. 바로 전송이 빠르게 이뤄지지 않았기
때문에 수동으로 중지한 것이다. 이럴때 -m 옵션을 사용하면 즉시 전송하게 된다.
# bittwist -i eth1 test.pcap -m 0
sending packets through eth1
trace file: test.pcap
2040 packets (1578854 bytes) sent
Elapsed time = 0.037914 seconds
-m 옵션을 사용하였더니 즉시 패킷이 전송되었고, 2040개의 패킷이 다 전달되었다.
-c 옵션은 전송할 패킷 갯수를 지정할 수 있다. 만약 test.pcap 에서 10 개의 패킷만을 전달하고 싶다면 -c 10 을 사용하면 된다.
# bittwist -i lo test.pcap -m 0 -c 10
sending packets through lo
trace file: test.pcap
10 packets (4247 bytes) sent
Elapsed time = 0.000414 seconds
간단한 옵션 몇가지를 통해 금방 패킷을 전송할 수 있는 것을 보았다. 이와 비슷한 기능을 가진 도구로는 tcpreplay 가 기억이 날 것이다. 자, 이번에는 편집 기능을 사용 예를 통해 한번 알아보도록 한다.
1) 패킷에서 1-2 까지만의 패킷을 뽑아내 저장해 보자.
# bittwiste -I test.pcap -O rigel.pcap -R 1-2
input file: test.pcap
output file: rigel.pcap
2 packets (128 bytes) written
2) 패킷 덤프 할 시간을 지정해 저장하기
일단 PCAP 파일의 첫 시간을 살펴보았더니 2010년7월21일 10시26분이다.
# tcpdump -r test.pcap -tttt | more
reading from file test.pcap, link-type EN10MB (Ethernet)
2010-07-21 10:26:39.659705 IP 179.222.51.219.3645 > 147.245.206.234.www: S 592977294:59297
7294(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
그리고, -S 옵션을 통해 시작시간과 끝 시간을 지정한다. 참고로 -I 옵션은 Input 파일 -O 옵션은 Output 파일을
뜻한다.
# bittwiste -I test.pcap -O rigel.pcap -S 21/07/2010,10:20:00-21/07/2010,10:26:40
input file: test.pcap
output file: rigel.pcap
944 packets (866907 bytes) written
3) IP 를 변경해 보자.
# tcpdump -r rigel.pcap
reading from file rigel.pcap, link-type EN10MB (Ethernet)
10:26:39.659705 IP 179.222.51.219.3645 > 147.245.206.234.www: S 592977294:592977294(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
위 172.222.51.219 출발지 주소를 -> 192.168.0.0 으로 변경해 보자.
# bittwiste -I test.pcap -O rigel.pcap -R 1 -T ip -s 179.222.51.219,192.168.0.0
input file: test.pcap
output file: rigel.pcap
1 packets (66 bytes) written
# tcpdump -r rigel.pcap
reading from file rigel.pcap, link-type EN10MB (Ethernet)
10:26:39.659705 IP 192.168.0.0.3645 > 147.245.206.234.www: S 592977294:592977294(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
확인해 보면 출발지 주소가 설정한대로 변경되었다.
4) -R 옵션을 사용하지 않으면 모든 범위에 적용된다.
# bittwiste -I test.pcap -O rigel.pcap -T ip -s 179.222.51.219,192.168.0.0
input file: test.pcap
output file: rigel.pcap
2040 packets (1578854 bytes) written
3번과 같은 예제인데, 편집된 패킷 개수를 보면 2040 개이다. -R 을 사용하지 않아 전체에 적용이 된 것이다.
5) 포트 번호 변경
# bittwiste -I test.pcap -O rigel.pcap -R 1 -T tcp -d 80,8080
input file: test.pcap
output file: rigel.pcap
1 packets (66 bytes) written
6) Payload 삽입하기
# echo "hahaha" | xxd
0000000: 6861 6861 6861 0a hahaha.
-X 옵션을 통해 위 HEX 값을 삽입.
# bittwiste -I test.pcap -O rigel.pcap -R 1 -L 4 -X 686168616861 -T tcp
input file: test.pcap
output file: rigel.pcap
1 packets (72 bytes) written
편집된 rigel.pcap 을 아래와 같이 확인해 보면 Payload 가 삽입된 걸 볼 수 있다.
# tcpdump -r rigel.pcap -XX
reading from file rigel.pcap, link-type EN10MB (Ethernet)
10:26:39.659705 IP 179.222.51.219.3645 > 147.245.206.234.www: S 592977294:592977300(6) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
0x0000: 001e 4a48 3900 0024 2119 7756 0800 4500 ..JH9..$!.wV..E.
0x0010: 003a 7ee5 4000 3006 813f b3de 33db 93f5 .:~.@.0..?..3...
0x0020: ceea 0e3d 0050 2358 1d8e 0000 0000 8002 ...=.P#X........
0x0030: 2000 7bdf 0000 0204 05b4 0103 0302 0101 ..{.............
0x0040: 0402 6861 6861 6861 ..hahaha
이외 옵션을 잘못사용하면 아래와 같은 에러메시지를 얻게 된다.
bittwiste: invalid header specification
이 도구를 소개하면서 느낀것은 다른 도구들보다 사용이 쉬웠다. 도움말만 참고해서도 쉽게 사용할 수 있을
만큼 간단하고 기능또한 필요한 것으로 잘 모아져 있다.
패킷을 편집하고 생성하는 기능을 원한다면 이 도구가 큰 도움이 될 것이다.