河源盛世网站建设,网页设计公司上海,公交建设公司官网,个人做的卖货网站1.简介
本来打算再写一篇这个系列的文章也要和小伙伴或者童鞋们说再见了#xff0c;可是有人留言问WebSocket包和小程序的包不会抓#xff0c;那就关于这两个知识点宏哥就再水两篇文章。
2.什么是Socket#xff1f;
在计算机通信领域#xff0c;socket 被翻译为“套接字…1.简介
本来打算再写一篇这个系列的文章也要和小伙伴或者童鞋们说再见了可是有人留言问WebSocket包和小程序的包不会抓那就关于这两个知识点宏哥就再水两篇文章。
2.什么是Socket
在计算机通信领域socket 被翻译为“套接字”套接字主机端口号它是计算机之间进行通信的一种约定或一种方式。通过 socket这种约定一台计算机可以接收其他计算机的数据也可以向其他计算机发送数据
socket起源于Unix而Unix/Linux基本哲学之一就是“一切皆文件”都可以用“打开open – 读写write/read关闭close”模式来操作。
我的理解就是Socket就是该模式的一个实现它只是提供了一个针对TCP或者UDP编程的接口即socket是一种特殊的文件一些socket函数就是对其进行的操作读/写IO、打开、关闭。
socket抽象层在网络中的位置图解如下图所示 如果你想学习接口自动化测试我这边给你推荐一套视频这个视频可以说是B站播放全网第一的接口自动化测试教程同时在线人数到达1000人并且还有笔记可以领取及各路大神技术交流798478386
【已更新】B站讲的最详细的Python接口自动化测试实战教程全集实战最新版_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集实战最新版共计200条视频包括1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等UP主更多精彩视频请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from333.337
3.Socket通信流程
Socket通信流程如下图所示 根据socket通信基本流程图总结通信的基本步骤
服务器端
第一步创建一个用于监听连接的Socket对像
第二步用指定的端口号和服务器的ip建立一个EndPoint对像
第三步用socket对像的Bind()方法绑定EndPoint
第四步用socket对像的Listen()方法开始监听
第五步接收到客户端的连接用socket对像的Accept()方法创建一个新的用于和客户端进行通信的socket对像;
第六步通信结束后一定记得关闭socket;
客户端
第一步建立一个Socket对像
第二步用指定的端口号和服务器的ip建立一个EndPoint对像
第三步用socket对像的Connect()方法以上面建立的EndPoint对像做为参数向服务器发出连接请求
第四步如果连接成功就用socket对像的Send()方法向服务器发送信息
第五步用socket对像的Receive()方法接受服务器发来的信息 ;
第六步通信结束后一定记得关闭socket
4.python实现一个客户端与服务端的通信
4.1函数
Socket对象方法
服务端
函数描述.bind()绑定地址关键字AF_INET下以元组的形式表示地址。常用bind((host,port)).listen()监听TCP可以挂起的最大连接数该值至少为1一般设为5即可.accept()被动接受TCP客户端的连接
客户端
函数描述.connect()初始化服务器连接.connect_ex()是对connect()函数的扩展当出错时返回出错码,不报异常其它函数
函数描述.recv()接收数据数据以字符串的形式返回bufsize指定接收的最大数据量。.send()发送数据将string中的数据发送到连接的套接字返回值是要发送的字节数量通常使用.encode()函数对数据进行转码.senddall()发送完整的数据在返回之前会尝试发送所有数据成功返回None,失败则抛出异常。.recvfrom()与recv()函数类似不同的是返回值是(data,address),其中data是包含接收数据的字符串address是发送数据的套接字地址。.sendto()发送UDP数据将数据发送到套接字形式是(ipaddr,port)的元组。.close()关闭套接字
4.2服务端
使用socket函数来创建一个socket对象并设置一个socket服务然后通过bind(hostname,port函数来指定一个端口使用socket对象的accept方法等待客户端的连接并返回connection对象。具体步骤为
#创建服务端套接字
serversocketsocket()
#把地址绑定到套接字
serversocket.bind()
#对连接进行监听
serversocket.listen()
#使用一个while进行循环并接收客户端的连接
while True:serverclientserversocket.accept()while True:#接收已发送serverclient.recv()serverclient.send()#关闭客户端套接字serverclient.close()
#关闭服务端套接字
serversocket.close() 4.3具体代码实现
实现功能通过while实现循环接收客户端发送的数据并对客户端发送的数据进行显示并返回给客户端数据返回给客户端的数据信息后加入时间戳。新建一个文件server.py。
import socket
import sys
import timeserversocketsocket.socket(socket.AF_INET,socket.SOCK_STREAM)
hostsocket.gethostname()#获取本地主机名
port9999
#绑定端口号
serversocket.bind((host,port))#设置最大连接数
serversocket.listen(5)
while True:print(服务器启动监听客户端链接)clientsocket,addrserversocket.accept()print(链接地址%s % str(addr))while True:try:dataclientsocket.recv(1024)except Exception:print(断开的客户端,addr)breakprint(客户端发送内容,data.decode(utf-8))replyinput(回复).strip()if not reply:breakmsgtime.strftime(%Y-%m-%d %X)#获取结构化时间戳msg1[%s]:%s% (msg,reply)clientsocket.send(msg1.encode(utf-8))clientsocket.close()
serversocket.close() 4.4客户端
创建一个客户端用来连接以上服务的的服务使用socket.connect()方法打开一个TCP连接到主机连接后可以从服务端获取数据在操作完成后关闭连接。
具体步骤为
#创建客户端的套接字
clientsocket()
#尝试连接服务器
client.connect()
#发送并接收数据
client.send()
client.recv()
#关闭客户端套接字
client.close()
4.5具体代码实现
*新建一个文件client.py。*
import socket
import sysssocket.socket(socket.AF_INET,socket.SOCK_STREAM)
hostsocket.gethostname()
port9999
s.connect((host,port))
while True:data input().strip()if not data:breaks.send(data.encode(utf-8))msgs.recv(1024)if not msg:breakprint(msg.decode(utf-8))
s.close()
4.6测试
使用cmd命令行中打开到代码所在文件目录执行python 服务端文件名.py再另打开一个cmd命令界面执行 python 客户端文件名.py。
1.在cmd中运行服务端代码运行结果如下图所示 2.在cmd中运行客户端代码运行结果如下图所示 好了到此就实现了但是抓不到包不知道是不是因为服务端和客户端都在宏哥本地一台电脑的原因算了宏哥直接网上找了一个在线的演示给大家。
5.实战抓WebSocket包
由于时间关系宏哥没有尝试将客户端和服务器分开看看是否可以抓到包然后在网上找了一个地址http://coolaf.com/tool/chattest 演示给大家。具体操作步骤如下
1.Fiddler V4.5以上版本rulescustomize rules加入如下代码把websocket通信日志加入log如下图所示 2.class Handler 类中添加添加的代码如下
static function OnWebSocketMessage(oMsg: WebSocketMessage) { // Log Message to the LOG tab FiddlerApplication.Log.LogString(oMsg.ToString()); } 3.打开PC版的聊天室宏哥提供的演示地址并刷新Fiddler会看到一个WS图标的请求双击该请求右边会出现websocket的tab页如下图所示
PC版在线聊天如下图所示 Fiddler抓的WebSocket包如下图所示 4.切换到log tab页可以看到通信的数据往来如下图所示 5.通过F12也可以看到websocket的请求信息进入聊天室后F12network滤斗放大镜左边的这个红色图标WS双击name里边这个即展开相关的详情在详情里选中某条数据底部会进一步显示全部信息如下图所示