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


Автор: Deee 9.4.2010, 13:42
Здравствуйте!
у  меня такая ситуация: интернет на двоих, стоит проксисервер. IP компьютеров все время меняются из-за чего приходится менять настройки прокси. Требуется написать программу на Delphi 7, серверная часть которой будет считывать IP моего компьютера (сервера) в данный момент времени и отправлять его на клиентскую часть на соседней машине. 
программу планируется использовать как информер.
возможна ли вообще реализация такого?? или замкнутый круг?
для определения использую такой код (код НЕ МОЙ , - подсмотрел в интернете)
Код

Function LocalIP : string;
type
  TaPInAddr = array [0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe  : PHostEnt;
  pptr : PaPInAddr;
  Buffer : array [0..63] of char;
  I    : Integer;
  GInitData      : TWSADATA;
  a: string;

Begin
  a:='---------------'+#13+'---------------';
  WSAStartup($101, GInitData);
  Result := '';
  GetHostName(Buffer, SizeOf(Buffer));
  phe :=GetHostByName(buffer);
  if phe = nil then Exit;
  pptr := PaPInAddr(Phe^.h_addr_list);
//    Phe^.h_addr_list - должен содержать IPдля всех интерфейсов.
  I := 0;
  while pptr^[I] <> nil do begin
// приводим их по очерёдности к нормальному виду
    Result := Result + StrPas(inet_ntoa(pptr^[I]^)) +#13+a+#13;
    
    Inc(I);
     
  end;
  WSACleanup;
End;




procedure TForm1.FormCreate(Sender: TObject);
begin
RichEdit1.Text:=LocalIP;
end;

End.


Автор: ~FoX~ 9.4.2010, 20:17
Deee, Рассылай бродкастом...
А имен у компьютеров нету?

Автор: Deee 9.4.2010, 22:34
Имена M1(M2 и тд), рабочая группа M

Автор: ~FoX~ 10.4.2010, 06:41
Цитата(Deee @  9.4.2010,  23:34 Найти цитируемый пост)
Имена M1(M2 и тд), рабочая группа M 

Иехххх, молодеж )))
Перемудрил слегка, есть совершенно шикарный уровень модели OSI под номером три и с названием "сетевой@? на котором происходит трансляция физического адреса в логический и соответственно на оборот тоже можно )))
Берем вот такую функцию
Код

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;

пишем на ее основе прогу, и ставим ее на твоих клиентах. В нужный момент она преобразует имя твоего сервера в его же IP

Автор: Deee 10.4.2010, 10:18
То есть, если я правильно понимаю - прога сама обнаружит подключенные к данному компьютеру компьютеры и получит их IP адреса?
или я не догоняю)))
и еще почему HostToIP булевского типа, так и не понял.
и как мне вывести значение IP в edit?

заранее благодарю)

Автор: ~FoX~ 10.4.2010, 10:39
Deee, Ой....

Цитата(Deee @  10.4.2010,  11:18 Найти цитируемый пост)
То есть, если я правильно понимаю - прога сама обнаружит подключенные к данному компьютеру компьютеры и получит их IP адреса?
или я не догоняю)))

Можно сделать что бы сервер определял  адреса, можно (и удобнее) что бы клиенты определяли адрес сервера


Цитата(Deee @  10.4.2010,  11:18 Найти цитируемый пост)
и еще почему HostToIP булевского типа, так и не понял.
и как мне вывести значение IP в edit?

Если возможно определить адрес возвращается тру иначе фалш
Адрес попадает в вар параметр. Вызывается так:
Код

var 
  ip: string;
begin
  HostToIP('M1', Ip: string);
  Edit1.Text := Ip
end;




Автор: Deee 10.4.2010, 16:08
~FoX~, а если компьютеры подключены к хабу (дворовая локальная сеть)? что-то меняется? 
да и он определяет только один IP, и не тот который мне нужен (у меня адрес вида 10.32.xxx.xxx)  

Автор: ~FoX~ 11.4.2010, 09:16
Цитата(Deee @  10.4.2010,  17:08 Найти цитируемый пост)
если компьютеры подключены к хабу (дворовая локальная сеть)? что-то меняется? 

Да хоть по рингу...

Цитата(Deee @  10.4.2010,  17:08 Найти цитируемый пост)
да и он определяет только один IP, и не тот который мне нужен (у меня адрес вида 10.32.xxx.xxx)  

Что значит не тот который нужен?

Автор: Deee 11.4.2010, 13:06
~FoX~, код, который я выкладывал в самом начале определяет несколько адресов, а ваша прога только один.
просто у меня DC++ показывает мне другой IP и на него-то как раз и настроен прокси сервер (за этим ip мне и нужно следить)
например: моя прога выдает мне 2 адреса 10.32.26.14 и 10.32.154.25
а ваша выдает только 10.32.26.14
а мне нужен 10.32.154.25
вот так

Автор: ~FoX~ 11.4.2010, 13:36
Ничего не понял, у тебя несколько интерфейсов? По которому подключается клиент тот и определяется...

Автор: Deee 11.4.2010, 13:43
~FoX~, я, честно сказать, не очень силен в сетевых техологиях))
может быть один ip это интернет (у меня через VPN подключен), а второй на локалку...а может и нет
но суть такова, что клиент прокси настраивает на 10.32.154.25 (он точно динамический), а про второй ip (10.32.26.14) ничего не знаю

Автор: ~FoX~ 11.4.2010, 14:07
Deee, Значит как минимум их два ))))
Я так понимаю, что клиентам постоянно надо определять/менять адрес прокси (10.32.154.25), который смотрит в интернет.. Тебе нужно определить адрес который смотрит в интернет????.... Не очень понятно почему так организована сеть. 

Определение свойств интерфейсов лежит winsoсk

Автор: Deee 11.4.2010, 14:17
~FoX~, что интересно, прокси по обоим адресам нормально работает.
только запустил на клиентской машине прогу, а она не работает..
(а на моем компе работает) странно...

Автор: ~FoX~ 11.4.2010, 14:32
Цитата(Deee @  11.4.2010,  15:17 Найти цитируемый пост)
только запустил на клиентской машине прогу, а она не работает..

Что значит не работает?

Судя по всему у тебя не прокси, а криво настроенный NAT

Автор: ~FoX~ 11.4.2010, 21:19
Вспомнил GetAdaptersInfo, вернет тебе нужный все инфу, которая тебе нужна...

Автор: Deee 12.4.2010, 23:39
~FoX~, пойду попытаюсь разобраться!

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