我用以下的语句,获取MAC :
create proc p_getlinkinfo 
@dbname sysname=null,--要查询的数据库名,默认查询所有数据库的连接信息 
@includeip bit=0--是否显示IP地址,因为查询IP地址比较费时,所以增加此控制 
as 
declare @dbid int 
set @dbid=db_id(@dbname) create table #tb(id int identity(1,1),dbname sysname,hostname nchar(128),loginname nchar(128),net_address nchar(12),net_ip nvarchar(15),prog_name nchar(128)) 
insert into #tb(hostname,dbname,net_address,loginname,prog_name) 
select distinct hostname,db_name(dbid),net_address,loginame,program_name from master..sysprocesses 
where hostname <>'' and (@dbid is null or dbid=@dbid) if @includeip=0 goto lb_show  --如果不显示IP地址,就直接显示 declare @sql varchar(500),@hostname nchar(128),@id int 
create table #ip(hostname nchar(128),a varchar(200)) 
declare tb cursor local for select distinct hostname from #tb 
open tb 
fetch next from tb into @hostname 
while @@fetch_status=0 
begin 
set @sql='ping '+@hostname+' -a -n 1 -l 1' 
insert #ip(a) exec master..xp_cmdshell @sql 
update #ip set hostname=@hostname where hostname is null 
fetch next from tb into @hostname 
end update #tb set net_ip=left(a,patindex('%:%',a)-1) 
from #tb a inner join ( 
select hostname,a=substring(a,patindex('Ping statistics for %:%',a)+20,20) from #ip 
where a like 'Ping statistics for %:%') b on a.hostname=b.hostname lb_show: 
select id,数据库名=dbname,客户机名=hostname,用户名=loginname 
,网卡物理地址=net_address,IP地址=net_ip,应用程序名称=prog_name from #tb 
GO 获取的MAC是系统发配的,因为我在系统修改了MAC后,查询分析器每次获取的是修改后的MAC,并不是真的MAC,请大侠指教怎样才能获取真正的MAC

解决方案 »

  1.   

    这个可以吗?    exec   master..xp_cmdshell   'ipconfig   /all '参考资料:http://topic.csdn.net/u/20070910/12/3d9673e0-dfe4-4c6e-aa8a-1c201bc89df2.html你看看行吗??如果不对还请指出。。如有错误还请包涵啊。。
      

  2.   

     用这个命令:exec   master..xp_cmdshell   'ipconfig   /all '   获取的还是系统分配的MAC,我测试过了,在系统里修改MAC后,这个命令也是获取修改后的mac,也就不是真正的MAC。如何办呢?
      

  3.   

    这个可能比较复杂了,也许要调用VMI之类的 
      

  4.   

    select   top   1   net_address,*  from   master..sysprocesses 
    where     hostname=left(@@servername,charindex( '\ ',@@servername+ '\ ')-1) 
      

  5.   

    楼上的大哥,在master..sysprocesses保存的 mac是系统分配的MAC,并不是真正MAC地址
      

  6.   

    不知道SQL能不能直接获取,
    可能要用程序写,调用VMI来获取,
    再在SQL调用dll,没啥思路
      

  7.   

    除了通过编程直接访问网卡,似乎没有什么现成的方法获得网卡的 mac 地址。如果 lz 是希望用某一序列号唯一标示一台计算机,建议使用 uuid,这个保存在主板中,并且是全球唯一的。
    命令行:
    wmic path win32_ComputerSystemProduct get uuid要访问远程计算机的
    wmic /node:servername path  win32_ComputerSystemProduct get uuid
    但是要确保远程计算机的 135/tcp 端口开放,并且具有相应的访问权限