Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Подключение к компу без постоянного IP


Автор: Romero 23.7.2005, 15:54
Проблема:
Есть комп с VPN соединением с инетом через некий сервер.
Доступа к серверу нет (тобиш ничего на нем низя настроить или установить).
Комп, соединяясь через этот сервер с инетом получает динамический IP.
Нужно зная этот адрес, подключиться к компу извне (например, зайти на ftp, установленный на компе).

Реально ли это впринципе? Если да, то каким образом можно получать каждый раз этот адрес на Delphi?

Автор: Poseidon 23.7.2005, 17:13
Помимо IP у компа еще есть и сетевое имя. Вот по этому имени и можно узнать IP
Код
function HostToIP(name: string; var Ip: string): Boolean;
var
  wsdata : TWSAData;
  hostName : array [0..255] of char;
  hostEnt : PHostEnt;
  addr : PChar;
begin
  WSAStartup ($0101, wsdata);
  try
    gethostname (hostName, sizeof (hostName));
    StrPCopy(hostName, name);
    hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then
      if Assigned (hostEnt^.h_addr_list) then begin
        addr := hostEnt^.h_addr_list^;
        if Assigned (addr) then begin
          IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False
    else begin
      Result := False;
    end;
  finally
    WSACleanup;
  end
end;


Параметры:
name - сетевое имя компа
Ip - необходимый нам IP

Автор: Romero 24.7.2005, 06:11
Замечательно, но:
1) "Access violation at address 00000000. Read of address 00000000." выдает при попытке выполнения функции (на строке WSAStartup ($0101, wsdata);).
2) В качестве name должно быть сетевое имя моего компа, правильно я понимаю?
3) Если таким образом вычислить ИП, сойдет ли он для моих целей. Реально ли вообще организовать описанное в 1 посте?

Автор: RA 24.7.2005, 06:33
1) "Access violation at address 00000000. Read of address 00000000." выдает при попытке выполнения функции (на строке WSAStartup ($0101, wsdata);).

А виндоФс XP ?
PS: там кстати в uses winSock нужен.

2) В качестве name должно быть сетевое имя моего компа, правильно я понимаю?
Нетвоего, а того на который зайти хочешь.

3) Если таким образом вычислить ИП, сойдет ли он для моих целей. Реально ли вообще организовать описанное в 1 посте?

Для твоих целей это не сойдёт, разве что ты с ним в одной сети, но тогда эта лажа вовсе не нужна ибо \\UsersPCname\FolderName ...
Добавлено @ 06:34
Так что не понятно что хотел сказать посейдо, разве что он надеялся на наличие DNS'a smile

Автор: Romero 24.7.2005, 07:19
1) Понятно, что нужен! IdWinsock подключил. Если б не прописал в uses, как, думаешь, я аксесс виолэйшн получил?

2) Я это и имел ввиду (просто на свой комп хочу с чужого зайти smile)

3) Что можешь посоветовать для моих целей?

Автор: RA 24.7.2005, 07:48
Цитата(Romero @ 24.7.2005, 07:19)
1) Понятно, что нужен! IdWinsock подключил. Если б не прописал в uses, как, думаешь, я аксесс виолэйшн получил?


Дык не IdWinsock а просто WinSock (Дефолтовый делфийский, а не индийский (Indy) ) smile


Цитата(Romero @ 24.7.2005, 07:19)
3) Что можешь посоветовать для моих целей?


Получить статический IP (Это должно стоить около 5$ в месяц).
А иначе никак даже если ты будешь знать IP своего компа, соединение не установишь.


Есть ещё сложный вариант, но он тебе не понравится, проще 5$ заплатить. smile





Автор: Romero 24.7.2005, 17:39
А как тогда работают такие сервисы, как http://www.directupdate.net или http://www.dns4me.com/?
Эти проги сидят в памяти и при каждом коннекте/реконнекте узнают динамический ИП, отсылают на свой сервак, а тот предоставляет DNS-имя.

Как реализовать такую же вещь но без получения DNS имени? Ведь серваки этих программ, получается, переадресуют пакеты, отправленные на это DNS-имя, на мой комп. ИМХО, как-то можно связаться с моим компом извне, даже если я не имею статический IP за $5 (тем более, не выйдет его у меня купить ввиду некоторых особенностей моего инет-подключения)!

Автор: Akella 25.7.2005, 09:31
нужна библиотечка WinSock2!

Автор: Romikgy 25.7.2005, 14:08
Цитата(Romero @ 24.7.2005, 17:39)
А как тогда работают такие сервисы, как http://www.directupdate.net или http://www.dns4me.com/?
Эти проги сидят в памяти и при каждом коннекте/реконнекте узнают динамический ИП, отсылают на свой сервак, а тот предоставляет DNS-имя.

Как реализовать такую же вещь но без получения DNS имени? Ведь серваки этих программ, получается, переадресуют пакеты, отправленные на это DNS-имя, на мой комп. ИМХО, как-то можно связаться с моим компом извне, даже если я не имею статический IP за $5 (тем более, не выйдет его у меня купить ввиду некоторых особенностей моего инет-подключения)!

Просто идея smile
В нете необходим сайт , на нем два скрипта, один принимает динамический айпи, второй отдает.
В твоей локалке маленькая прога , которая переодически обновляет на сайте динамический айпи, дома другая прожка, которая читает айпи с сайта smile

Автор: Guest 26.7.2005, 16:31
Вот! А теперь как мне узнать этот динамический ИП, чтобы передать на сайт? Код Посейдона позволяет именно его вычислить?

Автор: Romikgy 28.7.2005, 08:48
Да только надо знать имя компа в сети /символьное/

Автор: Romero 28.7.2005, 17:42
Дык, я с одного компа отправляю на сайт ИП (не проблема узнать имя компа, где прога запускается). А с другого компа читаю этот ИП с сайта. На сайте не нужно будет никаких скриптов!

Автор: Romikgy 29.7.2005, 15:01
Romero не твое сообщение разве ?

Цитата(Guest @ 26.7.2005, 16:31)
Вот! А теперь как мне узнать этот динамический ИП, чтобы передать на сайт? Код Посейдона позволяет именно его вычислить?



Цитата(Romero @ 28.7.2005, 17:42)
На сайте не нужно будет никаких скриптов!

Ну эт дело уже твое smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)