2011-12-09 40 views
6

是否有一种自动方式(无论是在tcpdump还是通过一个辅助应用程序在那里)来生成一个pcap文件,其中只包含以太网,IP和第4层(在我的情况下是TCP)头,以便没有有效载荷/应用程序数据在生成的PCAP?我发现由于标头大小经常不同,因此选择不会捕获任何有效负载数据的捕获大小是不可能的。从tcpdump剥离有效载荷?

回答

9

你可以用Python的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 

有效载荷溶出

在Linux上运行此为根...

#!/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) 

[[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 

tcpdump以上,请注意 “XX字节失踪了!”消息。这是因为我们已经删除了TCP有效负载。

0

如果简单截断会为你工作,你可以使用:

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

以后你可以使用Wireshark分析它。

+0

不幸的是,由于TCP选项字段,OP是正确的,没有办法可靠地预测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

这听起来更像是另一个问题,而不是答案。也许考虑[问](http://stackoverflow.com/questions/ask)另一个。 – adamdunson