NetBIOS (Network Basic Input/Output System) 是一個應用層程式介面 (API),提供跨網路的命名、資料報、會話等通訊服務。雖然屬於較早期技術,但在區域網路、舊系統維護、特定嵌入式環境中仍有應用。它位於 OSI 模型的會話層與表示層之間,支援 IEEE 802.2 LLC 協議,可運行於 DOS、OS/2、UNIX、Windows 等平台。
Add Name、Add Group Name、Delete Name。Send/Receive Broadcast Datagram) 與 定向 (Send/Receive Datagram)。Listen(被動),另一方 Call(主動),名稱匹配後建立會話。Send / Receive。Reset:重置介面卡,終止所有會話。Adapter Status:查詢介面卡狀態、錯誤計數、名稱表。Cancel:取消未完成掛起命令。Unlink:RPL 啟動介面卡脫離服務器。Find Name:查詢名稱對應的介面卡。Trace:啟用命令追蹤供除錯。所有 NetBIOS 操作透過填寫 NCB 結構並呼叫 Netbios(&ncb) 完成。關鍵欄位:
typedef struct _NCB {
UCHAR ncb_command; // 命令碼
UCHAR ncb_retcode; // 返回碼
UCHAR ncb_lsn; // 區域會話號
UCHAR ncb_num; // 資源編號
PUCHAR ncb_buffer; // 資料緩衝區指標
WORD ncb_length; // 緩衝區長度
UCHAR ncb_callname[16]; // 遠端名稱
UCHAR ncb_name[16]; // 本地名稱
UCHAR ncb_rto; // 接收逾時
UCHAR ncb_sto; // 發送逾時
// ... 事件、回呼等
} NCB;
// 伺服器端
NCB ncb = {0};
ncb.ncb_command = NCBADDNAME; // 註冊名稱
strcpy((char*)ncb.ncb_name, "MYSERVER");
Netbios(&ncb);
ncb.ncb_command = NCBLISTEN; // 偵聽
strcpy((char*)ncb.ncb_name, "MYSERVER");
strcpy((char*)ncb.ncb_callname, "CLIENT*"); // 接受任何以 CLIENT 開頭
Netbios(&ncb); // 返回 ncb_lsn 為會話 ID
// 用戶端
ncb.ncb_command = NCBADDNAME;
strcpy((char*)ncb.ncb_name, "CLIENT1");
Netbios(&ncb);
ncb.ncb_command = NCBCALL;
strcpy((char*)ncb.ncb_name, "CLIENT1");
strcpy((char*)ncb.ncb_callname, "MYSERVER");
Netbios(&ncb); // 返回 ncb_lsn
// 雙方均可用 ncb_lsn 進行 Send/Receive
ncb.ncb_command = NCBSEND;
ncb.ncb_lsn = lsn;
ncb.ncb_buffer = (PUCHAR)"Hello";
ncb.ncb_length = 5;
Netbios(&ncb);
nb30.h、連結 netapi32.lib(或使用 Netbios 動態連結)。NCB 操作為 C++ 類別,管理資源、異常處理。新專案建議使用: