總字數：約12,800字 | 預計閱讀時長：35-40分鐘​

一、Python網路程式設計概述​

1.1 什麼是網路程式設計​

網路程式設計（Network Programming）是指編寫能夠在網路中不同裝置之間進行資料交換的程式。通俗地說，讓你的程式碼能夠"開口說話"，與世界上任何一臺聯網裝置對話。​

想象你正在寫一封信：你需要知道對方的地址（IP地址）、選擇郵寄方式（TCP/UDP）、填寫正確的郵政編碼（埠號），最後把信投進郵筒（Socket）。網路程式設計的本質，就是把這個過程用程式碼實現。​

​



| 概念 | 通俗解釋 | 類比 |
| --- | --- | --- |





| 網路程式設計 | 讓程式透過網路與其他程式通訊 | 寫信與收信的過程 |
| --- | --- | --- |
| IP地址 | 裝置在網路中的唯一標識 | 家庭住址 |
| 埠號 | 區分同一裝置上不同服務的編號 | 門牌號 |
| Socket | 網路通訊的端點，程式透過它收發資料 | 郵筒/信箱 |
| 協議 | 通訊雙方約定的規則 | 信件格式規範 |



​

網路程式設計的核心價值：在萬物互聯的時代，幾乎所有應用都需要網路通訊能力。從簡單的網頁請求到複雜的分散式系統，網路程式設計是構建現代軟體的基石。​

1.2 Python網路程式設計的優勢與應用場景​

Python之所以成為網路程式設計的首選語言，在於其簡潔的語法、豐富的庫生態和強大的社群支援。​

​



| 優勢 | 具體體現 | 適用場景 |
| --- | --- | --- |





| 語法簡潔 | 程式碼量少，開發速度快 | 快速原型開發、指令碼編寫 |
| --- | --- | --- |
| 庫生態豐富 | requests、socket、asyncio等成熟庫 | 各類網路應用開發 |
| 跨平臺 | 一次編寫，多平臺執行 | 伺服器、嵌入式裝置 |
| 社群活躍 | 問題解答快，資源豐富 | 學習與問題排查 |
| AI整合 | 與TensorFlow、PyTorch無縫對接 | 智慧網路應用 |



​

Python網路程式設計的典型應用場景：​

​



| 場景 | 說明 | 代表工具/框架 |
| --- | --- | --- |





| Web開發 | 構建網站和API服務 | Django、Flask、FastAPI |
| --- | --- | --- |
| 網路爬蟲 | 自動化採集網頁資料 | Scrapy、BeautifulSoup |
| 網路安全 | 滲透測試、漏洞掃描 | Scapy、Nmap、Requests |
|  |  |  |
|  |  |  |
|  |  |  |



​

1.3 網路程式設計在安全領域的價值​

在網路安全領域，Python網路程式設計具有不可替代的戰略價值。安全從業者需要深入理解網路協議，才能有效檢測和防禦攻擊。​

​



| 應用方向 | Python的作用 | 實際效果 |
| --- | --- | --- |





| 漏洞掃描 | 自動化檢測目標系統弱點 | 掃描效率提升10倍以上 |
| --- | --- | --- |
| 滲透測試 | 構造惡意請求驗證漏洞 | 快速驗證攻擊可行性 |
| 流量分析 | 捕獲並解析網路資料包 | 發現異常行為和攻擊痕跡 |
| 惡意程式碼分析 | 模擬網路通訊研究惡意軟體 | 理解攻擊者意圖和手法 |
| 安全工具開發 | 構建自定義安全工具 | 滿足特定場景的安全需求 |



​

安全從業者的必備能力：掌握Python網路程式設計，意味著你能從協議層面理解攻擊原理，不僅能使用現成工具，更能根據需求定製專屬的安全解決方案。​

​

​

二、網路基礎與協議​

2.1 網路通訊模型（OSI/TCP-IP）​

要理解網路程式設計，首先需要了解網路通訊的分層模型。分層模型就像快遞系統中的各個環節——寄件、分揀、運輸、派送各司其職，共同完成包裹的傳遞。​

OSI七層模型 vs TCP-IP四層模型​

​



| OSI層 | TCP-IP層 | 功能說明 | 典型協議 |
| --- | --- | --- | --- |





| 應用層 | 應用層 | 為應用程式提供網路服務 | HTTP、FTP、SMTP、DNS |
| --- | --- | --- | --- |
| 表示層 | ↑ | 資料格式轉換、加密 | SSL/TLS、JPEG |
| 會話層 | ↑ | 建立、管理、終止會話 | NetBIOS、RPC |
| 傳輸層 | 傳輸層 | 端到端可靠傳輸 | TCP、UDP |
| 網路層 | 網路層 | 路由選擇、IP定址 | IP、ICMP、ARP |
| 資料鏈路層 | 網路介面層 | 幀傳輸、錯誤檢測 | Ethernet、Wi-Fi |
| 物理層 | ↑ | 位元流傳輸 | 光纖、雙絞線 |



​

