首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >十五天Python系统学习教程第八天

十五天Python系统学习教程第八天

作者头像
紫风
发布2025-10-14 15:30:18
发布2025-10-14 15:30:18
500
代码可运行
举报
运行总次数:0
代码可运行
📅 Day 8 详细学习计划:Python网络配置与SSH编程

学习目标 ✅ 掌握Python网络配置核心模块(socketrequests) ✅ 实现SSH连接与远程命令执行(对比Java的JSch库) ✅ 理解HTTP客户端与服务端开发 ✅ 完成网络诊断工具开发实战


一、网络编程基础对比(Java vs Python)

功能

Java实现

Python实现

核心差异

TCP Socket

Socket/ServerSocket

socket模块

Python更简洁,但需手动处理并发

HTTP客户端

HttpURLConnection/HttpClient

requests库

Python语法更简洁

SSH连接

JSch库

paramiko库

Python的API更易用

异步网络

NIO/Netty

asyncio/aiohttp

Python协程模型轻量


二、TCP/UDP网络编程(1小时)
2.1 TCP服务端与客户端(对比Java)

服务端实现

代码语言:javascript
代码运行次数:0
运行
复制
import socket  

# 类似Java的ServerSocket  
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
server.bind(('0.0.0.0', 8080))  
server.listen(5)  

while True:  
    client, addr = server.accept()  # 阻塞等待连接  
    data = client.recv(1024)  
    client.send(b"HTTP/1.1 200 OK\r\n\r\nHello")  
    client.close()  

客户端实现

代码语言:javascript
代码运行次数:0
运行
复制
client = socket.socket()  
client.connect(('localhost', 8080))  
client.send(b"GET / HTTP/1.1\r\nHost: localhost\r\n\r\n")  
print(client.recv(4096))  
client.close()  
2.2 UDP通信示例
代码语言:javascript
代码运行次数:0
运行
复制
# 服务端  
udp_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
udp_server.bind(('0.0.0.0', 9999))  
while True:  
    data, addr = udp_server.recvfrom(1024)  
    udp_server.sendto(data.upper(), addr)  

# 客户端  
udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
udp_client.sendto(b"hello", ('localhost', 9999))  
print(udp_client.recvfrom(1024))  

三、HTTP客户端开发(1小时)
3.1 requests库(对比Java的HttpClient)
代码语言:javascript
代码运行次数:0
运行
复制
import requests  

# GET请求(带超时控制)  
response = requests.get("https://api.example.com/data", timeout=5)  
print(response.json())  

# POST请求(类似Java的HttpPost)  
payload = {"key": "value"}  
response = requests.post("https://api.example.com/submit", json=payload)  

# 会话保持(类似Cookie管理)  
session = requests.Session()  
session.get("https://example.com/login", auth=("user", "pass"))  
3.2 异步HTTP(aiohttp)
代码语言:javascript
代码运行次数:0
运行
复制
import aiohttp  
import asyncio  

async def fetch(url):  
    async with aiohttp.ClientSession() as session:  
        async with session.get(url) as response:  
            return await response.text()  

async def main():  
    html = await fetch("http://example.com")  
    print(html[:100])  

asyncio.run(main())  

四、SSH远程连接(1小时)
4.1 paramiko基础用法(对比JSch)
代码语言:javascript
代码运行次数:0
运行
复制
import paramiko  

# 创建SSH客户端  
client = paramiko.SSHClient()  
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())  

# 连接服务器  
client.connect(  
    hostname='192.168.1.100',  
    username='admin',  
    password='secret',  
    timeout=10  
)  

# 执行命令(类似ChannelExec)  
stdin, stdout, stderr = client.exec_command('ls -l')  
print(stdout.read().decode())  

# 关闭连接  
client.close()  
4.2 SFTP文件传输
代码语言:javascript
代码运行次数:0
运行
复制
sftp = client.open_sftp()  
# 上传文件(类似ChannelSftp.put)  
sftp.put("local.txt", "remote.txt")  
# 下载文件  
sftp.get("remote.log", "local.log")  
sftp.close()  

五、实战项目:网络诊断工具(1.5小时)
5.1 需求分析
  • 实现TCP端口扫描
  • 检测HTTP服务可用性
  • 通过SSH收集远程服务器信息
  • 生成HTML报告
5.2 核心代码实现

端口扫描器

代码语言:javascript
代码运行次数:0
运行
复制
def port_scan(host, ports):  
    open_ports = []  
    for port in ports:  
        try:  
            with socket.socket() as s:  
                s.settimeout(1)  
                s.connect((host, port))  
                open_ports.append(port)  
        except:  
            pass  
    return open_ports  

HTTP健康检查

代码语言:javascript
代码运行次数:0
运行
复制
def check_http(url):  
    try:  
        response = requests.get(url, timeout=3)  
        return response.status_code == 200  
    except:  
        return False  

SSH信息收集

代码语言:javascript
代码运行次数:0
运行
复制
def get_ssh_info(host, user, passwd):  
    client = paramiko.SSHClient()  
    client.connect(host, username=user, password=passwd)  
    _, stdout, _ = client.exec_command("free -m")  
    mem_info = stdout.read().decode()  
    client.close()  
    return mem_info  

六、Java开发者注意事项

连接资源管理

  • Python需手动调用close(),推荐使用with语句
代码语言:javascript
代码运行次数:0
运行
复制
with paramiko.SSHClient() as client:  
    client.connect(...)  
    # 自动关闭连接  

线程安全

  • paramiko非线程安全,多线程环境需为每个线程创建独立实例

编码处理

  • SSH命令返回结果需明确解码(decode('utf-8')

七、扩展练习

实现异步端口扫描

代码语言:javascript
代码运行次数:0
运行
复制
async def async_port_scan(host, port):  
    try:  
        _, writer = await asyncio.open_connection(host, port)  
        writer.close()  
        return port  
    except:  
        return None  

构建SSH隧道

代码语言:javascript
代码运行次数:0
运行
复制
# 使用paramiko的forward功能  
client.get_transport().request_port_forward('', 8080)  

网络流量分析

代码语言:javascript
代码运行次数:0
运行
复制
# 使用scapy库解析数据包  
from scapy.all import sniff  
sniff(filter="tcp port 80", prn=lambda x: x.summary())  
代码语言:javascript
代码运行次数:0
运行
复制

通过第八天的学习,您将掌握: 1️⃣ Python原生Socket编程能力 2️⃣ 现代化HTTP客户端开发技巧 3️⃣ 安全的SSH连接管理方案 4️⃣ 网络诊断工具开发全流程

本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📅 Day 8 详细学习计划:Python网络配置与SSH编程
  • 一、网络编程基础对比(Java vs Python)
  • 二、TCP/UDP网络编程(1小时)
    • 2.1 TCP服务端与客户端(对比Java)
    • 2.2 UDP通信示例
  • 三、HTTP客户端开发(1小时)
    • 3.1 requests库(对比Java的HttpClient)
    • 3.2 异步HTTP(aiohttp)
  • 四、SSH远程连接(1小时)
    • 4.1 paramiko基础用法(对比JSch)
    • 4.2 SFTP文件传输
  • 五、实战项目:网络诊断工具(1.5小时)
    • 5.1 需求分析
    • 5.2 核心代码实现
  • 六、Java开发者注意事项
  • 七、扩展练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档