相关推荐
pcap文件怎么打开_pcap文件如何批量处理统计每个文件的总数据量,如果用wireshark什么的能写bash什么的么?
2024-11-10 23:02

请使用wpdpack这个开发包,可以获取一些信息的,就是内部信息需要自己解析了,wireshark里面是wireshark工具帮你解析的,而pcap属于tcpmp这种存储格式,你要么自己写解析,要么到网上找一下别人写好的解析工具。

pcap文件怎么打开_pcap文件如何批量处理统计每个文件的总数据量,如果用wireshark什么的能写bash什么的么?

谁使用过安卓手机端的wireshark工具

安卓的抓包工具,你可以看看教程:我们使用数据线将Android手机连接到电脑端,打开windows命令提示符窗口。使用命令打开Android所在的文件夹,我的是在D盘根目录下,因为我们要使用到Adb.exe,所以我们要一直打开到adb所在目录。将tcpmp程序copy至android手机(该命令前面那个目录文件为本地地址,后面那个目录为目的手机端地址)修改tcpmp的权限

(1)先输入adbshell进入权限修改,若是在4.0之后的系统,再输入完adbshell之后,我们还需要输入su命令,在运行su指令后,手机终端桌面会出现相应提示信息以确认您对root操作的认可。

(2)当出现#后,输入chmod/data/local/tcpmp运行tcpmp进行抓包

#/data/local/tcpmp-p-vv-s0-w/sdcard/capture.pcap

在手机端执行相应需要进行抓包分析的操作,执行完成后在命令提示符窗口执行Ctrl+C中断抓包进程。将抓包结果复制至本地(前面那个目录为手机端地址,后面那个目录为本地地址)使用Wireshark等工具查看抓包文件capture.pcap,以下是完整截图。

如何利用libpcap和Python嗅探数据包

一提到Python获取数据包的方式,相信很多Python爱好者会利用Linux的libpcap软件包或利用Windows下的WinPcap可移植版的方式进行抓取数据包,然后再利用dpkt软件包进行协议分析,我们这里想换一个角度去思考:

1.Python版本的pcap存储内存数据过小,也就是说缓存不够,在高并发下容易发生丢包现象,其实C版本的也同样存在这样的问题,只不过Python版本的缓存实在是过低,让人很郁闷。

2.dpkt协议分析并非必须,如果你对RFC和RFC等协议熟悉的话,完全可以使用struct.unpack的方式进行分析。

如果你平常习惯使用tcpmp抓取数据包的话,完全可以使用它来代替pcap软件包,只不过我们需要利用tcpmp将抓取的数据以pcap格式进行保存,说道这里大家一定会想到Wireshark工具,具体命令如下:

-s0-ieth1-whttps://blog.51cto.com/pcap/tcpmp.pcap--W5

我们首先需要对pcap文件格式有所了解,具体信息大家可以参考其他资料文档,我这里只说其重要的结构体组成,如下:

sturctpcap_file_headerDWORDmagic;

WORDversion_major;

WORDversion_minor;

DWORDthiszone;

DWORDsigfigs;

DWORDsnaplen;

DWORDlinktype;structpcap_pkthdrstructtimevalts;

DWORDcaplen;

DWORDlen;structtimevalDWORDGMTtime;

DWORDmicroTime;这里需要说明的一点是,因为在Python的世界里一切都是对象,所以往往Python在处理数据包的时候感觉让人比较麻烦。Python提供了几个libpcapbind,http://monkey.org/~gsong/pypcap/这里有一个最简单的。在windows平台上,你需要先安装winpcap,如果你已经安装了Ethereal非常好用。一个规范的抓包过程:

importpcap

importdpkt

pc=pcap.pcap()#注,参数可为网卡名,如eth0

pc.setfilter('')#设置监听过滤器

forptime,pdatainpc:#ptime为收到时间,pdata为收到数据

printptime,pdata#...

对抓到的以太网V2数据包(rawpacket)进行解包:

ifp.data.__class__.__name__=='IP':

