python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Socket

揭秘Python Socket网络编程的7种硬核用法

作者:花小姐的春天

Socket 不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看 Python 网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起学习一下

上周老板拍着我的肩膀说:“小花啊,我们需要一个在线客服系统,你用 Python 搞个 Socket 聊天室吧!”

我心里嘀咕:Socket 不就发发消息、写个聊天室?这玩意儿能有什么花头?

结果一查,哎哟,好家伙,Socket 不仅能做聊天室,还能干一大堆硬核操作!今天就带大家看看 Python 网络编程的 7 种超实用玩法,学会了你就是公司最靓的仔!

1.端口扫描器:探测开放端口

还在手动检查服务器端口?那你可就太 low 了!用 Python 搞个端口扫描器,几秒钟就能搞定:

import socket

def scan_ports(ip, start=1, end=65535):
    print(f"开始扫描 {ip} 上的端口...")
    for port in range(start, end + 1):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(0.5)  # 设置超时时间,加快扫描速度
        if s.connect_ex((ip, port)) == 0:
            print(f"⚡ 端口 {port} 开放")
        s.close()

# 扫描本机所有端口
scan_ports("127.0.0.1")

扫描逻辑: 通过尝试与目标主机的每个端口建立TCP连接(全连接扫描),根据连接结果判断端口开放状态

关键方法

使用场景

局限性及注意事项

建议在实际使用中考虑使用专业扫描工具(如nmap),并遵守网络安全法律法规。该代码更适合用于学习网络编程基础原理。

2.简易 HTTP 服务器:10 秒搭个网页

监听端口 8090,接收 HTTP 请求,然后返回简单的 Hello, Socket!

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("", 8090))
server.listen(5)
print("HTTP 服务器启动,监听端口 8090...")

while True:
    client, addr = server.accept()
    request = client.recv(1024)
    response = "HTTP/1.1 200 OK\n\nHello, Socket!"
    client.sendall(response.encode())
    client.close()

在本地8090端口启动TCP服务器,接收客户端请求后返回固定HTTP响应,每次请求后立即关闭连接(短连接)

关键特性

单线程同步:每次处理一个请求,处理完才能接受新连接

最小HTTP响应

HTTP/1.1 200 OK       ← 状态行
                    ← 空行(两个换行符)
Hello, Socket!       ← 响应体

无请求解析:忽略客户端发送的实际请求内容

使用场景

注意事项

测试方法:浏览器访问 http://localhost:8090 或使用 curl http://localhost:8090

3.局域网游戏:多人联机对战

游戏开发离不开网络通信,Socket 就是幕后功臣!

简单示例:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", 9999))
print("等待数据...")

while True:
    data, addr = s.recvfrom(1024)
    print(f"收到来自 {addr} 的消息: {data.decode()}")

在本地9999端口启动UDP服务,持续接收并显示客户端发送的数据报文,支持同时接收多个客户端的消息

关键特性

使用场景

注意事项

测试方法:使用 nc -u 目标IP 9999 发送测试消息,或配合UDP客户端代码使用。适用于需要低延迟但允许丢包的场景。

4. 远程控制:控制另一台计算机

想远程控制服务器?用 Socket 轻松实现:

import socket
import subprocess

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 9999))
s.listen(1)
print("等待连接...")

conn, addr = s.accept()
print(f"连接自 {addr}")
while True:
    cmd = conn.recv(1024).decode()
    output = subprocess.getoutput(cmd)
    conn.send(output.encode())

在本地9999端口启动TCP服务,接受客户端连接后进入交互模式,执行客户端发送的系统命令并将结果返回(类似后门程序)

关键特性

使用场景

高危风险警告

注意事项(切勿用于生产环境)

建议学习时在虚拟机环境测试,实际应用需至少添加:

测试方法:使用 nc 目标IP 9999 连接后直接输入系统命令(如whoami),适用于理解网络通信原理,但必须注意法律和道德边界。

5. 文件传输:快速共享文件

还在用 U 盘拷贝文件?试试 Python 版 FTP:

import socket

s = socket.socket()
s.connect(("127.0.0.1", 9999))
with open("file.txt", "rb") as f:
    s.sendall(f.read())
print("文件已发送!")

作为TCP客户端连接到本机9999端口,读取本地file.txt文件内容,将文件内容通过TCP连接完整发送

关键特性

使用场景

注意事项

安全提示

测试方法:需先运行支持文件接收的TCP服务器(需另写),再执行此客户端代码。适合学习基础网络传输原理,生产环境建议使用成熟的文件传输协议(如FTP/SCP)。

6. 负载均衡:提高服务器性能

大型网站都用负载均衡来提高访问速度,我们可以用 Socket 模拟一个:

import socket
import random

targets = ["192.168.1.2", "192.168.1.3", "192.168.1.4"]

s = socket.socket()
s.bind(("", 8000))
s.listen(5)

while True:
    conn, addr = s.accept()
    target = random.choice(targets)
    conn.send(target.encode())
    conn.close()

在本地8000端口启动TCP服务,当客户端连接时,随机选择一个预设IP地址返回,立即关闭连接(单次响应模式)

工作流程

客户端连接 → 服务器随机选择IP → 返回IP → 断开连接

使用场景

关键特性

注意事项

测试方法

使用telnet或nc工具测试:

$ nc localhost 8000
192.168.1.3  # 随机返回其中一个IP

该代码适用于小型内部系统的简易服务发现,生产环境建议使用成熟方案(如Nginx负载均衡、Consul服务发现)。需配合客户端逻辑实现真正的重定向功能。

7.网络代理服务器

import socket

proxy = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
proxy.bind(("", 8888))
proxy.listen(5)

while True:
    client, addr = proxy.accept()
    target = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    target.connect(("example.com", 80))
    data = client.recv(4096)
    target.sendall(data)
    response = target.recv(4096)
    client.sendall(response)
    client.close()
    target.close()

工作流程

客户端 → 代理:8888 → example.com:80
   │                   ↑
   │                   │
   └───────────────────┘

关键特性

使用场景

局限性及风险

该代码适合学习基础网络转发原理,生产环境建议使用成熟代理工具(如Nginx、Squid)。如需实现完整代理协议,需处理HTTP头中的Host字段和连接复用等机制。

到此这篇关于揭秘Python Socket网络编程的7种硬核用法的文章就介绍到这了,更多相关Python Socket内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文