根据进程号获取该进程所在客户端的ip地址

create PROCEDURE dbo.SP_SPIDtoIP @SPID int
AS
-- SPID to MAC
-- lj
DECLARE @MAC as varchar(12)
SELECT @MAC = NET_ADDRESS FROM master..sysprocesses WHERE SPID = @SPID
-- MAC to IP
DECLARE @MACDisplay as varchar(18)
DECLARE @IP as varchar(15)
CREATE TABLE #temp (OUTPUT varchar(255) null)
SET NOCOUNT ON
INSERT INTO #temp EXEC master..xp_cmdshell 'arp -a'
if @@error<>0
begin
RAISERROR ('The level for job_id:%d should be between %d and %d.', 16, 1)
--ROLLBACK TRANSACTION
end
SELECT @MACDisplay = LEFT(@MAC, 2) + '-' + SUBSTRING(@MAC, 3, 2) + '-' + SUBSTRING(@MAC, 5, 2) + '-' + SUBSTRING(@MAC, 7, 2) + '-' + SUBSTRING(@MAC, 9, 2) + '-' + SUBSTRING(@MAC, 11, 2) SELECT @IP = SUBSTRING(output, 3, 15) FROM #temp WHERE output LIKE '%' + @MACDisplay + '%'
-- Resolve the IP
--DECLARE @CMD as varchar(100)
--select @CMD = 'master..xp_cmdshell "ping -a ' + @IP + '"'
--exec (@CMD)
DROP TABLE #temp
SET NOCOUNT OFF
GO

--test
SP_SPIDtoIP 56

--test2
declare @SPID int
DECLARE @MAC as varchar(12)
set @SPID=56
SELECT @MAC = NET_ADDRESS FROM master..sysprocesses WHERE SPID = @SPID
-- MAC to IP
DECLARE @MACDisplay as varchar(18)
DECLARE @IP as varchar(15)
CREATE TABLE #temp (OUTPUT varchar(255) null)
SET NOCOUNT ON
INSERT INTO #temp EXEC master..xp_cmdshell 'arp -a'
if @@error<>0
begin
RAISERROR ('The level for job_id:%d should be between %d and %d.', 16, 1)
--ROLLBACK TRANSACTION
end
SELECT @MACDisplay = LEFT(@MAC, 2) + '-' + SUBSTRING(@MAC, 3, 2) + '-' + SUBSTRING(@MAC, 5, 2) + '-' + SUBSTRING(@MAC, 7, 2) + '-' + SUBSTRING(@MAC, 9, 2) + '-' + SUBSTRING(@MAC, 11, 2) SELECT @IP = SUBSTRING(output, 3, 15)
FROM #temp WHERE output LIKE '%' + @MACDisplay + '%'
-- Resolve the IP
--DECLARE @CMD as varchar(100)
--select @CMD = 'master..xp_cmdshell "ping -a ' + @IP + '"'
--exec (@CMD)


select * from #temp
DROP TABLE #temp

SELECT NET_ADDRESS FROM master..sysprocesses WHERE SPID = 56

----result
/*
OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
Interface: 192.168.0.1 --- 0x2
Internet Address Physical Address Type
192.168.0.31 f0-7d-68-96-df-9d dynamic
192.168.0.45 00-1c-25-dd-93-85 dynamic
192.168.0.54 00-30-18-aa-30-f0 dynamic
192.168.0.63 00-30-18-af-97-58 dynamic
192.168.0.93 00-16-ec-76-41-00 dynamic
192.168.0.95 00-30-18-a6-14-ae dynamic
192.168.0.97 00-1a-4b-69-18-0c dynamic
192.168.0.99 00-0f-7a-18-0b-12 dynamic
192.168.0.147 00-30-18-b0-1c-37 dynamic
192.168.0.149 00-30-18-a6-15-2b dynamic
192.168.0.152 00-21-70-e2-3d-2d dynamic
192.168.0.157 00-30-18-a6-48-e7 dynamic
NULL

NET_ADDRESS
------------
001C25DD9385

*/
-----

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
--关闭一样.只是将上面的后面的那个"1"改成"0"就可以了.

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
--如果cmdshell还不行的话,就再运行:
dbcc addextendedproc("xp_cmdshell","xplog70.dll");
--或者
sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
--来恢复cmdshell。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值