python抓包进行流量分析_使用Python实现windows下的抓包与解析

系统环境:windows7,选择windows系统是因为我对自己平时日常机器上的流量比较感兴趣

python环境:python2.7 ,这里不选择python3的原因,是因为接下来要用到的scapy包在python3中安装较于python2要麻烦得多。如果你习惯于用python3,数据包的分析完全可以放在3下面做,因为抓包和分析是两个完全独立的过程。

需要的python包:scapy和dpkt

抓包代码:

from scapy.sendrecv import sniff

from scapy.utils import wrpcap

dpkt = sniff(count = 100) #这里是针对单网卡的机子,多网卡的可以在参数中指定网卡

wrpcap("demo.pcap", dpkt)

你没看错,仅仅只需要两行代码就可以实现一个简单的抓包功能。sniff函数负责嗅探数据包,而wrpcap函数将抓取到的数据包保存起来。

数据包的分析:

import dpkt

import socket

import datetime

def printPcap(pcap):

try:

for timestamp, buf in pcap:

eth = dpkt.ethernet.Ethernet(buf) #获得以太包,即数据链路层包

print("ip layer:"+eth.data.__class__.__name__) #以太包的数据既是网络层包

print("tcp layer:"+eth.data.data.__class__.__name__) #网络层包的数据既是传输层包

print("http layer:" + eth.data.data.data.__class__.__name__) #传输层包的数据既是应用层包

print('Timestamp: ',str(datetime.datetime.utcfromtimestamp(timestamp))) #打印出包的抓取时间

if not isinstance(eth.data, dpkt.ip.IP):

print('Non IP Packet type not supported %s' % eth.data.__class__.__name__)

continue

ip = eth.data

do_not_fragment =bool(ip.off & dpkt.ip.IP_DF)

more_fragments =bool(ip.off & dpkt.ip.IP_MF)

fragment_offset = ip.off & dpkt.ip.IP_OFFMASK

print('IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)' % (socket.inet_ntoa(ip.src), socket.inet_ntoa(ip.dst), ip.len, ip.ttl, do_not_fragment, more_fragments,fragment_offset))

except:

pass

def main():

f =open('demo.pcap','rb')

pcap = dpkt.pcap.Reader(f)

printPcap(pcap)

if __name__ =='__main__':

main()

结果显示:

这是我打开360的路由器卫士时抓取的数据包。这个软件在打开时与路由器通信,获得连接路由器的电脑和手机的列表。192.168.1.100是我的机器,192.168.1.1是路由器地址,其中可以看到windows发送的数据包的ttl值默认是128,其他的系统默认是64,与我们的理论常识是相符的。

TCP/IP五层分层的结构和封包过程,附图二张:

总结

以上所述是小编给大家介绍的使用Python实现windows下的抓包与解析,希望对大家有所帮助

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值