為什麼Python程式設計師需要了解分層模型？ 因為你的程式碼通常工作在應用層，但當你需要進行底層網路操作（如抓包、構造資料包）時，理解底層協議至關重要。​

2.2 TCP與UDP協議原理​

TCP（傳輸控制協議）和UDP（使用者資料包協議）是傳輸層的兩大核心協議，它們的選擇直接影響程式的效能和可靠性。​

​



| 特性 | TCP | UDP |
| --- | --- | --- |





| 連線方式 | 面向連線（三次握手） | 無連線 |
| --- | --- | --- |
| 可靠性 | 可靠，保證資料完整有序 | 不可靠，可能丟包亂序 |
| 傳輸效率 | 相對較低 | 高 |
| 流量控制 | 有 | 無 |
| 適用場景 | 網頁、郵件、檔案傳輸 | 影片、遊戲、DNS查詢 |



​

TCP三次握手過程​

​

Code block​

Plain Text

客戶端 伺服器​

|--- SYN ----------->| （我想建立連線）​

|<-- SYN+ACK --------| （同意，我也準備好了）​

|--- ACK ------------>| （確認，開始通訊）​

​

TCP的"可靠"體現在哪？ 透過序列號、確認應答、超時重傳、流量控制等機制，確保資料完整、有序地到達目的地。代價是增加了通訊開銷。​

2.3 HTTP/HTTPS協議詳解​

HTTP（超文字傳輸協議）是Web的基礎，HTTPS則是其加密版本。理解HTTP協議是進行Web安全測試的前提。​

HTTP請求結構​

​



| 組成部分 | 說明 | 示例 |
| --- | --- | --- |





| 請求方法 | 操作型別 | GET、POST、PUT、DELETE |
| --- | --- | --- |
| URL | 資源地址 | /api/users?id=1 |
|  |  |  |
|  |  |  |



​

HTTP響應結構​

​



| 狀態碼 | 響應狀態 | 200、404、500 |
| --- | --- | --- |
| 響應頭 | 後設資料資訊 | Set-Cookie、Cache-Control |
| 響應體 | 返回的資料 | HTML頁面、JSON資料 |



​

常見HTTP狀態碼​

​



| 狀態碼 | 含義 | 安全相關場景 |
| --- | --- | --- |





| 200 | 請求成功 | 正常響應 |
| --- | --- | --- |
| 301/302 | 重定向 | 釣魚攻擊、開放重定向漏洞 |
| 401 | 未授權 | 需要認證 |
| 403 | 禁止訪問 | 許可權不足 |
| 404 | 未找到 | 路徑列舉、資訊洩露 |
| 500 | 伺服器錯誤 | 可能存在注入漏洞 |



​

HTTPS如何保護通訊安全？ 透過SSL/TLS加密，HTTPS確保資料在傳輸過程中不被竊聽和篡改。握手過程包括證書驗證、金鑰協商、加密通訊三個階段。​

2.4 常見網路埠與服務​

埠是網路服務的"門牌號"，瞭解常見埠是網路程式設計和安全測試的基礎。​

​



| 埠號 | 服務 | 協議 | 安全風險 |
| --- | --- | --- | --- |





| 21 | FTP | TCP | 明文傳輸、匿名訪問 |
| --- | --- | --- | --- |
| 22 | SSH | TCP | 暴力破解、弱口令 |
| 23 | Telnet | TCP | 明文傳輸，已被SSH取代 |
| 25 | SMTP | TCP | 郵件偽造、垃圾郵件 |
| 80 | HTTP | TCP | Web漏洞、中間人攻擊 |
| 443 | HTTPS | TCP | 證書偽造、SSL漏洞 |
| 3306 | MySQL | TCP | SQL隱碼攻擊、弱口令 |
| 6379 | Redis | TCP | 未授權訪問 |
| 8080 | HTTP代理 | TCP | 代理濫用、資訊洩露 |



​

安全建議：在生產環境中，關閉不必要的埠和服務，使用防火牆限制訪問，並定期進行埠掃描以發現潛在風險。​

​

​

三、Python Socket程式設計​

3.1 Socket基礎概念​

Socket（套接字）是網路程式設計的核心抽象，它就像一個"電話插座"——程式透過Socket連線到網路，與其他程式進行通訊。​

Socket型別​

​



| 型別 | 說明 | 適用場景 |
| --- | --- | --- |





| SOCK\_STREAM | 面向連線的可靠傳輸（TCP） | 檔案傳輸、網頁瀏覽 |
| --- | --- | --- |
| SOCK\_DGRAM | 無連線的資料包傳輸（UDP） | 影片流、DNS查詢 |
| SOCK\_RAW | 原始套接字，直接訪問底層協議 | 網路抓包、協議分析 |



​

Socket通訊流程​

​

Code block​

Plain Text

伺服器端 客戶端​

| |​

|--- socket() ------------>| 建立Socket​

|--- bind() -------------->| 繫結地址​

|--- listen() ------------>| 監聽連線​

|<-- accept() -------------| 接受連線​

| |​

|<== send()/recv() =======>| 資料傳輸​

| |​

|--- close() ------------->| 關閉連線​

​

為什麼Socket如此重要？ 它是所有網路通訊的基礎。無論是瀏覽器訪問網頁、APP呼叫API，還是駭客發起攻擊，底層都是透過Socket完成的。​

3.2 TCP Socket程式設計實戰​

TCP Socket程式設計是網路程式設計的核心技能。以下是一個完整的TCP伺服器和客戶端示例：​

TCP伺服器端程式碼​

​

Code block​

Python

import socket​

​

def start\_tcp\_server(host='0.0.0.0', port=9999):​

\# 建立TCP Socket​

server\_socket = socket.socket(socket.AF\_INET, socket.SOCK\_STREAM)​

\# 允許地址重用​

server\_socket.setsockopt(socket.SOL\_SOCKET, socket.SO\_REUSEADDR, 1)​

\# 繫結地址和埠​

server\_socket.bind((host, port))​

\# 開始監聽​

server\_socket.listen(5)​

print(f"\[\*\] 伺服器監聽 {host}:{port}")​

​

while True:​

\# 接受客戶端連線​

client\_socket, client\_address = server\_socket.accept()​

print(f"\[+\] 接受連線: {client\_address}")​

​

\# 接收資料​

data = client\_socket.recv(1024).decode('utf-8')​

print(f"\[\*\] 收到資料: {data}")​

​

\# 傳送響應​

response = f"伺服器已收到: {data}"​

client\_socket.send(response.encode('utf-8'))​

​

​

TCP客戶端程式碼​

​

Code block​

Python

import socket​

​

def tcp\_client(target\_host, target\_port, message):​

\# 建立TCP Socket​

client\_socket = socket.socket(socket.AF\_INET, socket.SOCK\_STREAM)​

\# 連線伺服器​

client\_socket.connect((target\_host, target\_port))​

\# 傳送資料​

client\_socket.send(message.encode('utf-8'))​

\# 接收響應​

response = client\_socket.recv(4096).decode('utf-8')​

print(f"\[\*\] 伺服器響應: {response}")​

\# 關閉連線​

client\_socket.close()​

​

if \_\_name\_\_ == '\_\_main\_\_':​

tcp\_client('127.0.0.1', 9999, 'Hello, Server!')​

​

關鍵點：bind()繫結地址、listen()開始監聽、accept()接受連線、send()/recv()收發資料、close()關閉連線。​

3.3 UDP Socket程式設計實戰​

UDP Socket程式設計更簡單，但不保證資料可靠性。適用於對實時性要求高、允許少量丟包的場景。​

UDP伺服器端程式碼​

​

Code block​

Python

import socket​

​

def start\_udp\_server(host='0.0.0.0', port=9998):​

\# 建立UDP Socket​

server\_socket = socket.socket(socket.AF\_INET, socket.SOCK\_DGRAM)​

\# 繫結地址​

server\_socket.bind((host, port))​

print(f"\[\*\] UDP伺服器監聽 {host}:{port}")​

​

while True:​

\# 接收資料和客戶端地址​

data, client\_address = server\_socket.recvfrom(1024)​

print(f"\[\*\] 收到來自 {client\_address} 的資料: {data.decode('utf-8')}")​

​

\# 傳送響應​

response = f"UDP伺服器已收到"​

server\_socket.sendto(response.encode('utf-8'), client\_address)​

​

if \_\_name\_\_ == '\_\_main\_\_':​

start\_udp\_server()​

​

UDP客戶端程式碼​

​

Code block​

Python

import socket​

​

TCP vs UDP選擇建議：需要可靠傳輸選TCP，需要高速實時選UDP。Web應用、檔案傳輸用TCP；視訊會議、線上遊戲用UDP。​

3.4 多執行緒與非同步Socket​

單執行緒Socket伺服器一次只能處理一個客戶端連線，這在生產環境中是不可接受的。多執行緒和非同步IO是解決併發問題的兩大方案。​

多執行緒TCP伺服器​

​

Code block​

Python

import socket​

import threading​

​

def handle\_client(client\_socket, client\_address):​

"""處理單個客戶端連線"""​

​

​



| 併發方案 | 優點 | 缺點 | 適用場景 |
| --- | --- | --- | --- |





| 多執行緒 | 實現簡單，除錯方便 | 執行緒開銷大，上下文切換成本 | 中等併發（幾百連線） |
| --- | --- | --- | --- |
| 多程序 | 避免GIL限制 | 程序開銷更大 | CPU密集型任務 |
| 非同步IO | 高效，單執行緒處理大量連線 | 程式碼複雜，學習曲線陡 | 高併發（萬級連線） |



​

GIL是什麼？ Python的全域性直譯器鎖（Global Interpreter Lock）限制了同一時刻只有一個執行緒執行Python位元組碼。對於IO密集型任務影響不大，但對CPU密集型任務需要使用多程序或C擴充套件。​

​

​

四、HTTP客戶端程式設計​

4.1 Requests庫詳解​