ip='%d.%d.%d.%d'%tuple(map(ord,list(

__class__.__name__=='TCP':

ifdata.dport==80:

一些显示参数nrecv,ndrop,nifdrop=pc.stats()返回的元组中,第一个参数为接收到的数据包,第二个参数为被核心丢弃的数据包。

至于对于如何监控tcpmp生成的pcap文件数据,大家可以通过pyinotify软件包来实现,如下:

classPacker(pyinotify.ProcessEvent):

def__init__(self,proct):

self.proct=proct

self.process=None

defprocess_IN_CREATE(self,event):

logger.debug("createfile:%sinqueue"%self.process_IF_START_THREAD(event))

defprocess_IN_MODIFY(self,event):

self.process_IF_START_THREAD(event)

logger.debug("modifyfile:%sinqueue"%self.process_IF_START_THREAD(event))

defprocess_IN_DELETE(self,event):

filename=

logger.debug("deletefile:%s"%filename)

defprocess_IF_START_THREAD(self,event):

filename=

iffilename!=self.process:

self.process=filename

>1:

try:

logger.debug("createconsumerproct.qsize:%s"%

consumer=Consumer(self.proct)

consumer.start()

exceptException,errmsg:

logger.error("createconsumerfailed:%s"%errmsg)

returnfilename

classFactory(object):

def__init__(self,proct):

self.proct=proct

self.manager=pyinotify.WatchManager()

self.mask=_DELETE|pyinotify.IN_MODIFY

defwork(self):

try:

try:

notifier=pyinotify.ThreadedNotifier(self.manager,Packer(self.proct))

notifier.start()

_watch("https://blog.51cto.com/pcap",self.mask,rec=True)

notifier.join()

exceptException,errmsg:

logger.error("createnotifierfailed:%s"%errmsg)

exceptKeyboardInterrupt,errmsg:

logger.error("factoryhasbeenterminated:%s"%errmsg)

在获得要分析的pcap文件数据之后,就要对其分析了,只要你足够了解pcap文件格式就可以了,对于我们来讲只需要获得TCP数据段的数据即可,如下:

classWriter(threading.Thread):

def__init__(self,proct,stack):

threading.Thread.__init__(self)

self.proct=proct

self.stack=stack

self.pcap_pkthdr={}

defrun(self):

whileTrue:

filename=

try:

f=open(filename,"rb")

readlines=f.read()

f.close()

offset=24

whilelen(readlines)>offset:

self.pcap_pkthdr["len"]=readlines[offset+12:offset+16]

try:

length=struct.unpack("I",self.pcap_pkthdr["len"])[0]

[offset+16:offset+16+length])

offset+=length+16

exceptException,errmsg:

logger.error("unpackpcap_pkthdrfailed:%s"%errmsg)

exceptIOError,errmsg:

logger.error("openfilefailed:%s"%errmsg)

在获得TCP数据段的数据包之后,问题就简单多了,根据大家的具体需求就可以进行相应的分析了,我这里是想分析其HTTP协议数据,同样也借助了dpkt软件包进行分析,如下:

defworker(memcache,packet,local_address,remote_address):

try:

ifp.data.__class__.__name__=="IP":

srcip="%d.%d.%d.%d"%tuple(map(ord,list(

dstip="%d.%d.%d.%d"%tuple(map(ord,list(

__class__.__name__=="TCP":

tcpacket=

iftcpacket.dport====local_address:

srcport=tcpacket.sport

key=srcip+":"+str(srcport)

iftcpacket.data:

ifnotmemcache.has_key(key):

memcache[key]={}

ifnotmemcache[key].has_key("response"):

memcache[key]["response"]=None

ifmemcache[key].has_key("data"):

memcache[key]["data"]+=tcpacket.data

else:

memcache[key]["data"]=tcpacket.data

else:

ifmemcache.has_key(key):

memcache[key]["response"]=[key]["data"])

try:

stackless.tasklet(connection)(memcache[key]["response"],local_address,remote_address)

stackless.run()

exceptException,errmsg:

logger.error("connectremoteremote_addressfailed:%s",errmsg)

logger.debug("oldheaders(nonecontent-length):%s",memcache[key]["response"])

memcache.pop(key)

exceptException,errmsg:

logger.error(":%s",errmsg)

如果大家只是想单纯的获取IP地址、端口、流量信息,那么问题就更简单了,这里只是抛砖引玉。另外再提供一段代码供参考:

importpcap,dpkt,struct

importbinascii

defmain():

a=pcap.pcap()

a.setfilter('udpportrange-')

try:

fori,pdataina:

src='%d.%d.%d.%d'%tuple(map(ord,list(

dst='%d.%d.%d.%d'%tuple(map(ord,list(

sport=

dport=

qq=int(binascii.hexlify([7:11]),16)

print'QQ:%d,From:%s:%d,To:%s:%d'%(qq,src,sport,dst,dport)

exceptException,e:

print'%s'%e

n=raw_input()

if__name__=='__main__':

    以上就是本篇文章【pcap文件怎么打开_pcap文件如何批量处理统计每个文件的总数据量,如果用wireshark什么的能写bash什么的么?】的全部内容了,欢迎阅览 ! 文章地址:http://tiush.xhstdz.com/quote/70854.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://tiush.xhstdz.com/mobile/ , 查看更多   
发表评论
0评