2011-12-09 2 views
6

페이로드/애플리케이션 데이터가 없도록 이더넷, IP 및 레이어 4 (내 경우에는 TCP) 헤더 만 포함 된 pcap 파일을 생성하는 자동화 된 방법 (tcpdump 또는 헬퍼 앱을 통해)이 있습니까? 결과 pcap에? 헤더 크기가 종종 다양하기 때문에 페이로드 데이터를 포착하지 않는 캡처 크기를 선택하는 것은 불가능하다는 것을 알았습니다. 간단한 잘라 내기 당신을 위해 작동 할 경우tcpdump에서 페이로드 제거?

답변

9

당신은 파이썬의 scapy 모듈과 매우 쉽게 TCP 페이로드를 제거 할 수

[[email protected] tshark_wd]$ tcpdump -n -r sample.pcap 
reading from file sample.pcap, link-type EN10MB (Ethernet) 
00:25:42.443559 IP 192.168.12.237.1052 > 192.168.12.236.22: Flags [P.], 
    seq 2445372969:2445373021, ack 1889447842, win 63432, length 52 
00:25:42.443607 IP 192.168.12.236.22 > 192.168.12.237.1052: Flags [.], 
    ack 52, win 65535, length 0 
00:25:42.443980 IP 192.168.12.236.22 > 192.168.12.237.1052: Flags [P.], 
    seq 1:389, ack 52, win 65535, length 388 

STRIPPING PAYLOAD

는 ... 리눅스 루트로

을이 프로그램을 실행하기 전에
#!/usr/bin/env python 
from scapy.all import * 
INFILE = 'sample.pcap' 
OUTFILE = 'stripped.pcap' 
paks = rdpcap(INFILE) 
for pak in paks: 
    pak[TCP].remove_payload() 
wrpcap(OUTFILE, paks) 
,363,210

위의 tcpdump에서

[[email protected] tshark_wd]$ tcpdump -n -r stripped.pcap 
reading from file sample.pcap, link-type EN10MB (Ethernet) 
00:25:42.443559 IP truncated-ip - 52 bytes missing! 192.168.12.237.1052 
    > 192.168.12.236.22: Flags [P.], seq 2445372969:2445373021, 
    ack 1889447842, win 63432, length 52 
00:25:42.443607 IP 192.168.12.236.22 > 192.168.12.237.1052: Flags [.], 
    ack 52, win 65535, length 0 
00:25:42.443980 IP truncated-ip - 388 bytes missing! 192.168.12.236.22 
    > 192.168.12.237.1052: Flags [P.], seq 1:389, 
    ack 52, win 65535, length 388 

후, "XX 바이트가 누락!"통지 메시지. 그것은 우리가 TCP 페이로드를 제거했기 때문입니다.

0

, 당신은 사용할 수 있습니다

tcpdump -i eth0 -s 96 -w test1.pcap 

나중에에 Wireshark와 함께 분석 할 수 있습니다.

+0

불행히도 OP가 올바르지 만 TCP 옵션 필드로 인해 TCP 헤더의 길이를 신뢰할 수있게 예측할 수있는 방법이 없습니다. 대부분 IP/TCP 헤더의 유일한 부분으로 길이가 다를 수 있습니다. 고정 된 snaplen 값은 항상 올바른 위치에서 TCP 페이로드를자를 것을 보장하지 않습니다. –

-2

내 솔루션은 다음과 같습니다. 다른 사람들이 외부 라이브러리 나 잘림없이 어떻게하는지 듣고 싶습니다. 내가 Scapy 문서에서 remove_payload() 함수를 찾을 수 없어서 다른 사람들이 이것을 어떻게 수행했는지 듣고 싶다.이 대답을 사용할 수 없게 만든다.

#read pcap file 
pkts = rdpcap("packet-capture.pcap") 

#write packet with payload "XXXXXXXXXX" 
for pkt in pkts: 
    pkt.load = "XXXXXXXXXX" 

#write new pcap 
wrpcap("new.pcap", pkts) 

이의 문제는, tcpdump를 읽을 때, 그것은 바이트가없는 잎이다! src IP에 대해서는입니다. 나는

pkts[_packet_num].load 

가 변경되지 않은 것처럼 보이는, 그래서 전체 캡처를 다시 생성 할 수있는 방법이 있나요 통해 infromation는 여전히 scapy를 사용하고 확인할 수 있습니까?

+0

답변보다 다른 질문처럼 들립니다. 아마도 다른 [asking] (http://stackoverflow.com/questions/ask)을 고려해보십시오. – adamdunson