Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Общие вопросы > WEB-Программирование
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.02.2008, 08:32
IvanLex IvanLex вне форума
Прохожий
 
Регистрация: 18.02.2008
Сообщения: 1
Репутация: 10
По умолчанию Определение IP

Извеняюсь сразу, если ответ на это сообщение Вас затруднит.

При создании Сайта для внутренней локальной сети столкнулся со следующей проблемой:

Техническая необходимость моего сайта содержит следующую проблему:
Необходимо определить IP или локальное имя (%computername%) входящего посетителя, и переодресовать его в другой каталог, например:

1. Если определять IP:
У всех посетителей IP адресс имеет общее начало, например 192.168.0.*. Посетитель с IP 192.168.0.4 заходит на стартовую страницу (к примеру, на: http://start.ru/), и автоматически переадресовывается на http://start.ru/4/
Страница определяет его IP и переадресовывает в другой каталог.

2. Если определять %computername%:
Посетитель с именем comp_1 заходит на стартовую страницу http://start.ru/, автоматически переадресовывается на http://start.ru/comp_1/

Прошу Вас написать, возможно ли такое написать html, и, если Вам не трудно, прислать мне исходный код.

Заранее огромное Вам Спасибо.
Ответить с цитированием
  #2  
Старый 19.02.2008, 18:10
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
По умолчанию

Цитата:
2. Если определять %computername%:
Посетитель с именем comp_1 заходит на стартовую страницу http://start.ru/, автоматически переадресовывается на http://start.ru/comp_1/

Ну это понятно. Ты же не IP компа получаешь, а его имя.

Делай следующее:
1. Определяй имя компа.
2. По его имени узнавай IP(ниже код получения IP по имени)

Код:
uses
  WinSock;

const
  WINSOCK_VERSION = $0101;

function GetIPAddress(name: string): string;
var
  WSAData: TWSAData;
  p: PHostEnt;
begin
  WSAStartup(WINSOCK_VERSION, WSAData);
  p := GetHostByName(PChar(name));
  Result := inet_ntoa(PInAddr(p.h_addr_list^)^);
  WSACleanup;
end;

Если необходимо перевести IP адрес в число, то это можно сделать так:

Код:
function IP2HEX(OrgIP:string):string;
var
  // Сохраняем оригинальное значение IP адреса
  OrgVal: string;
  // части оригинального IP
  O1,O2,O3,O4: string;
  // шестнадцатиричные части
  H1,H2,H3,H4: string;
  // Здесь будут собраны все шестнадцатиричные части
  HexIP: string;
  XN: array[1..8] of Extended;
  Flt1: Extended;
  Xc: Integer;
begin

  // Сохраняем в обратном порядке для простого случая
  Xn[8]:=IntPower(16,0);Xn[7]:=IntPower(16,1); Xn[6]:=IntPower(16,2);Xn[5]:=IntPower(16,3);
  Xn[4]:=IntPower(16,4);Xn[3]:=IntPower(16,5); Xn[2]:=IntPower(16,6);Xn[1]:=IntPower(16,7);

  // Сохраняем оригинальный IP адрес
  OrgVal:=OrgIP;
  O1:=Copy(OrgVal,1,Pos('.',OrgVal)-1);Delete(OrgVal,1,Pos('.',OrgVal));
  O2:=Copy(OrgVal,1,Pos('.',OrgVal)-1);Delete(OrgVal,1,Pos('.',OrgVal));
  O3:=Copy(OrgVal,1,Pos('.',OrgVal)-1);Delete(OrgVal,1,Pos('.',OrgVal));
  O4:=OrgVal;

  H1:=IntToHex(StrToInt(O1),2);H2:=IntToHex(StrToInt(O2),2);
  H3:=IntToHex(StrToInt(O3),2);H4:=IntToHex(StrToInt(O4),2);

  // Получаем шестнадцатиричное значение IP адреса
  HexIP:=H1+H2+H3+H4;

  // Преобразуем это большое шестнадцатиричное значение в переменную Float
  Flt1:=0;

  for Xc:=1 to 8 do
  begin
    case HexIP[Xc] of
      '0'..'9': Flt1:=Flt1+(StrToInt(HexIP[XC])*Xn[Xc]);
      'A': Flt1:=Flt1+(10*Xn[Xc]);
      'B': Flt1:=Flt1+(11*Xn[Xc]);
      'C': Flt1:=Flt1+(12*Xn[Xc]);
      'D': Flt1:=Flt1+(13*Xn[Xc]);
      'E': Flt1:=Flt1+(14*Xn[Xc]);
      'F': Flt1:=Flt1+(15*Xn[Xc]);
    end;
  end;
  Result:=FloatToStr(Flt1);
end;

Только для функции IntPower используй библиотеку Math

Все это взято с DelphiWorld.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter