目录

声明 

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!

一 什么是websocket

二 websocket的原理

三 WebSocket 优点:

四 websocket与http的关系

相同点:

不同点:

五 websocket解决的问题

http存在的问题

websocket的改进

WebSocket有以下特点:

六 案例:某音直播间数据抓取

重点:

结果:

总结

声明 

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!

常用协议:

常用通信协议有http/https, websocket/wss等等,常用的数据传输协议有json,xml,protobuf,本章内容讲解基于websocket协议和protobuf协议的数据抓取.

websocket与wss的关系类似http和https  websocket采用双向通信模式,客户端与服务器建立连接后,无论是客户端还是服务端都可以随时将数据发送给对方.

一 什么是websocket

1WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)

2它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的

3Websocket是一个持久化的协议

4在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

二 websocket的原理

1websocket约定了一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一个类似tcp的连接,从而方便它们之间的通信

2在websocket出现之前,web交互一般是基于http协议的短连接或者长连接

3websocket是一种全新的协议,不属于http无状态协议,协议名为"ws"

三 WebSocket 优点:

1较少的控制开销:只需要进行一次握手,携带一次请求头信息即可,后续只传输数据即可,相比 HTTP 每次请求都携带请求头,WebSocket 非常省资源。

2更强的实时性:由于服务器可以主动推送消息,这使得延迟变得可以忽略不计,相比 HTTP 轮询的时间间隔,WebSocket 可以在相同的时间内进行多次传输.

四 websocket与http的关系

相同点:

都是基于tcp的,都是可靠性传输协议 都是应用层协议

不同点:

WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息 HTTP是单向的 WebSocket是需要浏览器和服务器握手进行建立连接的 而http是浏览器发起向服务器的连接,服务器预先并不知道这个连接

五 websocket解决的问题

http存在的问题

http是一种无状态协议,每当一次会话完成后,服务端都不知道下一次的客户端是谁,需要每次知道对方是谁,才进行相应的响应,因此本身对于实时通讯就是一种极大的障碍 http协议采用一次请求,一次响应,每次请求和响应就携带有大量的header头,对于实时通讯来说,解析请求头也是需要一定的时间,因此,效率也更低下 最重要的是,需要客户端主动发,服务端被动发,也就是一次请求,一次响应,不能实现主动发送

websocket的改进

一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实现了“真·长链接”,实时性优势明显。

WebSocket有以下特点:

是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。 HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)

六 案例:某音直播间数据采集

思路:本地建立websocket通信,通过在浏览器注入js代码实现浏览器端(客户端)与本地(服务端)的数据转发,从而达到采集直播间数据的功能.

python 代码接受浏览器端返回的数据

import websockets

import asyncio

# 发送 加密参数

async def echo(websocket):

message = '我是发送给客户端的信息'

# 发送数据

await websocket.send(message)

return True

# 接收 客户端返回的数据

async def recv_msg(websocket):

while 1:

# 接收

resv_text = await websocket.recv()

print(resv_text)

async def main_run(websocket):

await echo(websocket)

await recv_msg(websocket)

stat_sever = websockets.serve(main_run,'127.0.0.1',9999)

print('成功建立连接')

loop = asyncio.get_event_loop()

loop.run_until_complete(stat_sever)

# 保持长连接 需要不断的监听返回的数据

loop.run_forever()

重点:

重点是如何找到浏览器端返回的加密数据并且找到解密位置然后注入js代码进行数据转发,这里就不贴出具体位置了,提示,从这个入口进入

结果:

贴一张结果图吧

总结

1出于安全考虑,本章未提供完整流程,调试环节省略较多,只提供大致思路,具体细节要你自己还原,相信你也能调试出来.

2本人写作水平有限,如有讲解不到位或者讲解错误的地方,还请各位大佬在评论区多多指教,共同进步.技术探讨加v lyaoyao__i(两个_,本人)

3本篇分享到这里就结束了,欢迎大家关注下期,我们不见不散☀️☀️

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: