这两天接触NetBios,总算拨开了一层弄弄的雾 .
//NetBios()操作;
要操作NetBios()首先要知道LANA编号,往上有这部分只是,但是感觉不实用,起码我应为一个LANA编号无效捉摸了一天
首先获取LANA编号,暂理解网卡的编号;
int NBGetLANANUM()
{
NCB ncb;
memset(&ncb, 0, sizeof(ncb));
LANA_ENUM lana_enum;
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer = (unsigned char *)&lana_enum;
ncb.ncb_length = sizeof(lana_enum);
Netbios(&ncb);
NBCheck(ncb);
if (NRC_GOODRET == ncb.ncb_retcode)
{
printf("Ethernet Count is : %d\n\n", lana_enum.length);
// 对每一张网卡,以其网卡编号为输入编号
for (int i = 0; i < lana_enum.length; ++i)
{
printf("Ethernet 's num is %d\n", lana_enum.lana[i]);<span style="white-space:pre"> </span><span style="white-space:pre"> </span>
return lana_enum.lana[i];<span style="white-space:pre"> </span>//这里我仅测试第一块网卡所以返回;<span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;">}</span>
}
else
return -1;
}
这个端代码会返回第一块以太网卡的编号,然后我就可以做操作了;
省略一些.....
获取网卡状态首先要增加一个“操作名字”,这个名字目测是临时的,程序结束就没了;
BOOL NBAddName(int nLana, LPCSTR szName)
{
NCB ncb;
memset(&ncb, 0, sizeof(ncb)); //清空NCB结构体
ncb.ncb_command = NCBADDNAME; //NCBDDNAME 命令
ncb.ncb_lana_num = nLana;
//将szName赋值到ncb.ncb_name中
MakeNetbiosName((char *)ncb.ncb_name, szName);
Netbios(&ncb);
NBCheck(ncb);
return (NRC_GOODRET == ncb.ncb_retcode);
}
szName就是添加的操作名字 ,然后我们可以根据操作名字还获取其他操作,比如NCBSTAT
BOOL NBAdapterStatus(int nLana, PVOID pBuffer, int cbBuffer, LPCSTR szName)
{
NCB ncb;
memset(&ncb, 0, sizeof(ncb)); //..
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = nLana;
ncb.ncb_buffer = (PUCHAR)pBuffer;
ncb.ncb_length = cbBuffer;
//设置参数ncb.ncb_callname
MakeNetbiosName((char *)ncb.ncb_callname, szName);
Netbios(&ncb);
NBCheck(ncb);
return (NRC_GOODRET == ncb.ncb_retcode);
}
这些算是入门操作吧,其他你可以去执行NetBios了不是么,然后就可以扩展其他程序了,什么获取MAC什么的..