iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0

今天我們要來做QUIC實作,我們會分三個部份來進行,第一步我們會先檢查curl是否支援HTTP/3接下來會在本機跑HTTP/3伺服器,最後再來個抓包,那我們就直接開始吧!

步驟一.檢查curl是否支援HTTP/3

先使用指令:curl --version

如果有支援的話應該會看到HTTP3或ngtcp2之類的支援標記
https://ithelp.ithome.com.tw/upload/images/20251005/201780085wkGPoOiNa.png

像上圖就表示我的沒有支援,不過沒關係,我們可以使用python在本機跑

步驟二.在本機跑HTTP/3伺服器

因為curl不支援HTTP/3,所以我們要用aioquic,這東西是Python的QUIC實作,包含範例http3 server/client,並支援qlog(記錄QUIC事件)

我們先啟用虛擬環境:source venv/bin/activate

安裝aioquic:pip install aioquic

https://ithelp.ithome.com.tw/upload/images/20251005/20178008laHYFDWKav.png

接著安裝aioquic會用到的一些套件:pip install wsproto h11 cryptography cffi starlette

再來從Github下載範本:git clone https://github.com/aiortc/aioquic.git cd aioquic

最後就能成功啟動伺服器了,指令:python -m examples.http3_server \ --certificate cert.pem \ --private-key key.pem \ --host 0.0.0.0 \ --port 8443 \ examples.demo:app
https://ithelp.ithome.com.tw/upload/images/20251005/20178008PjiP1vGe5X.png

步驟三.抓包並觀察

這是今天的最後一步了,我們要抓取封包並觀察裡面有沒有我們昨天講的那些東西

開一個終端機抓取封包:sudo tcpdump -i lo -s 0 -w ~/quic.pcap udp port 8443
https://ithelp.ithome.com.tw/upload/images/20251005/20178008uZZQcSzUpI.png
接著發送請求:python3 aioquic/examples/http3_client.py --insecure https://localhost:8443/
https://ithelp.ithome.com.tw/upload/images/20251005/201780080ClVb6sn6s.png
可以看到伺服器端收到了請求
https://ithelp.ithome.com.tw/upload/images/20251005/20178008aOdbuOlxI2.png
接下來我們安裝wireshark:sudo apt install wireshark
https://ithelp.ithome.com.tw/upload/images/20251005/20178008ta8b7K58X5.png
安裝完後使用指令:wireshark quic.pcap
會開啟wireshark視窗,如圖
https://ithelp.ithome.com.tw/upload/images/20251005/20178008MWqMGwAjmJ.png
可以看到有Initial、Handshake等,當然其他大部分都被加密了,需要keylog解密才能看到。

今日小結

今天我們學了如何建立HTTP/3伺服器,並且抓包觀察QUIC封包內的內容,這就是今天的實作內容了


上一篇
Day24-認識UDP/QUIC
系列文
Izumi從零開始的30日WEB馬拉松25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言