实验目的与要求:
1.理解进程通信的原理及通信过程;
2.掌握基本的网络编程方法;
3.需要有流程图;
4.需要抓取传输内容。
写在前面
我以前装了winpcap这个包,但是这个并不能抓回环包,我尝试把本地的包通过的网络再次进行传输,需要本机加路由。系统显示操作完成之后并没有抓到包。
所以我尝试另一种方法,使用npcap这样成功抓到了本地回环包。忙活半天发现还是下载一个npcap最好使。在下载winpcap之前如果已经下载好了winpcap,记得卸载,搜一下教程,最好卸载干净。
实验过程:
本次实验要求自己编写socket,然后传输可以数据,并进行数据的提取和分析,所以整个实验的流程图如下:
Socket通信分析:
这里我使用Python进行编程,编写服务器端如下:
import socket
def main():
ip_port = (('127.0.0.1', 8888))
sk = socket.socket()
sk.bind(ip_port)
sk.listen(5)
print('server waiting...')
conn, addr = sk.accept()
print('连接成功,客户端为:')
print(addr)
while True:
client_data = conn.recv(1024)
print('客户端传来的数据是:' + client_data.decode('utf-8'))
if client_data.decode('utf-8') == 'q':
print('结束')
break
msg = 'hello libayi!'
conn.sendall(msg.encode('utf-8'))
conn.close()
sk.close()
if __name__ == '__main__':
main()
这里使用的通信端口是8888,发送的内容是我的名字。
编写的客户端如下:
import socket
def main():
ip_port = (('127.0.0.1', 8888))
sk = socket.socket()
sk.connect(ip_port)
while True:
msg = input('请输入:')
sk.sendall(msg.encode('utf-8'))
server_reply = sk.recv(1024)
if not server_reply:
print('结束啦')
break
print('from server')
print(server_reply.decode('utf-8'))
sk.close()
端口和客户端的端口一致。
通信原理如下所示:
抓包并分析:
如上图所示,这里我们抓本地回环包。只要有本地的包,wireshark就可以检测出来我们进行直接抓取。
如下所示:
服务器发送你好,这里的客户端的端口是62468,服务器的端口是8888。接下来我们看服务器给客户端的信息:
此时本地服务器的界面如下:
本地客户端的页面如下:
实验完成