Python3 网络编程5. 自定义服务器与网络数据包分析
在这一部分,我们将介绍:
socketserver:快速创建 TCP/UDP 服务器scapy:网络数据包分析和抓包
5.1 使用 socketserver 创建自定义服务器
Python 提供了 socketserver 模块,允许我们快速创建 TCP 或 UDP 服务器。
5.1.1 TCP 服务器
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
data = self.request.recv(1024).strip()
print(f"收到来自 {self.client_address} 的数据: {data.decode()}")
self.request.sendall(b"Hello from TCP Server")
server = socketserver.TCPServer(("0.0.0.0", 9999), MyTCPHandler)
print("TCP 服务器运行在端口 9999...")
server.serve_forever()
5.1.2 TCP 客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("127.0.0.1", 9999))
client.sendall(b"Hello Server")
response = client.recv(1024)
print(f"收到服务器响应: {response.decode()}")
client.close()
5.1.3 UDP 服务器
import socketserver
class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
data, socket = self.request
print(f"收到来自 {self.client_address} 的数据: {data.decode()}")
socket.sendto(b"Hello from UDP Server", self.client_address)
server = socketserver.UDPServer(("0.0.0.0", 9999), MyUDPHandler)
print("UDP 服务器运行在端口 9999...")
server.serve_forever()
5.1.4 UDP 客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto(b"Hello UDP Server", ("127.0.0.1", 9999))
response, addr = client.recvfrom(1024)
print(f"收到服务器响应: {response.decode()}")
client.close()
5.2 网络数据包分析(scapy)
scapy 是一个强大的 Python 网络工具,可以用于抓包、分析数据包、构造自定义数据包等。
5.2.1 安装 scapy
pip install scapy
5.2.2 抓取网络数据包
from scapy.all import sniff
def packet_callback(packet):
print(packet.summary())
sniff(prn=packet_callback, count=10) # 监听 10 个数据包
5.2.3 发送自定义数据包
from scapy.all import IP, ICMP, send
packet = IP(dst="8.8.8.8") / ICMP()
send(packet)
5.2.4 构造 TCP SYN 扫描
from scapy.all import IP, TCP, send
packet = IP(dst="192.168.1.1") / TCP(dport=80, flags="S")
send(packet)
下篇文章我们将介绍 asyncio 异步网络编程,打造高并发网络应用!