tcpdump 에서 -xX 와 같이 출력되는 형태의 데이터를 가져오고자 한다.
$ tcpdump -xX -n -r test.pcap
에서 출력되는 다음의 내용을 대상으로 가정해 보겠다.
0x0000: 4500 003e 344e 4000 4011 5d49 c0a8 00f0 E..>4N@.@.]I....
0x0010: a87e 3f01 bddb 0035 002a 7cef 8555 0100 .~?....5.*|..U..
0x0020: 0001 0000 0000 0000 0377 7777 0667 6f6f .........www.goo
0x0030: 676c 6502 636f 026b 7200 001c 0001 gle.co.kr.....
대략 추정되는 것과 같이 DNS 패킷이다. 자, 그럼 일단 Scapy 를 실행하고 'IP(import_hexcap())' 를 이용해서 패킷 HEX 데이터를 로드해 보자. tcpdump 의 텍스트 내용을 복사하고 import_hexcap() 를 수행후 그 상태에서, 바로 붙여 넣기를 한다. 그리고 Ctrl+D 를 누른다. Ctrl+C 를 누르면 안된다. 붙여 넣기가 완료되면 그 아래에 바로 해당 값들이 변환되어 Scapy 에서 보기 쉽게 표현해 준다.
>>> IP(import_hexcap())
0x0000: 4500 003e 344e 4000 4011 5d49 c0a8 00f0 E..>4N@.@.]I....
0x0010: a87e 3f01 bddb 0035 002a 7cef 8555 0100 .~?....5.*|..U..
0x0020: 0001 0000 0000 0000 0377 7777 0667 6f6f .........www.goo
0x0030: 676c 6502 636f 026b 7200 001c 0001 gle.co.kr.....
^D
<IP version=4L ihl=5L tos=0x0 len=62 id=13390 flags=DF frag=0L ttl=64 proto=udp chksum=0x5d49 src=192.168.0.240 dst=168.126.63.1 options=[] |<UDP sport=48603 dport=domain len=42 chksum=0x7cef |<DNS id=34133 qr=0L opcode=QUERY aa=0L tc=0L rd=1L ra=0L z=0L rcode=ok qdcount=1 ancount=0 nscount=0 arcount=0 qd=<DNSQR qname='www.google.co.kr.' qtype=AAAA qclass=IN |> an=None ns=None ar=None |>>>
>>>
한눈에 보기 쉽게 정리가 된다. 자, 그럼 이제 무엇을 할 수 있겠는가? 이렇게 로드가 되었다면 이제 이 데이터는 내 마음대로 수정이 가능한 것이다. 데이터는 원하는 형태로 조정하고 전송시킬 수도 있게 되는 것이다. 예를 들어, 아래 그림과 같이 _.show() 해서 보면 패킷 구조를 한눈에 쉽게 파악할 수도 있다.
만약 특정 값을 수정한다면 아래와 같이 쉽게 할 수도 있다. 로드한 값을 a 에 저장하고 UDP 의 목적지 포트인 53을 9999로 변경해 보고 확인한 것이다.
53
>>> a[UDP].dport = 9999
>>> a
<IP version=4L ihl=5L tos=0x0 len=62 id=13390 flags=DF frag=0L ttl=64 proto=udp chksum=0x5d49 src=192.168.0.240 dst=168.126.63.1 options=[] |<UDP sport=48603 dport=9999 len=42 chksum=0x7cef |<DNS id=34133 qr=0L opcode=QUERY aa=0L tc=0L rd=1L ra=0L z=0L rcode=ok qdcount=1 ancount=0 nscount=0 arcount=0 qd=<DNSQR qname='www.google.co.kr.' qtype=AAAA qclass=IN |> an=None ns=None ar=None |>>>
Scapy 의 활용도는 무궁무진 하다. 패킷 데이터를 쉽고, 간단하게 처리할 수 있으니 이 얼마나 편하던가 :-) 앞으로도 Scapy 기능에 대해서 가끔씩 소개할 예정이다.
// www.packetinside.com/search?updated-max=2011-06-02T00:51:00%2B09:00&max-results=7
'Network' 카테고리의 다른 글
네트워크 패킷 인젝션,캡쳐 도구 Packit (0) | 2017.01.08 |
---|---|
스노트(Snort) 룰을 파싱하여 패킷 생성, 전송하기 (0) | 2017.01.08 |
Tcpdump 의 출력내용을 내가 원하는 형태로 바꾸어 보자. (0) | 2017.01.08 |
netflow, sflow, jflow, cflow 비교 (0) | 2017.01.08 |
PCAP 파일에서 UNIX 도구를 이용한 IP 주소 요약 (0) | 2017.01.08 |