python+pypcap+dpkt抓取IP数据包

1.简介
pypcap库是一款基于libpcap封装的为python语言提供接口的抓包库。
dpkt则是用来解析数据包的库。
pip install pypcap
pip install dpkt

2.

#coding:utf-8
import pcap
import dpkt
import time
import math
import os

sniffer = pcap.pacp(name=None,promisc=True,immediate=True) #嗅探器,可以没有参数,没用,sniffer一直在抓包并把数据源源不断存入内存

#一个个解包,循环
for timestamp,raw_buf in sniffer: #timestamp时间戳,raw_buf包中的原始数据
    output1 = {}
    output2 = {}
    output3 = {}
    output4 = {}
    eth = dpkt.ethernet.Ethernet(raw_buf) #dpkt.ethernet.ethernet()是利用dpkt库解包的方法。这句话的含义是解析以太网帧(即第一次剥离),可以得到源mac地址、目的mac地址等内容。
    #判断这个包是不是IP数据报
    if not isinstance(eth.data,dpkt.ip.IP):
        print 'Non IP Packet type not supported %s\n' % eth.data._class_._name_
        continue
    #Grab ip packet
    packet = eth.data. #让以太网帧的ip数据报部分等于一个新的对象,packet

    #取出分片信息
    df = bool(packet.off & dpkt.ip.IP_DF)
    mf = bool(packet.off & dpkt.ip.IP_MF)
    offset = packet.off & dpkt.ip.IP_OFFMASK

    output1 = {'time':time,strftime("%Y-%m-%d %H:%M:%S",(time.localtime(timestamp)))}. #直接输出timestamp,造成的问题便是输出的是一串秒数。这里使用一个time.localtime()函数进行转换,再用time.strftime格式化成固定字符串进行输出
    output2 = {'src':'%d.%d.%d.%d'%tuple(map(ord,list(packet.src))),'dst':'%d.%d.%d.%d'%tuple(map(ord,list(packet.dst)))}. #直接输出packet.src和packet.dst,那么我们得到的将会是一串/0x16/x98/0xaf 这样的乱码
    #python的编码问题。这里使用了一个语句,'%d.%d.%d.%d'%tuple(map(ord,list(packet.src))) 来对packet.src进行转换。%后面那串的大意就是将packet.src转换为list列表,然后使用ord方法返回字符在ASCII码中对应整数,再将这串整数转化为一个元组,'%d.%d.%d.%d'% 的意思是将后面的元组按单引号中的格式输出
    output3 = {'protocol':packet.p.'len':packet.len,'ttl':packet.ttl}
    output4 = {'df':df,'mf':mf,'offset':offset,'checksum':packet.sum}
    print (output1)
    print (output2)
    print (output3)
    print (output4)



原帖链接:https://blog.csdn.net/weixin_39138707/article/details/74612637

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值