SQL: Uzyskanie adresu IP v4 serwera

12-mar-2021

W pewnych przypadkach trzeba ustalić jaki adres IPv4 jest przypisany do serwera. Można oczywiście zajrzeć do widoku sys.dm_exec_connections

Niestety ta metoda nie zadziała jeśli połączenie jest nawiązane przez Shared Memory, albo 127.0.0.1 albo (i to mój przypadek) przez IPv6, a tymczasem potrzebowałem IPv4.

Na całe szczęście udało się znaleźć ciekawy pomysł z wykorzystaniem xm_cmdshell i prostego polecenia ipconfig

https://stackoverflow.com/questions/142142/sql-query-to-get-servers-ip-address

Oto delikatnie zmieniona procedura – u mnie działa!

CREATE PROCEDURE #sp_get_ip_address (@ip VARCHAR(40) OUT)
AS
BEGIN
 SET NOCOUNT ON

DECLARE @Line varchar(200)
 DECLARE @pos int
 SET @ip = NULL
 CREATE TABLE #temp (line VARCHAR(200))
 
 EXECUTE sp_configure 'show advanced options', 1;
 RECONFIGURE
 EXEC sp_configure 'xp_cmdshell', 1
 RECONFIGURE

INSERT INTO #temp EXEC master..xp_cmdshell 'ipconfig'

EXECUTE sp_configure 'show advanced options', 1;
 RECONFIGURE
 EXEC sp_configure 'xp_cmdshell', 1
 RECONFIGURE

SELECT @Line = line
 FROM #temp
 WHERE UPPER (line) like '%IPV4%ADDRESS%'
 
 IF (ISNULL (@line,'***') != '***')
 BEGIN 
 SET @pos = CHARINDEX (':',@line,1);
 SET @ip = RTRIM(LTRIM(SUBSTRING (@line, @pos + 1, LEN(@line) - @pos)))
 END 
 DROP TABLE #temp

SET NOCOUNT OFF

END 
GO

DECLARE @ip VARCHAR(40)
EXEC #sp_get_ip_address @ip OUT
DROP PROCEDURE #sp_get_ip_address
SELECT @ip

Komentarze są wyłączone

Autor: Rafał Kraik