Python3 网络编程5. 自定义服务器与网络数据包分析
                           
天天向上
发布: 2025-03-16 12:16:38

原创
406 人浏览过

在这一部分,我们将介绍:

  • 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 异步网络编程,打造高并发网络应用!

发表回复 0

Your email address will not be published. Required fields are marked *