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

📅 Day 8 详细学习计划:Python网络配置与SSH编程

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


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

功能Java实现Python实现核心差异
TCP SocketSocket/ServerSocketsocket模块Python更简洁,但需手动处理并发
HTTP客户端HttpURLConnection/HttpClientrequestsPython语法更简洁
SSH连接JSch库paramikoPython的API更易用
异步网络NIO/Nettyasyncio/aiohttpPython协程模型轻量

二、TCP/UDP网络编程(1小时)

2.1 TCP服务端与客户端(对比Java)

服务端实现

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()  

客户端实现

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通信示例

# 服务端  
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)

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)

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)

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文件传输

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 核心代码实现

端口扫描器

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健康检查

def check_http(url):  
    try:  
        response = requests.get(url, timeout=3)  
        return response.status_code == 200  
    except:  
        return False  

SSH信息收集

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开发者注意事项

  1. 连接资源管理

    • Python需手动调用close(),推荐使用with语句

    with paramiko.SSHClient() as client:  
        client.connect(...)  
        # 自动关闭连接  

  2. 线程安全

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

  3. 编码处理

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


七、扩展练习

  1. 实现异步端口扫描

    async def async_port_scan(host, port):  
        try:  
            _, writer = await asyncio.open_connection(host, port)  
            writer.close()  
            return port  
        except:  
            return None  

  2. 构建SSH隧道

    # 使用paramiko的forward功能  
    client.get_transport().request_port_forward('', 8080)  

  3. 网络流量分析

    # 使用scapy库解析数据包  
    from scapy.all import sniff  
    sniff(filter="tcp port 80", prn=lambda x: x.summary())  
     

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值