大約一個月前,主管交辦我要把前輩研究過的 OpenAudIT 架起來。
當時其實也有討論過 GLPI、Observium、LibreNMS,但最後還是挑了 OpenAudIT。
結果一上線,馬上遇到一個大刺 —— unknown 設備一堆。
雖然 SNMP 服務是有回應的,但自動掃描卻失敗。
手動測試:
snmpget -v2c -c public 140.112.xxx.77 SNMPv2-MIB::sysDescr.0
# => HP LaserJet MFP M426fdw
換到另一台:
snmpget -v2c -c public 140.112.xxx.228 SNMPv2-MIB::sysDescr.0
# => STRING: HP ETHERNET MULTI-ENVIRONMENT
甚至 nmap
都能抓到:
nmap -sU -p161 --script snmp-info --script-args=snmpcommunity=public -Pn 140.112.xxx.228
但 OpenAudIT 就是「認不得」→ 結論:UDP 161 回應有問題,導致 自動偵測失敗。
更慘的是,社群版 API 文件說有「匯入功能」,結果壓根找不到。
既然羊駝(Ollama)幫不上忙,那就自己來。
我寫了一個 snmp_to_csv.sh,能把多台設備的 SNMP 資訊抓出來轉 CSV。
chmod +x snmp_to_csv.sh
SNMP_COMM=public SNMP_VER=2c ./snmp_to_csv.sh 140.112.xxx.77 > devices.csv
輸出結果:
ip,name,hostname,sysDescr,sysName,sysObjectID,sysUpTime,model,serial,manufacturer,mac,snmp_version,snmp_oid,snmp_enterprise_id,last_seen
140.112.xxx.77,"140.112.xxx.77","NPI27C868","HP ETHERNET MULTI-ENVIRONMENT,SN:PHB8K2T2RS,FN:1M722C7,SVCID:27130,PID:HP LaserJet MFP M426fdw","NPI27C868","SNMPv2-SMI::enterprises.11.2.3.9.1","40:9:45:42.33","HP LaserJet MFP M426fdw","PHB8K2T2RS","Hewlett Packard","00:11:22:33:44:55","2c","serial_oid","1","2025-09-30 06:14:38"
拿這份 CSV,再轉成 OpenAudIT JSON 格式,就能補上原本抓不到的設備資訊。
{
"id": 1288,
"attributes": {
"name": "140.112.xxx.77",
"ip": "140.112.xxx.77",
"hostname": "",
"manufacturer": "",
"model": "",
"serial": ""
}
}
{
"id": 1288,
"attributes": {
"name": "140.112.xxx.77",
"ip": "140.112.xxx.77",
"hostname": "NPI27C868",
"manufacturer": "Hewlett Packard",
"model": "HP LaserJet MFP M426fdw",
"serial": "PHB8K2T2RS",
"sysDescr": "HP ETHERNET MULTI-ENVIRONMENT..."
}
}
結果:unknown → 正常「HP Printer」!
flowchart TD
A[設備 SNMP] -->|snmpget / snmpwalk| B[snmp_to_csv.sh]
B --> C[輸出 CSV]
C --> D[轉換成 JSON 格式]
D --> E[OpenAudIT 匯入]
E --> F[unknown → 正常顯示]