学习目标
✅ 掌握Python网络配置核心模块(socket
、requests
)
✅ 实现SSH连接与远程命令执行(对比Java的JSch库)
✅ 理解HTTP客户端与服务端开发
✅ 完成网络诊断工具开发实战
功能 | Java实现 | Python实现 | 核心差异 |
---|---|---|---|
TCP Socket | Socket/ServerSocket | socket模块 | Python更简洁,但需手动处理并发 |
HTTP客户端 | HttpURLConnection/HttpClient | requests库 | Python语法更简洁 |
SSH连接 | JSch库 | paramiko库 | Python的API更易用 |
异步网络 | NIO/Netty | asyncio/aiohttp | Python协程模型轻量 |
服务端实现:
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()
# 服务端
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))
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"))
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())
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()
sftp = client.open_sftp()
# 上传文件(类似ChannelSftp.put)
sftp.put("local.txt", "remote.txt")
# 下载文件
sftp.get("remote.log", "local.log")
sftp.close()
端口扫描器:
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
连接资源管理
close()
,推荐使用with
语句
with paramiko.SSHClient() as client:
client.connect(...)
# 自动关闭连接
线程安全
paramiko
非线程安全,多线程环境需为每个线程创建独立实例
编码处理
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️⃣ 网络诊断工具开发全流程
本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。