Requests是Python最流行的HTTP客戶端庫，被譽為"為人類準備的HTTP庫"。它簡化了HTTP請求的複雜性，讓網路請求變得直觀易懂。​

基本請求方法​

​



| 方法 | 用途 | 示例 |
| --- | --- | --- |





| GET | 獲取資源 | requests.get(url) |
| --- | --- | --- |
| POST | 提交資料 | requests.post(url, data={}) |
| PUT | 更新資源 | requests.put(url, data={}) |
| DELETE |  |  |
|  |  |  |
|  |  |  |



​

Requests基礎用法​

​

Code block​

Python

import requests​

​

\# GET請求​

response = requests.get('https://httpbin.org/get')​

print(response.status\_code) \# 狀態碼​

print(response.headers) \# 響應頭​

print(response.text) \# 文字內容​

print(response.json()) \# JSON資料​

​

\# 帶引數的GET請求​

params = {'key1': 'value1', 'key2': 'value2'}​

response = requests.get('https://httpbin.org/get', params=params)​

​

\# POST請求​

data = {'username': 'admin', 'password': '123456'}​

response = requests.post('https://httpbin.org/post', data=data)​

​

\# JSON請求​

json\_data = {'name': 'test', 'age': 25}​

response = requests.post('https://httpbin.org/post', json=json\_data)​

​

Requests的"人性化"體現在哪？ 自動處理編碼、自動解析JSON、自動跟隨重定向，讓你專注於業務邏輯而非底層細節。​

4.2 會話管理與Cookie處理​

會話（Session）是Web應用中維持使用者狀態的機制。透過Requests的Session物件，可以自動管理Cookie，保持登入狀態。​

Session使用示例​

​

Code block​

Python

​

Cookie手動處理​

​

Code block​

Python

import requests​

​

\# 手動設定Cookie​

cookies = {'session\_id': 'abc123', 'user\_token': 'xyz789'}​

response = requests.get('https://example.com/api', cookies=cookies)​

​

\# 從響應中提取Cookie​

response\_cookies = response.cookies​

for cookie in response\_cookies:​

print(f"{cookie.name}: {cookie.value}")​

​

安全提示：在滲透測試中，Cookie是攻擊的重點目標。Session劫持、Cookie竊取、CSRF攻擊都與Cookie密切相關。​

4.3 代理設定與認證​

代理是網路請求的"中轉站"，在安全測試中常用於匿名訪問、繞過限制或攔截流量。​

代理配置​

​

Code block​

Python

import requests​

​

\# 設定HTTP代理​

