📄 20010312002.htm
字号:
0Fh : 名字具有活动会话,现被撤消登记<br>
11h : NetBIOS 本地会话表满了<br>
12h : 没有挂起的Listen 命令,所有拒绝断开会话<br>
13h : 非法名字编号<br>
14h : 不能找到被调用名字或无回答<br>
15h : 找不到命令,或不能把*号或00h指定ncb_name的首字节,或名字已被撤消而不能再使用<br>
17h : 名字已被删除18h : 会话非正常结束<br>
19h : 检测到名字冲突<br>
1Ah : 不兼容的远程设备<br>
21h : 接口忙<br>
22h : 挂起的命令太多<br>
23h : 在ncb_lana_num域中无效的编号<br>
24h : 产生取消时,命令已完成<br>
25h : 字节组名命令指定了保留名字<br>
26h : 命令不能被撤消<br>
30h : 被另一个进程定义了名字<br>
34h : NetBIOS环境未被定义<br>
35h : 所用的操作系统资源用尽<br>
36h : 超出最大应用个数<br>
37h : NetBIOS无可以使用的SAP<br>
38h : 无可以使用的请求资源<br>
40h : 系统错误<br>
41h : 检测到远程适配器的热载波<br>
42h : 检测到本地适配器的热载波<br>
43h : 未检测到载波<br>
4Eh : 状态位12、14、或15被置位的时间超过 1 min<br>
4Fh : 状态位8--11中的一个或多个被置位<br>
50h--F6h: 适配器发生故障<br>
F7h : 隐式DIR-INITIALIZE错误<br>
F8h : 隐式DIR-OPEN-ADAPTER 错误<br>
F9h : IBM LAN支持程序内部错误<br>
FAh : 适配器检查<br>
FBh : NetBIOS 程序未被装入PC<br>
FCh : DIR-OPEN-ADAPTER 或 DIR-OPEN-SAP失败<br>
FDh : 不期望关闭适配器<br>
FFh : 命令挂起状态<br>
<br>
为了更好地解说NetBIOS 的编程,现设计一个用 NetBIOS 来编写获取网络适配器信息的程序<br>
<br>
二、创建程序例子<br>
<br>
在C++Builder 5.0 中选择File / New ,打开“New Items”对话框,在对框中选择Consol Wizard.随后弹出“Consol
Application Wizard”对话框,在Windows Type 中选择Consol,在ExecutionType中选择EXE,然后选择Finish,生成一个新的控制台应用程序。<br>
<br>
//“Project1.cpp”源代码如下:<br>
#pragma hdrstop<br>
#include <;condefs.h>;<br>
#include <;windows.h>;<br>
#include <;stdio.h>;typedef struct _ASTAT<br>
{<br>
ADAPTER_STATUS adapt;<br>
NAME_BUFFER NameBuffer[30];<br>
} ASTAT, *PASTAT;ASTAT Adapter;//自定义复位适配器函数<br>
bool ClearAdapter(NCB ncb);<br>
//---------------------------------------------------------------------------<br>
//#pragma argsused<br>
int main()<br>
{<br>
NCB ncb;<br>
UCHAR uRetCode;//先复位网络适配器ClearAdapter(ncb);memset(&;ncb,0,sizeof(ncb));//命令码为显示适配器状态<br>
ncb.ncb_command=NCBASTAT;<br>
ncb.ncb_lana_num=0;<br>
strcpy((char *)ncb.ncb_callname,"* ");<br>
ncb.ncb_buffer=(unsigned char *) &;Adapter;<br>
ncb.ncb_length=sizeof(Adapter);<br>
uRetCode=Netbios(&;ncb);<br>
printf("The NCBASTAT returned code is OX%x\n",uRetCode);if(uRetCode==0)<br>
{<br>
printf( "The Ethernet Number is: %02x_%02x_%02x_%02x_%02x_%02x\n",<br>
Adapter.adapt.adapter_address[0],<br>
Adapter.adapt.adapter_address[1],<br>
Adapter.adapt.adapter_address[2],<br>
Adapter.adapt.adapter_address[3],<br>
Adapter.adapt.adapter_address[4],<br>
Adapter.adapt.adapter_address[5] );<br>
if(Adapter.adapt.adapter_type==0xFF)<br>
printf("The adapter is Token Ring adapter.\n");<br>
else if(Adapter.adapt.adapter_type==0xFE)<br>
printf("The adapter is Ethernet adapter.\n");printf("The software-release
level is %d.%d\n",Adapter.adapt.rev_major,Adapter.adapt.rev_minor);<br>
printf("The number of names in the local names table is %d\n",Adapter.adapt.name_count);<br>
for(int i=0;i<;Adapter.adapt.name_count;i++)<br>
printf("%s\n",Adapter.NameBuffer[i].name);<br>
}//注意下面程序代码故意出错误<br>
char Remote[16]="202.112.87.221";//先复位网络适配器<br>
ClearAdapter(ncb);<br>
memset(&;ncb,0,sizeof(ncb));//命令码为发送数据<br>
ncb.ncb_command=NCBSEND;<br>
ncb.ncb_lana_num=0;<br>
ncb.ncb_lsn=4;<br>
ncb.ncb_sto=2;<br>
strcpy(ncb.ncb_callname,Remote);<br>
//strcpy((char *)ncb.ncb_callname,"* ");<br>
ncb.ncb_buffer=(unsigned char *) &;Adapter;<br>
ncb.ncb_length=sizeof(Adapter);<br>
uRetCode=Netbios(&;ncb);<br>
printf("The NCBASTAT returned code is OX%x\n",uRetCode);<br>
printf("The number of FRMR frames received is %d\n",Adapter.adapt.frmr_recv);<br>
printf("The number of FRMR frames transmitted is %d\n",Adapter.adapt.frmr_xmit);getchar();<br>
return 0;<br>
}<br>
//---------------------------------------------------------------------------<br>
//复位网络适配器 bool ClearAdapter(NCB ncb)<br>
{<br>
memset(&;ncb,0,sizeof(ncb));<br>
ncb.ncb_command=NCBRESET;<br>
ncb.ncb_lana_num=0;<br>
Netbios(&;ncb);<br>
return true;<br>
}<br>
<br>
以上实例利用网络基本输入/输出系统NetBIOS创建了一个能获取主机 MAC (网络适配器)信息及其他一些信息的应用程序。由于作者水平有限,有不当之处请凉解。本文希望能起到抛砖引玉的作用。
</div>
</div>
</td>
</tr>
</table>
</div>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -