Create Table #(str varchar(200))  
  Insert # Exec master..xp_cmdshell 'ipconfig /all'  
  -- 服务器名
     select   服务器名=@@servername
     Select Rtrim(Ltrim(Stuff(str,1,charindex(':',str),''))) From # Where Ltrim(str)   like   '%Host Name%'

  -- 服务器IP 
   Select Rtrim(Ltrim(Stuff(str,1,charindex(':',str),''))) From # Where Ltrim(str)   like   '%IP Address%'
    -- 物理地址      
      Select Rtrim(Ltrim(Stuff(str,1,charindex(':',str),''))) From # Where Ltrim(str)   like   '%Physical Address%'  
   Select * From #

Drop Table #


取客户端机器信息
Create proc usp_getClient_infor
  as
  set nocount on
 
  Declare @rc int
  Declare @RowCount int
 
  Select @rc=0
  Select @RowCount=0
 
  begin
  --//create temp table ,save sp_who information
  create table #tspid(
  spid int null,
  ecid int null,
  status nchar(60) null,
  loginname nchar(256) null,
  hostname nchar(256) null,
  blk bit null,
  dbname nchar(256) null,
  cmd nchar(32)
  )
 
  --//create temp table save all SQL client IP and hostname and login time
  Create table #userip(
  [id]int identity(1,1),
  txt varchar(1000),
  )
 
  --//Create result table to return recordset
  Create table #result(
  [id]int identity(1,1),
  ClientIP varchar(1000),
  hostname nchar(256),
  login_time datetime default(getdate())
 
  )
  --//get host name by exec sp_who ,insert #tspid from sp_who,
  insert into #tspid(spid,ecid,status,loginname,hostname,blk,dbname,cmd) exec sp_who
 
  declare @cmdStr varchar(100),
  @hostName nchar(256),
  @userip varchar(20),
  @sendstr varchar(100)
 
  --//declare a cursor from table #tspid
  declare tspid cursor
for select distinct hostname from #tspid with(nolock) where spid>50
for read only
open tspid
  fetch next from tspid into @hostname
  While @@FETCH_STATUS = 0
  begin
  select @cmdStr='ping '+rtrim(@hostName)
 
  insert into #userip(txt) exec master..xp_cmdshell @cmdStr
 
  select @rowcount=count(id) from #userIP
 
  if @RowCount=2 --//no IP feedback package
  begin
  insert into #Result(ClientIP,hostname) values('Can not get feedback package from Ping!',@hostname)
  end
  if @RowCount>2
  begin
  select @userip=substring(txt,charindex('[',txt)+1,charindex(']',txt)-charindex('[',txt)-1)
  from #userIP
  where txt like 'Pinging%'
 
  insert into #Result(ClientIP,hostname) values(@userIP,@hostname)
  end
  select @rc=@@error
  if @rc=0
  truncate table #userip --//clear #userIP table
 
  fetch next from tspid into @hostname
  end
 
  close tspid
  deallocate tspid
select * from #result with(nolock)
drop table #tspid
  drop table #userip
  drop table #result
  end
  go
  exec usp_getClient_infor


xp_cmdshell  
  以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出。授予非管理用户执行   xp_cmdshell   的权限。
posted on 2008-06-23 12:04  大连软件-吴  阅读(205)  评论(0编辑  收藏  举报