proxies = {​

'http': 'http://127.0.0.1:8080',​

'https': 'http://127.0.0.1:8080'​

​

認證方式​

​

Code block​

Python

import requests​

​

\# Basic認證​

response = requests.get('https://api.example.com', auth=('username', 'password'))​

​

\# Bearer Token認證​

headers = {'Authorization': 'Bearer your\_token\_here'}​

response = requests.get('https://api.example.com', headers=headers)​

​

\# API Key認證​

headers = {'X-API-Key': 'your\_api\_key'}​

response = requests.get('https://api.example.com', headers=headers)​

​

安全測試中的代理應用：使用Burp Suite等代理工具攔截HTTP流量，分析請求引數、修改資料包、發現安全漏洞。​

4.4 非同步HTTP客戶端（aiohttp）​

aiohttp是基於asyncio的非同步HTTP客戶端，適用於需要高併發請求的場景，如大規模爬蟲、併發API呼叫。​

aiohttp基礎用法​

​

Code block​

Python

import aiohttp​

import asyncio​

​

async def fetch\_url(session, url):​

"""非同步獲取單個URL"""​

async with session.get(url) as response:​

return await response.text()​

​

async def fetch\_multiple\_urls(urls):​

"""併發獲取多個URL"""​

async with aiohttp.ClientSession() as session:​

tasks = \[fetch\_url(session, url) for url in urls\]​

results = await asyncio.gather(\*tasks)​

return results​

​

\# 執行非同步程式碼​

urls = \[​

'https://httpbin.org/get',​

'https://httpbin.org/ip',​

'https://httpbin.org/headers'​

\]​

results = asyncio.run(fetch\_multiple\_urls(urls))​

for url, result in zip(urls, results):​

print(f"{url}: {len(result)} bytes")​

​

Requests vs aiohttp對比​

​



| 特性 | Requests | aiohttp |
| --- | --- | --- |





| 併發模型 | 同步阻塞 | 非同步非阻塞 |
| --- | --- | --- |
| 效能 | 單執行緒順序執行 | 高併發，效率高 |
| 學習難度 | 簡單直觀 | 需要理解asyncio |
| 適用場景 | 簡單請求、指令碼 | 大規模併發、爬蟲 |
| 依賴 | 無額外依賴 | 需要asyncio支援 |



​

何時選擇aiohttp？ 當你需要同時發起數百甚至數千個HTTP請求時，aiohttp的非同步特性可以顯著提升效率。​

​

​

五、Web伺服器開發​

5.1 Flask框架基礎​

Flask是Python最流行的輕量級Web框架，被譽為"微框架"。它提供核心功能，不強制繫結特定工具，讓開發者自由選擇元件。​

Flask基礎示例​

​

Code block​

Python

from flask import Flask, request, jsonify​

​

app = Flask(\_\_name\_\_)​

​

@app.route('/')​

def hello():​

return 'Hello, World!'​

​

Flask核心元件​

​



| 元件 | 功能 | 說明 |
| --- | --- | --- |





| 路由 | URL對映到函式 | @app.route() |
| --- | --- | --- |
| 請求物件 | 訪問請求資料 | request.args、request.json |
| 響應物件 | 構建HTTP響應 | jsonify()、make\_response() |
| 藍圖 | 模組化組織路由 | Blueprint |
| 中介軟體 | 請求/響應處理 | before\_request、after\_request |



​

Flask的安全注意事項：生產環境中必須關閉debug模式，使用WSGI伺服器（如Gunicorn），並配置HTTPS。​

5.2 FastAPI高效能介面​

FastAPI是現代Python Web框架的代表，基於型別提示自動生成API文件，效能接近Node.js和Go。​

FastAPI基礎示例​

​

Code block​

Python

from fastapi import FastAPI, HTTPException​

from pydantic import BaseModel​

from typing import Optional​

​

app = FastAPI(title="使用者管理API", version="1.0.0")​

​

class UserCreate(BaseModel):​

name: str​

email: str​

age: Optional\[int\] = None​

​

class UserResponse(BaseModel):​

id: int​

name: str​

email: str​

​

\# 模擬資料庫​

users\_db = {}​

​

@app.get("/")​

async def root():​

return {"message": "Welcome to FastAPI"}​

​

​

Flask vs FastAPI對比​

​



| 特性 | Flask | FastAPI |
| --- | --- | --- |





| 效能 | 中等 | 高（接近Go） |
| --- | --- | --- |
| 自動文件 | 需要擴充套件 | 自動生成Swagger |
| 型別檢查 | 可選 | 基於Pydantic強制 |
| 非同步支援 | 需要擴充套件 | 原生支援 |
| 學習曲線 | 平緩 | 中等 |
| 生態成熟度 | 非常成熟 | 快速成長 |



​

FastAPI的核心優勢：型別安全 + 自動文件 + 高效能，特別適合構建現代API服務。​

5.3 WebSocket實時通訊​

WebSocket是全雙工通訊協議，允許伺服器主動向客戶端推送資料，適用於實時聊天、線上遊戲、股票行情等場景。​

FastAPI WebSocket示例​

​

Code block​

Python

from fastapi import FastAPI, WebSocket, WebSocketDisconnect​

from typing import List​

​

app = FastAPI()​

​

class ConnectionManager:​

def \_\_init\_\_(self):​

self.active\_connections: List\[WebSocket\] = \[\]​

​

async def connect(self, websocket: WebSocket):​

await websocket.accept()​

self.active\_connections.append(websocket)​

​

def disconnect(self, websocket: WebSocket):​

self.active\_connections.remove(websocket)​

​

async def broadcast(self, message: str):​

for connection in self.active\_connections:​

await connection.send\_text(message)​

​

manager = ConnectionManager()​

​

@app.websocket("/ws/{client\_id}")​

async def websocket\_endpoint(websocket: WebSocket, client\_id: int):​

await manager.connect(websocket)​

try:​

​

WebSocket vs HTTP對比：HTTP是"請求-響應"模式，客戶端主動發起；WebSocket是"推送"模式，伺服器可主動傳送，延遲更低，效率更高。​

5.4 WSGI與ASGI協議​

WSGI（Web Server Gateway Interface）和ASGI（Asynchronous Server Gateway Interface）是Python Web應用與伺服器之間的標準介面。​

​



| 協議 | 全稱 | 特點 | 代表框架 |
| --- | --- | --- | --- |





| WSGI | Web Server Gateway Interface | 同步，成熟穩定 | Flask、Django |
| --- | --- | --- | --- |
| ASGI | Asynchronous Server Gateway Interface | 非同步，支援WebSocket | FastAPI、Starlette |



​

WSGI伺服器部署​

​

Code block​

Bash

\# 安裝Gunicorn​

pip install gunicorn​

​

\# 啟動Flask應用​

gunicorn -w 4 -b 0.0.0.0:8000 app:app​

​

ASGI伺服器部署​

​

Code block​

Bash

​

部署建議：生產環境中，使用Nginx作為反向代理，Gunicorn/Uvicorn作為應用伺服器，不要直接使用Flask/FastAPI的開發伺服器。​

​

​

六、網路資料處理​

6.1 JSON與XML解析​

JSON和XML是網路資料交換的兩大主流格式。JSON輕量簡潔，XML功能強大。​

JSON處理​

​

Code block​

Python

import json​

​

\# Python物件轉JSON​

data = {​

'name': 'Alice',​

​

XML處理​

​

Code block​

Python

import xml.etree.ElementTree as ET​

​

\# 解析XML字串​

xml\_str = '''​

<users>​

<user id="1">​

<name>Alice</name>​

<age>25</age>​

</user>​

<user id="2">​

<name>Bob</name>​

<age>30</age>​

</user>​

​

JSON vs XML對比​

​



| 特性 | JSON | XML |
| --- | --- | --- |





| 可讀性 | 高 | 中等 |
| --- | --- | --- |
| 資料體積 | 小 | 大 |
| 解析速度 | 快 | 慢 |
| 擴充套件性 | 有限 | 強（支援名稱空間、Schema） |
| 適用場景 | Web API、配置檔案 | 企業級應用、文件儲存 |



​

6.2 網路抓包與分析（Scapy）​

Scapy是Python最強大的網路資料包處理庫，可以構造、傳送、捕獲和解析網路資料包。​

Scapy基礎用法​

​

Code block​

Python

​

資料包嗅探​

​

Code block​

Python

​

Scapy在安全領域的應用：網路偵察、埠掃描、協議分析、漏洞檢測、流量偽造。​

6.3 協議解析與構造​

理解協議結構是網路程式設計的核心能力。透過Scapy，可以深入協議細節，構造任意資料包。​

自定義協議解析​

​

Code block​

Python

from scapy.all import \*​

from scapy.fields import \*​

from scapy.packet import Packet​

​

class MyProtocol(Packet):​

name = "MyProtocol"​

fields\_desc = \[​

ShortField("type", 0),​

ShortField("length", 0),​

StrFixedLenField("magic", b"\\x00\\x00", 2),​

StrLenField("data", "", length\_from=lambda pkt: pkt.length)​

\]​

​

​

HTTP協議分析​

​

Code block​

Python

from scapy.all import \*​

from scapy.layers.http import HTTPRequest, HTTPResponse​

​

def http\_handler(packet):​

if packet.haslayer(HTTPRequest):​

http\_layer = packet\[HTTPRequest\]​

print(f"請求: {http\_layer.Method.decode()} {http\_layer.Host.decode()}{http\_layer.Path.decode()}")​

​

if packet.haslayer(HTTPResponse):​

http\_layer = packet\[HTTPResponse\]​

print(f"響應: {http\_layer.Status\_Code.decode()}")​

​

\# 嗅探HTTP流量​

sniff(filter\="tcp port 80", prn=http\_handler, store=0)​

​

6.4 資料序列化與反序列化​

序列化是將物件轉換為可傳輸格式的過程，反序列化則是逆向過程。網路程式設計中常見的序列化格式包括JSON、MessagePack、Protocol Buffers等。​

多種序列化格式對比​

​



| 格式 | 特點 | 適用場景 |
| --- | --- | --- |





|  |  |  |
| --- | --- | --- |
|  |  |  |
|  |  |  |
|  |  |  |



​

MessagePack示例​

​

Code block​

Python

import msgpack​

​

\# 序列化​

data = {'name': 'Alice', 'scores': \[95, 88, 92\]}​

packed = msgpack.packb(data, use\_bin\_type=True)​

print(f"序列化後大小: {len(packed)} bytes")​

​

\# 反序列化​

unpacked = msgpack.unpackb(packed, raw=False)​

print(unpacked)​

​

安全警告：永遠不要反序列化不受信任的資料，特別是Python的pickle模組，它可能執行任意程式碼，導致遠端程式碼執行漏洞。​

​

​

七、網路安全程式設計​

7.1 網路掃描與探測​

網路掃描是安全測試的第一步，透過掃描可以發現目標系統的活躍主機、開放埠和執行服務。​

主機發現​

​

Code block​

Python

import subprocess​

import platform​

​

def ping\_host(host):​

"""使用ping檢測主機是否存活"""​

param = '-n' if platform.system().lower() == 'windows' else '-c'​

command = \['ping', param, '1', host\]​

result = subprocess.run(command, capture\_output=True, text=True)​

return result.returncode == 0​

​

def network\_scan(network\_prefix, start=1, end=254):​

"""掃描網段中的活躍主機"""​

active\_hosts = \[\]​

for i in range(start, end + 1):​

host = f"{network\_prefix}.{i}"​

if ping\_host(host):​

print(f"\[+\] 主機活躍: {host}")​

active\_hosts.append(host)​

return active\_hosts​

​

\# 掃描192.168.1.0/24網段​

active\_hosts = network\_scan("192.168.1")​

print(f"\\n發現 {len(active\_hosts)} 臺活躍主機")​

​

ARP掃描（更快速）​

​

Code block​

Python

from scapy.all import ARP, Ether, srp​

​

def arp\_scan(network):​

"""使用ARP協議快速掃描區域網"""​

arp = ARP(pdst=network)​

ether = Ether(dst="ff:ff:ff:ff:ff:ff")​

packet = ether / arp​

​

result = srp(packet, timeout=3, verbose=0)\[0\]​

​

devices = \[\]​

for sent, received in result:​

devices.append({'ip': received.psrc, 'mac': received.hwsrc})​

​

return devices​

​

\# 掃描區域網​

devices = arp\_scan("192.168.1.0/24")​

for device in devices:​

print(f"IP: {device\['ip'\]}, MAC: {device\['mac'\]}")​

​

7.2 埠掃描技術實現​

埠掃描是探測目標系統開放埠的技術，不同掃描方式適用於不同場景。​

TCP連線掃描​

​

Code block​

Python

import socket​

​

​

SYN半開掃描​

​

Code block​

Python

from scapy.all import IP, TCP, sr1​

​

def syn\_scan(target, ports):​

"""SYN半開掃描（需要root許可權）"""​

open\_ports = \[\]​

for port in ports:​

packet = IP(dst=target) / TCP(dport=port, flags="S")​

response = sr1(packet, timeout=1, verbose=0)​

​

​

掃描型別對比​

​



| 掃描型別 | 特點 | 隱蔽性 | 準確性 | 許可權要求 |
| --- | --- | --- | --- | --- |





| TCP全連線 | 完成三次握手 | 低 | 高 | 普通使用者 |
| --- | --- | --- | --- | --- |
| SYN半開 | 只傳送SYN包 | 中 | 高 | root |
| FIN掃描 | 傳送FIN包 | 高 | 中 | root |
| NULL掃描 | 無標誌位 | 高 | 低 | root |
| XMAS掃描 | 多標誌位 | 高 | 低 | root |



​

7.3 密碼破解與暴力列舉​

暴力破解是透過嘗試大量密碼組合來獲取系統訪問許可權的方法。瞭解暴力破解有助於加強系統安全防護。​

SSH暴力破解示例​

​

Code block​

Python

import paramiko​

​

法律警告：未經授權的暴力破解是違法行為。本文示例僅用於安全研究和授權測試。​

防禦暴力破解的措施​

​



| 措施 | 說明 | 實現方式 |
| --- | --- | --- |





| 賬戶鎖定 | 多次失敗後鎖定賬戶 | fail2ban、應用層實現 |
| --- | --- | --- |
| 驗證碼 | 區分人機行為 | 圖形驗證碼、滑塊驗證 |
| 多因素認證 | 增加認證因素 | 簡訊、TOTP、硬體Key |
| IP限制 | 限制訪問來源 | 防火牆、CDN |
| 密碼策略 | 強制複雜密碼 | 長度、複雜度要求 |



​

7.4 Web漏洞檢測基礎​

Web漏洞檢測是安全測試的核心內容。透過Python可以編寫自動化漏洞檢測工具。​

SQL隱碼攻擊檢測​

​

Code block​

Python

import requests​

​

def detect\_sqli(url, param):​

"""簡單SQL隱碼攻擊檢測"""​

\# 常見SQL隱碼攻擊Payload​

payloads = \[​

"'",​

"' OR '1'='1",​

"1' AND '1'='1",​

"1 UNION SELECT NULL--",​

"' OR 1=1--"​

\]​

​

\# 獲取正常響應​

​

XSS漏洞檢測​

​

Code block​

Python

import requests​

from urllib.parse import urljoin​

​

def detect\_xss(url, param):​

"""簡單XSS漏洞檢測"""​

xss\_payloads = \[​

'<script>alert("XSS")</script>',​

'<img src=x onerror=alert("XSS")>',​

'"><script>alert("XSS")</script>',​

"'-alert('XSS')-'"​

​

漏洞檢測工具框架​

​



| 功能 | 說明 | 實現方式 |
| --- | --- | --- |





| 爬蟲模組 | 自動發現頁面 | Requests + BeautifulSoup |
| --- | --- | --- |
| 掃描模組 | 檢測各類漏洞 | 自定義Payload庫 |
| 報告模組 | 生成檢測報告 | JSON、HTML格式 |
| 配置模組 | 管理掃描引數 | YAML、INI檔案 |



​

​

​

八、非同步與併發網路程式設計​

8.1 asyncio事件迴圈​

asyncio是Python的非同步程式設計框架，透過事件迴圈和協程實現高併發IO操作。​

asyncio核心概念​

​



| 概念 | 說明 | 類比 |
| --- | --- | --- |





| 事件迴圈 | 排程協程執行的核心機制 | 餐廳經理分配任務 |
| --- | --- | --- |
| 協程 | 可暫停和恢復的函式 | 服務員在等待時做其他事 |
| 任務 | 對協程的封裝，可追蹤狀態 | 訂單 |
| Future | 非同步操作的結果佔位符 | 取餐號 |



​

基礎示例​

​

Code block​

Python

import asyncio​

​

async def say\_after(delay, what):​

"""模擬非同步操作"""​

await asyncio.sleep(delay)​

print(what)​

​

async def main():​

print(f"開始: {asyncio.get\_event\_loop().time():.1f}")​

​

\# 順序執行​

await say\_after(1, '你好')​

await say\_after(2, '世界')​

​

print(f"順序執行結束: {asyncio.get\_event\_loop().time():.1f}")​

​

為什麼asyncio能提升效能？ 當協程遇到IO​

操作（如網路請求）時，會主動讓出控制權，事件迴圈可以執行其他協程，避免CPU空閒等待。​

8.2 協程與任務排程​

協程是asyncio的核心，透過async def定義，使用await暫停執行。​

協程實戰​

​

Code block​

Python

import asyncio​

import aiohttp​

​

async def fetch\_url(session, url):​

"""非同步獲取URL"""​

async with session.get(url) as response:​

return await response.text()​

​

async def process\_url(session, url):​

"""處理單個URL"""​

print(f"開始處理: {url}")​

​

任務取消與超時​

​

Code block​

Python

import asyncio​

​

async def long\_running\_task():​

"""模擬長時間執行的任務"""​

try:​

await asyncio.sleep(100)​

​

8.3 非同步網路庫生態​

Python非同步生態系統日益完善，以下是最常用的非同步庫：​

​



| 庫 | 用途 | 說明 |
| --- | --- | --- |
| aiohttp | HTTP客戶端/伺服器 | 功能全面，效能優秀 |
| httpx | HTTP客戶端 | 支援同步/非同步，API類似Requests |
| asyncpg | PostgreSQL驅動 | 高效能非同步資料庫訪問 |
| aiomysql | MySQL驅動 | 非同步MySQL操作 |
| aioredis | Redis驅動 | 非同步Redis操作 |
| aiokafka | Kafka客戶端 | 非同步訊息佇列 |
| uvicorn | ASGI伺服器 | 高效能Web伺服器 |



​

httpx示例（推薦）​

​

Code block​

Python

import httpx​

import asyncio​

​

async def main():​

async with httpx.AsyncClient() as client:​

\# GET請求​

response = await client.get('https://httpbin.org/get')​

print(response.json())​

​

\# POST請求​

response = await client.post('https://httpbin.org/post', json={'key': 'value'})​

print(response.json())​

​

\# 併發請求​

urls = \['https://httpbin.org/get'\] \* 10​

tasks = \[client.get(url) for url in urls\]​

responses = await asyncio.gather(\*tasks)​

print(f"完成 {len(responses)} 個請求")​

​

asyncio.run(main())​

​

8.4 高併發伺服器設計​

設計高併發伺服器需要考慮IO模型、執行緒模型、架構模式等多個維度。​

IO模型對比​

​



| IO模型 | 特點 | 適用場景 |
| --- | --- | --- |





| 阻塞IO | 簡單，但效率低 | 簡單應用、學習 |
| --- | --- | --- |
| 非阻塞IO | 需要輪詢 | 特殊場景 |
| IO多路複用 | 單執行緒監聽多個連線 | 高併發伺服器 |
| 非同步IO |  |  |



​

FastAPI高併發示例​

​

Code block​

Python

from fastapi import FastAPI​

import asyncio​

import aiohttp​

from concurrent.futures import ThreadPoolExecutor​

import time​

​

app = FastAPI()​

executor = ThreadPoolExecutor(max\_workers=10)​

​

async def async\_io\_task():​

"""非同步IO任務"""​

async with aiohttp.ClientSession() as session:​

async with session.get('https://httpbin.org/delay/1') as resp:​

​

高併發設計原則：​

•

IO密集型：使用asyncio + 非同步庫​

•

CPU密集型：使用多程序或執行緒池​

•

混合型：非同步IO + 執行緒池/程序池​

​

​

九、網路程式設計實戰專案​

9.1 簡易聊天室開發​

透過實現一個TCP聊天室，綜合運用Socket、多執行緒、資料編碼等知識。​

聊天室伺服器​

​

Code block​

Python

​

聊天室客戶端​

​

Code block​

Python

import socket​

import threading​

​

class ChatClient:​

def \_\_init\_\_(self, host='127.0.0.1', port=9999):​

self.host = host​

self.port = port​

self.socket = socket.socket(socket.AF\_INET, socket.SOCK\_STREAM)​

​

def receive\_messages(self):​

"""接收訊息執行緒"""​

while True:​

try:​

message = self.socket.recv(4096).decode('utf-8')​

if not message:​

break​

print(message)​

except:​

break​

​

def start(self):​

"""啟動客戶端"""​

self.socket.connect((self.host, self.port))​

​

\# 啟動接收執行緒​

receive\_thread = threading.Thread(target=self.receive\_messages)​

​

9.2 網路爬蟲實現​

網路爬蟲是自動化採集網頁資料的程式，是網路程式設計的典型應用。​

基礎爬蟲框架​

​

Code block​

Python

​

爬蟲禮儀：遵守robots.txt規則，設定合理的請求間隔，不要對伺服器造成過大壓力。​

9.3 API介面測試工具​

API測試工具用於驗證介面的功能、效能和安全性。​

API測試框架​

​

Code block​

Python

​

9.4 網路監控系統​

網路監控系統用於實時監測網路狀態、檢測異常行為。​

簡易網路監控器​

​

Code block​

Python

​

​

​

​

作者：無涯​