设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 9282|回复: 4
打印 上一主题 下一主题

网上找了一段读取.pcap文件的程序是错的 但我不知道怎么改

[复制链接]

1

主题

0

好友

30

积分

版主

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2014-2-9 20:30:23 |只看该作者 |倒序浏览
import struct
fpcap = open('test.pcap','rb')
ftxt = open('result.txt','w')
string_data = fpcap.read()
#pcap文件包头解析
pcap_header = {}
pcap_header['magic_number'] = string_data[0:4]
pcap_header['version_major'] = string_data[4:6]
pcap_header['version_minor'] = string_data[6:8]
pcap_header['thiszone'] = string_data[8:12]
pcap_header['sigfigs'] = string_data[12:16]
pcap_header['snaplen'] = string_data[16:20]
pcap_header['linktype'] = string_data[20:24]
#把pacp文件头信息写入result.txt
ftxt.write("Pcap文件的包头内容如下: \n")
for key in ['magic_number','version_major','version_minor','thiszone',
            'sigfigs','snaplen','linktype']:
    ftxt.write(key+ " : " + repr(pcap_header[key])+'\n')
         
#pcap文件的数据包解析
step = 0
packet_num = 0
packet_data = []
pcap_packet_header = {}
i =24
while(i<len(string_data)):
     
      #数据包头各个字段
      pcap_packet_header['GMTtime'] = string_data[i:i+4]
      pcap_packet_header['MicroTime'] = string_data[i+4:i+8]
      pcap_packet_header['caplen'] = string_data[i+8:i+12]
      pcap_packet_header['len'] = string_data[i+12:i+16]
      #求出此包的包长len
      packet_len = struct.unpack('I',pcap_packet_header['len'])[0]
      #写入此包数据
      packet_data.append(string_data[i+16:i+16+packet_len])
      i = i+ packet_len+16
      packet_num+=1
   
   
   
   
#把pacp文件里的数据包信息写入result.txt
for i in range(packet_num):
    #先写每一包的包头
    ftxt.write("这是第"+str(i)+"包数据的包头和数据:"+'\n')
    for key in ['GMTtime','MicroTime','caplen','len']:
        ftxt.write(key+' : '+repr(pcap_packet_header[key])+'\n')
    #再写数据部分
    ftxt.write('此包的数据内容'+repr(packet_data)+'\n')
ftxt.write('一共有'+str(packet_num)+"包数据"+'\n')
      
ftxt.close()
fpcap.close()


这样pcap_packet_header这个字典每一次输出的都是最后一次循环的值,字典变量如何添加列表才能每次添加不一样的值?
回复

使用道具 举报

1

主题

0

好友

30

积分

版主

Rank: 7Rank: 7Rank: 7

沙发
发表于 2014-2-9 21:05:09 |只看该作者
解决了
不过你还是说说吧
我感觉我解决的格式不太好
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2014-2-10 11:19:48 |只看该作者
码界女神 发表于 2014-2-9 21:05
解决了
不过你还是说说吧
我感觉我解决的格式不太好

把写入文件那段代码放到while循环里,每循环一次都把结果往文件里写,而不是循环完了最后再写一次
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

30

积分

版主

Rank: 7Rank: 7Rank: 7

地板
发表于 2014-2-11 12:43:08 |只看该作者
字典变量好难理解
改巴改巴 总算10进制输出了
这速度 比我人工录入都慢了
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2014-2-11 13:13:29 |只看该作者
码界女神 发表于 2014-2-11 12:43
字典变量好难理解
改巴改巴 总算10进制输出了
这速度 比我人工录入都慢了

这叫一劳永逸
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-23 05:02 , Processed in 0.015233 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部