centos

Python在CentOS中的网络编程配置

小樊
66
2025-08-29 01:11:23
栏目: 编程语言

一、环境准备

  1. 安装Python
    CentOS 7/8默认安装Python 2/3,可通过以下命令确认或升级:

    python3 --version  # 检查版本
    sudo yum install python3  # 安装/升级Python 3
    
  2. 安装网络库

    • 标准库socket无需额外安装,可直接使用。
    • 其他库(如requestsasyncio)通过pip安装:
      sudo pip3 install 库名  # 例如:sudo pip3 install requests
      

二、基础网络编程配置

  1. 编写Socket服务端

    import socket
    # 创建TCP socket
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定IP和端口(0.0.0.0表示监听所有网卡)
    server.bind(('0.0.0.0', 8080))
    server.listen(5)  # 最大连接数
    print("Server listening on 0.0.0.0:8080")
    while True:
        client, addr = server.accept()
        data = client.recv(1024).decode()
        print(f"Received from {addr}: {data}")
        client.send("Hello from server!".encode())
        client.close()
    
  2. 编写Socket客户端

    import socket
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('服务器IP', 8080))  # 替换为实际IP
    client.send("Hello server!".encode())
    response = client.recv(1024).decode()
    print(f"Server response: {response}")
    client.close()
    

三、高级配置

  1. 绑定特定网卡
    bind()中的IP地址替换为目标网卡的IP(如192.168.1.100),需确保网卡已释放该端口:

    server.bind(('192.168.1.100', 8080))
    
  2. 防火墙设置

    • 开放端口(需root权限):
      sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
      sudo firewall-cmd --reload
      
    • 通过Python脚本管理防火墙(需安装firewall库):
      import firewall
      firewall.add_rule('allow', '8080')
      firewall.apply()
      
  3. 多线程/异步处理

    • 多线程示例(处理并发连接):
      import threading
      def handle_client(client_socket):
          data = client_socket.recv(1024)
          client_socket.send(data.upper())
          client_socket.close()
      
      server.listen(5)
      while True:
          client, addr = server.accept()
          threading.Thread(target=handle_client, args=(client,)).start()
      
    • 异步IO示例(Python 3.7+):
      import asyncio
      async def handle_client(reader, writer):
          data = await reader.read(1024)
          writer.write(data.upper())
          await writer.drain()
          writer.close()
      
      async def main():
          server = await asyncio.start_server(handle_client, '0.0.0.0', 8080)
          async with server:
              await server.serve_forever()
      
      asyncio.run(main())
      

四、安全与优化

  1. 输入验证
    对客户端数据进行类型、长度校验,避免注入攻击:

    if not data.isalnum():  # 示例:仅允许字母数字
        client.send("Invalid input!".encode())
        return
    if len(data) > 100:  # 限制长度
        client.send("Data too long!".encode())
        return
    
  2. 使用SSL/TLS加密
    通过ssl模块包装socket,需提前准备证书:

    import ssl
    context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    context.load_cert_chain(certfile='server.crt', keyfile='server.key')
    secure_server = context.wrap_socket(server, server_side=True)
    secure_server.bind(('0.0.0.0', 8443))
    secure_server.listen(5)
    
  3. 权限控制
    避免以root运行服务,创建专用用户并设置文件权限:

    sudo useradd -r pythonapp
    sudo chown -R pythonapp:pythonapp /path/to/your/script
    sudo -u pythonapp python3 server.py
    

五、测试与部署

0
看了该问题的人还看了