抓取网页视频(根据上篇文章的思路,我用了*敏*感*词*网卡流量的方式来改进了我的程序)

优采云 发布时间: 2021-12-27 10:08

  抓取网页视频(根据上篇文章的思路,我用了*敏*感*词*网卡流量的方式来改进了我的程序)

  按照上一篇的思路,我用监控网卡流量的方法来改进我的程序。速度有了很大的提高。

  想法

  下图是我用wireshark做的一个实验。在请求路径中留下带有.mp4、.flv的请求,你得到的就是请求的视频资源。

  

  用wireshark试验了一下,确定这种抓包的方法可行,就开始用python写抓包代码。

  我使用python的pcap和dpkt包来分析网卡流量。首先是使用pcap监控我的网卡,设置pcap过滤器只处理HTTP请求,因为视频地址在HTTP请求中。我在HTTP请求的地址中找到了收录

.flv的请求,然后就可以得到视频的url地址了。

  实验

  代码比较短,我直接贴上代码。关于pcap和dpkt的使用我参考了这篇文章,但是这篇文章应该是抄袭别人的。当我搜索它时,我找到了一个更好的,但是当我写这篇文章时,我找不到更好的。,只能发这个不太好。

  当然代码也会放到我的Github上,哈哈~

  #encoding: utf8

import pcap

import dpkt

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

#设置*敏*感*词*过滤器 HTTP请求的TCP头为GET 或者 HTTP

pc.setfilter('tcp[20:2]=0x4745 or tcp[20:2]=0x4854')

print "starting capture"

for ptime,pdata in pc: #ptime为收到时间,pdata为收到数据

#对抓到的以太网V2数据包(raw packet)进行解包

p=dpkt.ethernet.Ethernet(pdata)

if p.data.__class__.__name__=='IP':

# ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))

if p.data.data.__class__.__name__=='TCP':

if p.data.data.dport==80:

header = p.data.data.data # by gashero

headerArr = header.split('\r\n')

url = headerArr[0].split(' ')[1]

host = headerArr[1].split(' ')[1]

requestUrl = host + url

if requestUrl.find('.flv') != -1:

# print headerArr

print requestUrl

  运行结果图:

  

  未解决的问题是优酷等对视频进行分片的网站无法获取完整的视频。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线