|
#1
|
|||
|
|||
Определение 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
|
|||
|
|||
Цитата:
Ну это понятно. Ты же не 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. |