今天我們要來做QUIC實作,我們會分三個部份來進行,第一步我們會先檢查curl是否支援HTTP/3接下來會在本機跑HTTP/3伺服器,最後再來個抓包,那我們就直接開始吧!
先使用指令:curl --version
如果有支援的話應該會看到HTTP3或ngtcp2之類的支援標記
像上圖就表示我的沒有支援,不過沒關係,我們可以使用python在本機跑
因為curl不支援HTTP/3,所以我們要用aioquic,這東西是Python的QUIC實作,包含範例http3 server/client,並支援qlog(記錄QUIC事件)
我們先啟用虛擬環境:source venv/bin/activate
安裝aioquic:pip install aioquic
接著安裝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
這是今天的最後一步了,我們要抓取封包並觀察裡面有沒有我們昨天講的那些東西
開一個終端機抓取封包:sudo tcpdump -i lo -s 0 -w ~/quic.pcap udp port 8443
接著發送請求:python3 aioquic/examples/http3_client.py --insecure https://localhost:8443/
可以看到伺服器端收到了請求
接下來我們安裝wireshark:sudo apt install wireshark
安裝完後使用指令:wireshark quic.pcap
會開啟wireshark視窗,如圖
可以看到有Initial、Handshake等,當然其他大部分都被加密了,需要keylog解密才能看到。
今天我們學了如何建立HTTP/3伺服器,並且抓包觀察QUIC封包內的內容,這就是今天的實作內容了