Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 получение IP адреса программой по No-IP домену  [new]
Nirraen
Member

Откуда:
Сообщений: 3
Здравствуйте! Есть сервер определённого проекта. Когда он запускается, он запрашивает IP адреса из БД.
Есть там столбец: fdServerPublicIP.
Варианты развития событий 2:
1. если в столбец вписать 127.0.0.1 или 192.168.0.100 или просто внешний IP, то сервер выдаст верную информацию:
автор
Connect Client : 65536
GET_MINUSERSERVER_REQ : **.**.189.179:1374(127.0.0.1:9153)
onClosed:index=131073, closeType=2
Client disconnected : 65536

автор
Connect Client : 65536
GET_MINUSERSERVER_REQ : **.**.189.179:1374(192.168.0.100:9153)
onClosed:index=131073, closeType=2
Client disconnected : 65536

и т.д.

2. если в стобец fdServerPublicIP я впишу No-Ip домен, то сервер выдаёт:
автор
GET_MINUSERSERVER_REQ : **.**.189.179:1374(255.255.255.255:9153)

и клиент к серверу уже подключиться, разумеется, не может.

Пришёл к выводу, что виновник MSSQL, пытался найти какие-то плагины, чтобы MSSQL сервер видел IP по домену No-Ip, но пока безрезультатно.

Есть идеи?

P.S. использую MSSQL 2012.
P.S.S. нашёл какую-то статью http://support.simpledns.com/KB/a152/ms-sql-server-plus-plug-in.aspx но пока не вчитывался, оно ли это...
P.S.S.S.
вот хранимая процедура, по которой стартует сервер:


автор
ALTER PROCEDURE [dbo].[usp_startServer]
@address varchar(20),
@port int,
@reload bit
AS

SET NOCOUNT ON
EXEC dbo.usp_LogTranCount @@procid

declare @servernum int;
declare @serverPublicIP varchar(50);
declare @billingSystem varchar(128);
declare @billingServerIP varchar(50), @billingServerIP1 varchar(50), @billingServerIP2 varchar(50), @billingServerIP3 varchar(50)
declare @billingServerPort int, @billingServerPort1 int, @billingServerPort2 int, @billingServerPort3 int

declare @setcount int;

declare @userConnectMax int

select @servernum = fdNum ,
@serverPublicIP = fdServerPublicIP,
@billingSystem = fdBillingSystem,
@BillingServerIP = fdBillingServerIP,
@BillingServerIP1 = fdBillingServerIP1,
@BillingServerIP2 = fdBillingServerIP2,
@BillingServerIP3 = fdBillingServerIP3,
@BillingServerPort = fdBillingServerPort,
@BillingServerPort1 = fdBillingServerPort1,
@BillingServerPort2 = fdBillingServerPort2,
@BillingServerPort3 = fdBillingServerPort3,
@userConnectMax = fdUserConnectMax
from tblServerListAgentSvr with(nolock)
where fdServerIP = @address and
fdServerPort = @port;

if @servernum is null
begin
raiserror('cannot get correct server num', 16, 1);
return;
end

declare @isMasterServer bit
select @isMasterServer = 1 from tblServerSettingInfo with(nolock) where fdKey = 'masterServerNum' and @servernum = cast(fdValue as int)


-- 마스터 서버이거나 테스트 서버인 경우 GameDataNewChaos 에 기본값을 넣어준다.
if @isMasterServer = 1 or exists(select * from tblServerSettingInfo with(nolock) where fdKey = 'testDB' and fdValue = 'true') and @reload = 0
begin
if not exists(select * from GameDataNewChaos)
begin
insert GameDataNewChaos values (0,0)
end
end

