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

优采云 发布时间: 2021-10-17 18:30

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

  根据上一篇文章的思路,我用监控网卡流量的方法来改进我的程序。速度大大提高。

  思考

  下图是我用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人工客服


线