我捕获了一个pcap文件并将其显示在wireshark上.我想分析那些'Length'列等于443的udp数据包.
在wireshark上,我试图找到适当的过滤器.
udp && length 443 # invalid usage
udp && eth.len == 443 # wrong result
udp && ip.len == 443 # wrong result
Run Code Online (Sandbox Code Playgroud)
顺便说一句,wireshark的过滤器可以直接应用于libpcap的过滤器吗?
我们在linux上使用libpcap嗅探数据包我们在每个数据包上获得的头部如下所示:
struct pcap_pkthdr {
struct timeval ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet (off wire) */
};
Run Code Online (Sandbox Code Playgroud)
现在,我的理解是caplen是我们捕获的数据的长度,而len是线路上数据包的长度.在某些情况下(例如,在打开pcap设备时将snaplen设置得太低),我们可能只捕获数据包的一部分,该长度将为'caplen',而'len'为原始长度.因此,caplen应该等于或小于len,但绝不会大于len.
这是正确的理解吗?我们在某些机器上看到了caplen> len
如何使用python从.pcap文件或接口解析数据包?
我特意寻找使用文档齐全的库的解决方案.
我试图用scapy发送以前记录的流量(以pcap格式捕获).目前我被困在剥离原始的Ether层.流量是在另一台主机上捕获的,我基本上需要更改IP和Ether层src和dst.我设法替换IP层并重新计算校验和,但以太层给我带来了麻烦.
任何人都有经验重新发送来自捕获文件的数据包,并对IP和以太层(src和dst)应用了更改?此外,捕获相当大的Gb,如此具有这样的流量的scapy性能?
如何连接两个tcpdump文件,以便一个流量将在文件中出现?具体来说,我想"加倍"一个tcpdump文件,以便所有会话将一个接一个地重复顺序几次.
我在DD-WRT路由器上运行tcpdump,以便从手机中捕获上行链路数据.我想只听一些mac地址.为此,我尝试使用类似于Wireshark的语法运行命令:
tcpdump -i prism0 ether src[0:3] 5c:95:ae -s0 -w | nc 192.168.1.147 31337
这样我就可以收听所有具有初始mac地址的设备5c:95:ae.
问题是语法错误,我想知道是否有人知道正确的语法来获得我想要的东西.
我想通过他们的域过滤我的pcap文件.我的意思是,我希望看到网站上的数据包以".com",".org"或".net"结尾.
我试过:dns包含"com",ip.src_host == com,ip.src_host == com,http包含"com".他们都没有正常工作.
我有一堆用tcpdump创建的pcap文件.我想将这些存储在数据库中,以便于查询,索引等.我认为mongodb可能是一个不错的选择,因为以Wireshark/TShark将它们呈现为JSON文档的方式存储数据包似乎很自然.
应该可以使用tshark创建PDML文件,解析它们并将它们插入到mongodb中,但我很好奇是否有人知道现有/其他解决方案.
我试图通过python中的pcap文件进行解析.我的目标是能够提取TCP或UDP文件的类型以及它们开始/结束的时间.有没有人在任何某些软件包中有任何建议可能对它们有用,并且有关于它们的文档或一般性的建议吗?
我在PCAP文件中捕获了H264流,并尝试从数据创建媒体文件.容器并不重要(avi,mp4,mkv,...).
当我使用videosnarf或rtpbreak(结合在每个数据包之前添加00 00 00 01的python代码)然后ffmpeg时,仅当输入帧速率恒定(或接近常量)时结果才可以.但是,当输入为vfr时,结果播放得太快(并且在相同的罕见情况下太慢).
例如:
videosnarf -i captured.pcap -c
ffmpeg -i H264-media-1.264 output.avi
在对该问题进行一些调查后,我现在相信,由于videosnarf(和rtpbreak)正在从数据包中删除RTP标头,因此时间戳丢失,ffmpeg将输入数据称为cbr.
注意:所有工作都是离线完成的,输出没有限制.它可以是cbr/vbr,任何可播放的容器和转码.我唯一的"限制":它应该全部运行在Linux上...
谢谢你
一些额外的信息:
由于没有为FFMPEG提供时间戳数据,我决定尝试不同的方法:跳过videosnarf并使用Python代码将数据包直接传送到ffmpeg(使用"-f -i - "选项)但是然后它拒绝接受它,除非我提供SDP文件...
我如何提供SDP文件?它是一个额外的输入文件?("-i config.sdp")
以下代码尝试执行上述操作是不成功的:
import time
import sys
import shutil
import subprocess
import os
import dpkt
if len(sys.argv) < 2:
print "argument required!"
print "txpcap <pcap file>"
sys.exit(2)
pcap_full_path = sys.argv[1]
ffmp_cmd = ['ffmpeg','-loglevel','debug','-y','-i','109c.sdp','-f','rtp','-i','-','-na','-vcodec','copy','p.mp4']
ffmpeg_proc = subprocess.Popen(ffmp_cmd,stdout = subprocess.PIPE,stdin = subprocess.PIPE)
with open(pcap_full_path, "rb") as pcap_file:
pcapReader = dpkt.pcap.Reader(pcap_file)
for ts, data in pcapReader: …Run Code Online (Sandbox Code Playgroud)