![]() |
|
|
|
|
#1
|
|||
|
|||
|
Извеняюсь сразу, если ответ на это сообщение Вас затруднит.
При создании Сайта для внутренней локальной сети столкнулся со следующей проблемой: Техническая необходимость моего сайта содержит следующую проблему: Необходимо определить 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
|
|||
|
|||
|
Цитата:
Ну это понятно. Ты же не 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. |