想得到终端网卡的地址???

我想用编程的方式得到终端的网卡地址,请问那位高手做过能帮帮我吗???
(本机的我可以得到,可是我的程序在终端上一运行得到的就是服务器的,这是为什么呢??):confused:

朋友,把你的程序放出来研究一下。

char buff[80];
NCB ncb;
UCHAR uRetCode;
//复位网络适配器
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;
Netbios(&ncb);
//取MAC地址
memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command=NCBASTAT;
ncb.ncb_lana_num=0;
strcpy((char*)ncb.ncb_callname,"* ");
ncb.ncb_buffer = (unsigned char *) &Adapter;
ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios(&ncb);

if(uRetCode == 0)
{
sprintf(buff, “%02x%02x%02x%02x%02x%02x”, Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]);
}
//Application->MessageBox(AnsiString(buff).
String Mac=AnsiString(buff);
Application->MessageBox(Mac.c_str(),“地址”,MB_OK);

在服务器能看到终端的连接吗?

你的头文件.h在哪?
能不能把
Netbios(&ncb);
这个函数放出来研究一下。
谢谢。

#include “stdafx.h"
#include
#include
#include
#include
#include
// 因 为 是 通 过NetAPI 来 获 取 网 卡 信 息,
所 以 需 要 包 含 其 题 头 文 件nb30.h
#include
typedef struct ASTAT
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;
ASTAT Adapter;
// 定 义 一 个 存 放 返 回 网 卡 信 息 的 变 量
// 输 入 参 数:lana_num 为 网 卡 编 号,
一 般 地, 从0 开 始, 但 在Windows 2000 中
并 不 一 定 是 连 续 分 配 的
void getmac_one (int lana_num)
{
NCB ncb;
UCHAR uRetCode;
memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_num;
// 指 定 网 卡 号
// 首 先 对 选 定 的 网 卡 发 送 一 个
NCBRESET 命 令, 以 便 进 行 初 始 化
uRetCode = Netbios( &ncb );
printf( “The NCBRESET
return code is: 0x %x \n", uRetCode );
memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_num; // 指 定 网 卡 号
strcpy((char *)ncb.ncb_callname,“ * " );
ncb.ncb_buffer = (unsigned char *) &Adapter;
// 指 定 返 回 的 信 息 存 放 的 变 量
ncb.ncb_length = sizeof(Adapter);
// 接 着, 可 以 发 送NCBASTAT 命 令
以 获 取 网 卡 的 信 息
uRetCode = Netbios( &ncb );
printf( “The NCBASTAT return code is:
0x %x \n", uRetCode );
if ( uRetCode == 0 )
{
// 把 网 卡MAC 地 址 格 式 化 成
常 用 的16 进 制 形 式, 如0010 -A4E4 -5802
printf( “The Ethernet Number[ %d] is:
%02X %02X - %02X %02X - %02X %02X\n",
lana_num,
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5] );
}
}
int main(int argc, char * argv)
{
NCB ncb;
UCHAR uRetCode;
LANA_ENUM lana_enum;
memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer = (unsigned char *) &lana_enum;
ncb.ncb_length = sizeof(lana_enum);
// 向 网 卡 发 送NCBENUM 命 令,
以 获 取 当 前 机 器 的 网 卡 信 息,
如 有 多 少 个 网 卡、 每 张 网 卡 的 编 号 等
uRetCode = Netbios( &ncb );
printf( “The NCBENUM return code is:
0x %x \n", uRetCode );
if ( uRetCode == 0 )
{
printf( “Ethernet Count is : %d\n\n", lana_enum.length);
// 对 每 一 张 网 卡, 以 其 网 卡 编 号 为
输 入 编 号, 获 取 其MAC 地 址
for ( int i=0; i

----这 段 代 码 可 以 直 接 嵌 入 相 关 的 应 用 系 统 之 中, 或 封 装 成.D
LL 或COM 控 件, 以 便 可 以 在Visual Basic、Visual Foxpro、Power Builder 或
Delphi 等 其 他 程 序 中 调 用。

rt

在服务器能看到终端的连接吗?
如果能看到,就有办法得到。

rt

终端上用的除了键盘鼠标显示器其他都是用的服务器。(终端原理)

方法有案二

  1. 通过API NetSessionEnum查找当前连接到服务器的计算机
    通过API gethostbyname得到IP地址
    再通过IP地址找MAC地址,象你前面做的一样。

2 通过API WTSEnumerrateSessions 得到终端服务器上的会话列表。
有了会话列表做什么都可以。