EEPROM 改碼:密碼與原理
多年工程討論沉澱下的核心認知:光模組兼容性不是固件問題——而是通過 I²C 讀取的 EEPROM 中的識別字元串。 交換機拒絕一個模組,僅僅是因為它不認識其中的廠商字元串。正是這個事實解釋了「把所有模組都編碼成 Cisco——幾乎哪裏都能用」這一常見做法,也解釋了整個編碼工具市場的存在。
密碼存放在哪裏
寫入模組記憶體的受保護區域,需要在寫入前把一個 4 位元組密碼寫到固定地址:
| 模組類型 | 記憶體塊 | 密碼偏移量 |
|---|---|---|
| SFP / SFP+ | A2h(I²C 地址 0x51) | 0x7B–0x7E |
| QSFP / XFP | A0h | 0x7B |
常見密碼
| 密碼 | 說明 |
|---|---|
00 00 10 11 | MSA 預設值——第一個該嘗試的 |
00 00 00 00、FF FF FF FF | 常見的預設值 |
9B B0 3D FA | 在不少模組上見過 |
4F 43 50 00 | ASCII 編碼的「OCP」 |
部分廠商的 QSFP-DD 模組自帶獨有的固定預設密碼,還有一些基於微處理器的模組使用會變化的可變密碼——這對任何想暴力破解的人來說都是一個陷阱。
為甚麼暴力破解不是辦法
守護整個記憶體映射的廠商級密碼,暴力破解大約需要 100 多天;即便是主機級的 ASCII 密碼,也要耗時近三天。實際可行的路徑是建立一個已知代碼和密碼的資料庫,從原廠模組中採集而來——這才是編碼工具真正的價值所在,而不是 I²C 硬件本身(那部分很簡單)。
自製編程器的坑
- 廉價的 CH341A 編程器不會計算 SFP 校驗和。 寫入一份沒有有效 CC_BASE/CC_EXT 的鏡像,得到的模組會被交換機拒絕。你需要一個能自動重新計算校驗和的工具。
- 有些交換機只能寫入地址 0x50,因此 0x51 上的密碼從交換機本身無法觸及——需要專用的編程器板卡。
- EEPROM 寫保護引腳——有些廠家在生產時把 WP 接到 Vcc,使模組在現場被鎖定、無法寫入。
來自現場的案例
- 編碼成某廠商身份的模組,在另一廠商的交換機上無法自動協商;重新編碼為該交換機自身的廠商字元串後,立刻就通了。
- 部分光模組廠商按設計出貨未編碼的模組,預期由買家自行為目標平台編碼。
- DWDM 模組通過同一個管理介面調諧波長,與編碼用的是同一套介面。
在 CodingBox 中操作
- 讀取模組;它會自動保存到code database,寫入前會先取一份備份。
- 在受保護記憶體與密碼中設定表地址、密碼地址和密碼值——資料庫中已知的密碼會自動應用。
- 在 EEPROM editor 中編輯廠商、型號及其他身份欄位。 CC_BASE 和 CC_EXT 會為你自動重新計算。
- 寫入選定的頁面,然後讀回驗證。用 核實光模組中的命令在交換機上檢查模組。
只為你有權獲得的互操作性對模組編碼,並遵守所在組織及廠商的政策。
編輯前先弄清哪個位元組保存甚麼:SFF-8472 A0h 映射、 SFF-8636 高位頁面映射、 CMIS 高位頁面映射、 XFP 映射。
各廠商的目標型號及其命名規則:OEM 型號;各平台在寫入後各自檢查甚麼: 各 NOS 如何校驗模組。