📅 Day 8 详细学习计划:Python网络配置与SSH编程
学习目标
✅ 掌握Python网络配置核心模块(socket
、requests
)
✅ 实现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)
服务端实现:
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开发者注意事项
-
连接资源管理
-
Python需手动调用
close()
,推荐使用with
语句
with paramiko.SSHClient() as client: client.connect(...) # 自动关闭连接
-
-
线程安全
-
paramiko
非线程安全,多线程环境需为每个线程创建独立实例
-
-
编码处理
-
SSH命令返回结果需明确解码(
decode('utf-8')
)
-
七、扩展练习
-
实现异步端口扫描
async def async_port_scan(host, port): try: _, writer = await asyncio.open_connection(host, port) writer.close() return port except: return None
-
构建SSH隧道
# 使用paramiko的forward功能 client.get_transport().request_port_forward('', 8080)
-
网络流量分析
# 使用scapy库解析数据包 from scapy.all import sniff sniff(filter="tcp port 80", prn=lambda x: x.summary())
通过第八天的学习,您将掌握:
1️⃣ Python原生Socket编程能力
2️⃣ 现代化HTTP客户端开发技巧
3️⃣ 安全的SSH连接管理方案
4️⃣ 网络诊断工具开发全流程
本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。