分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
目標: 當分享自己手機、家裡的 WiFi時,可以不用讓客人輸入帳戶密碼,只要掃 QRCode 即可自動登入
原理: 主要是以下 2 個部分處理完成,即可實現掃描 QR Code 自動登入 WiFi
1. QR Code 的數據格式 |
2. 手機系統的處理邏輯 |
WiFi QR Code 的標準格式進行編碼,字串如下:
WIFI:T:<加密類型>;S:<SSID>;P:<密碼>;;
原理: 主要是以下 2 個部分處理完成,即可實現掃描 QR Code 自動登入 WiFi
T | : | 指定 WiFi 的加密類型(WPA, WEP, 不加密) |
S | : | 指定 WiFi 的網路名稱(SSID) |
P | : | 指定 WiFi 的密碼 |
; | : | 每個字段用分號分隔,最後以 2 個分號 (;;) 結束 |
因此,當編碼成 QR Code 後,手機掃描並且解碼時就能理解這個格式。
當我們用手機的相機或 QR Code 掃描器應用掃描 WiFi QR Code 時,手機會自動解析這個字串格式的內容。
接著,手機的作業系統會執行以下步驟:
1.解碼 QR Code | : | 手機解碼 QR Code,辨識出其中的字串資料。 |
2.識別 WiFi 資訊 | : | 手機偵測到資料的格式符合 WiFi 配置的標準格式。 |
作業系統會辨識出這是一個 WiFi 網路配置訊息,而不是普通的文字。 | ||
3.自動連線 | : | 基於辨識出的信息,手機會彈出一個提示窗口,詢問使用者是否連接到該 WiFi 網路(某些系統或應用程式會直接嘗試連線)。 |
如果使用者確認,手機就會使用這些資訊(SSID、加密類型、密碼)來自動連接到指定的 WiFi 網路。 |
因此,SSID + 密碼 + WiFi 格式都正確,手機就可以自動登入 Wifi
這種自動連接 WiFi 的功能由手機的作業系統實現。
現代智慧型手機的作業系統(如 Android 和 iOS)都支援這種標準的 WiFi QR Code 格式,並且內建了處理邏輯,可自動辨識和連接 WiFi 網路。
因此除了常見的手機外 IPad 與 Android 的平板可以也正常支持
在執行自動連線之前,手機通常會提示用戶,以確保用戶了解即將連線的網路。
這是為了避免在不安全的環境中自動連接到惡意 WiFi 網路。此外,如果網路設定錯誤(例如密碼不正確或加密類型不符),連線也會失敗。
如果不是信任的來源,若惡意人士讓其自動連結可能會讓資料被竊取,因此還是需謹慎小心
隨意連線不知名的 Wifi 常見風險如下:
1. 中間人攻擊 (Man-in-the-Middle Attack) | : | 攻擊者可以在你和合法的 WiFi 熱點之間插入,從而攔截、篡改或監視你發送和接收的數據。 |
這可能包括你的登入憑證、信用卡信息、電子郵件內容等。 | ||
2. 惡意熱點 (Rogue Hotspot) | : | 攻擊者可能設置一個看似合法的 WiFi 熱點,誘使你連接。 |
一旦連接,攻擊者可以輕鬆獲取你的所有網路流量,甚至將惡意軟體傳輸到你的設備。 | ||
3. 數據洩露 | : | 在不安全的 WiFi 網路上,你的數據可能是未加密的, |
這意味著你在訪問網站或使用應用程式時發送的數據(如電子郵件、社交媒體信息、文件傳輸等)可以被第三方輕鬆攔截。 | ||
4. 竊取個人信息 | : | 通過連接到不安全的 WiFi 網路,攻擊者可能會竊取你的個人信息,包括你的用戶名、密碼、銀行信息和其他敏感數據。這可能導致身份盜竊、財務損失等問題。 |
5. 釣魚攻擊 (Phishing) | : | 攻擊者可能會通過偽造的 WiFi 網路誘騙你訪問虛假的網站,要求你輸入敏感信息,如登入憑證或信用卡信息。 |
這種攻擊通常是高度偽裝的,讓人難以辨別真偽。 |
代碼中,首先要引用 QR Code Js 套件 QrCode.js
對應的 Github,目前已有 135000 左右的星星,大獲好評
<head>
<!-- 1. 引入 qrcode.min.js -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WIFI QR Code 自動連線產生器</title>
<script src="qrcode.min.js"></script>
</head>
建立一個 Form 區塊,並且提供輸入三個選項
SSID (WiFi 名稱) - 輸入 |
Password(WiFi 密碼) - 輸入 |
Encryption Type(加密類型) - 下拉式選單 |
並且提供 2 個按鈕,產生 / 下載 圖片
<!-- 2. 用戶輸入的 Form 區塊 -->
<h1>WIFI QR Code 自動連線產生器</h1>
<form id="wifiForm">
<label for="ssid">SSID (WiFi 名稱):</label><br>
<input type="text" id="ssid" name="ssid" required><br><br>
<label for="password">Password(WiFi 密碼):</label><br>
<input type="password" id="password" name="password"><br><br>
<label for="encryption">Encryption Type(加密類型):</label><br>
<select id="encryption" name="encryption">
<option value="WPA">WPA/WPA2</option>
<option value="WEP">WEP</option>
<option value="nopass">None (Open Network)</option>
</select><br><br>
<button type="button" onclick="generateQRCode()">Generate QR Code</button>
<button id="downloadBtn" style="display: none;" onclick="downloadQRCode()">Download QR Code Image</button>
</form>
<canvas id="canvas"></canvas>
當點擊按鈕時,會觸發 generateQRCode() 的函式,依照用戶輸入的內容組成 WiFi 字串格式並產生圖片
// 3. 產生QR Code
function generateQRCode() {
// 3-1. 取得用戶輸入的值
const ssid = document.getElementById("ssid").value;
const password = document.getElementById("password").value;
const encryption = document.getElementById("encryption").value;
// 3-2. 建立 WiFi QR Code 數據
const wifiQRCodeData = `WIFI:T:${encryption};S:${ssid};P:${password};;`;
// 3-3. 產生 QR Code
const canvas = document.getElementById("canvas");
QRCode.toCanvas(canvas, wifiQRCodeData, {width: 300, height:300 },function (error) {
if (error) console.error(error);
console.log('QR Code 生成完成!');
// 3-4. 產生成功時,才顯示下載按鈕
document.getElementById("downloadBtn").style.display = "inline-block";
});
}
為了方便使用,可以再點擊下載取得圖片,會觸發 downloadQRCode() 的函式,將當前的 image 轉成檔案
// 4. 下載 QR Code 的圖片
function downloadQRCode() {
const canvas = document.getElementById("canvas");
const link = document.createElement("a");
const ssid = document.getElementById("ssid").value;
link.href = canvas.toDataURL("image/png");
link.download = "wifi_qrcode_"+ ssid +".png";
link.click();
}
WiFi QRCode 產生器 - 工具網址
有以下介面,當輸入資訊後,點擊[產生]按鈕
就會產生圖片,以及產生[下載]圖片按鈕
[下載] 後可以得到一個 QRCODE 可以列印出來在家裡,方便家人連線
將自己家裡的 WIFI 路由器,或者開啟手機熱點,記錄下這三個資訊
在工具網頁上輸入熱點資料,產生 QRCODE
可以拿其他人的手機來掃瞄此 WIFI QRCODE
一些安全性高的手機,會再多一道詢問是否連線 (有些品牌會自動連線)
點擊連線至該網路後,即可實現不輸入 Wifi 帳號密碼進行自動連線。