select servernum = @servernum,
serverpublicip = @serverPublicIP,
billingsystem = @billingsystem,
billingserverip = @billingserverip,
billingserverip1 = isnull(@billingserverip1,''),
billingserverip2 = isnull(@billingserverip2,''),
billingserverip3 = isnull(@billingserverip3,''),
billingserverport = @billingserverport,
billingserverport1 = isnull(@billingserverport1,-1),
billingserverport2 = isnull(@billingserverport2,-1),
billingserverport3 = isnull(@billingserverport3,-1),
isMasterServer = isnull(@isMasterServer, 0),
userConnectMax = isnull(@userConnectMax, 0),
dbtime = getDate()
28 авг 13, 14:00    [14765979]     Ответить | Цитировать Сообщить модератору
 Re: получение IP адреса программой по No-IP домену  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Nirraen
Пришёл к выводу, что виновник MSSQL
И на чем же этот вывод основан?
28 авг 13, 14:08    [14766047]     Ответить | Цитировать Сообщить модератору
 Re: получение IP адреса программой по No-IP домену  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nirraen
то сервер выдаёт:
автор
GET_MINUSERSERVER_REQ : **.**.189.179:1374(255.255.255.255:9153)

MSSQL такого не выдает
28 авг 13, 14:11    [14766070]     Ответить | Цитировать Сообщить модератору
 Re: получение IP адреса программой по No-IP домену  [new]
Nirraen
Member

Откуда:
Сообщений: 3
пока на поверхостных соображениях.
вместо нужного IP адреса сервер видит 255.255.255.255

есть ли способ проверить, что в переменной serverpublicip лежит IP адрес полученный спомощью No-Ip домена?
28 авг 13, 14:12    [14766079]     Ответить | Цитировать Сообщить модератору
 Re: получение IP адреса программой по No-IP домену  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nirraen
вместо нужного IP адреса сервер видит 255.255.255.255

Сервер не может видеть адрес/порт. Он может слушать адрес/порт
И без соединения с сервером невозможно выполнить не то что процедуру, а вообще любую команду

Nirraen
есть ли способ проверить, что в переменной serverpublicip лежит IP адрес полученный спомощью No-Ip домена?

Протестировать свою процедуру. И убедиться, что вы вызываете ее с правильными параметрами
28 авг 13, 14:15    [14766103]     Ответить | Цитировать Сообщить модератору
 Re: получение IP адреса программой по No-IP домену  [new]
Nirraen
Member

Откуда:
Сообщений: 3
сервер не умеет преобразовывать доменные имена в IP. В этом случае происходит ошибка и 4 байта IP-адреса забиваются единицами, что соответствует 255.255.255.255.
я конечно на 99.9% уверен, что этого в mssql нельзя реализовать, но всё же, может кто-то слышал подобные чудеса:
возможно ли в самой процедуре сделать конвертацию и передать нужной переменной полученный IP?
28 авг 13, 15:23    [14766623]     Ответить | Цитировать Сообщить модератору
 Re: получение IP адреса программой по No-IP домену  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nirraen
сервер не умеет преобразовывать доменные имена в IP. В этом случае происходит ошибка и 4 байта IP-адреса забиваются единицами, что соответствует 255.255.255.255.

MSSQL вообще не знает что такое "доменные имена"
Он работает с данными, которые вы ему передали и делает это через тот код, который вы написали

Nirraen
возможно ли в самой процедуре сделать конвертацию и передать нужной переменной полученный IP?

Разумеется можно. Если вы
- знаете синтаксис команд
- знаете алгоритм преобразования
28 авг 13, 15:26    [14766649]     Ответить | Цитировать Сообщить модератору
 Re: получение IP адреса программой по No-IP домену  [new]
andy st
Member

Откуда:
Сообщений: 800
Nirraen,
Не надо путать MSSQL (СУБД) и софт игрового сервера, и до того, как делать какие-то выводы стоит изучить проблемную область: какой модуль выдает такое сообщение, какими средствами в данном случае осуществляется преобразование DNS->IP (и осуществляется ли оно в принципе).
29 авг 13, 06:18    [14768803]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить