基于 UDP 协议的SSH 客户端程序
1. server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import socket, subprocess server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) HOST = '127.0.0.1' PORT = 5555 server.bind((HOST, PORT)) server.listen(5) while True: conn, client_addr = server.accept() print('已连接')
while True: try: cmd = conn.recv(1024) if not cmd: break print('客户机命令', cmd.decode('utf-8')) res = subprocess.Popen(cmd.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout = res.stdout.read() stderr = res.stderr.read() conn.send(stdout) except ImportError: break conn.close()
|
2. client
1 2 3 4 5 6 7 8 9 10 11
| from socket import socket,AF_INET,SOCK_DGRAM
port = ('127.0.0.1', 5555) udp_c = socket(AF_INET, SOCK_DGRAM) while True: msg = input('>>').strip() if not msg:continue udp_c.sendto(msg.encode('utf-8'), port) bak_msg, addr = udp_c.recvfrom(10240) print(bak_msg.decode('GBK')) bak_msg.close()
|
简答:
1. TCP 协议与 UDP 协议有什么区别?
- 基于连接与无连接;
- 对系统资源的要求(TCP较多,UDP少);
- UDP程序结构较简单;
- 流模式与数据报模式 ;
- TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
2. 画出 TCP/IP协议的五层结构图,要求标出每层的协议。
- 物理层(physical layer)
RJ45、CLOCK、IEEE802.3
- 数据链路层(data link layer)
PPP、FR、HDLC、VLAN、MAC
- 网络层(network layer)
IP、ICMP、ARP、PARP、OSPF、IPX、RIP、IGRP
- 运输层(transport layer)
TCP、UDP、SPX
- 第五层——应用层
FTP、DNS、Telnet、SNMP、SMTP、HTTP、WWW、NFS
3. 什么是套接字(socket)
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。