![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите определить IP посетителя сайта [D7, WinXP]
GroW © (2006-08-24 21:35:00)Всем привет! Делаю на Delphi 7 HTTP-сервер. В моей программе юзер указывает в качестве сайта папку с html файлами. Потом свой IP и порт в качестве адреса сервера (которые приобретает вид http://IP_ADRES:port). Так вот. Когда другой юзер заходит на его сайт, то как узнать IP посетителя???И ту страницу, которую он запросил? Мне это нужно, чтобы составить лог сервера (кто заходил, во сколько, и др.) Я уже перепробовал разные компоненты http-серверов (Eternal Lines HTTP Server Component, SimpleTCP components, Sock.pas, Internet Component Suite), но почему то не один не определяет IP посетителя. Неужели это невозможно???? А может я что-то не так делаю? Пожалуйста помогите. Заранее благодарен за ответ.
Dmitrij_K (2006-09-09 11:26:00) [1]Вся информация находится в параметрах THttpConnection(Client).***
отладчик тебе в руки
GroW (2006-09-08 21:46:00) [2]Большое спасибо тебе Dmitrij_K!!! Все работает. А я то уж думал, что так и не узнаю ответа... Сделал так, чтобы IP отображался в Memo, все отлично! Только вот как бы теперь узнать какую страницу запросил юзер с web-сервера? Конечно, я могу сам разбираться, искать, но ,может быть, кто-нить посоветуе как это сделать быстрее, удобнее (т.е. вообще какие файлы он запрашивает с сервера)?
Dmitrij_K (2006-08-27 00:50:00) [3]Или еще проще
THttpConnection(Client).PeerAddr
:)
Dmitrij_K (2006-08-27 00:13:00) [4]Для начала попробуй сделать что-нить попроще
procedure TForm1.HttpServer1GetDocument(Sender, Client: TObject;
var Flags: THttpGetFlag);
var
SockAddrIn: TSockAddrIn;
size : Integer;
begin
size := SizeOf(SockAddrIn);
getpeername(THttpConnection(Client).HSocket, SockAddrIn, size);
showmessage(inet_ntoa(SockAddrIn.sin_addr));
end;
Ketmar (2006-08-26 23:21:00) [5]лучше сразу и закончить. или сначала язык выучить. отмаз "я начинающий, потому языка не знаю" не принимается. %-)
GroW (2006-08-26 22:58:00) [6]Пожалуйста дайте ктонибудь рабочий кусок кода для определения IP посетителя web-сервера для Delphi 7. Я только начинающий.
Ketmar (2006-08-26 22:38:00) [7]так и я об этом же. матчасть изучать не пробовали? говорят, помогает.
GroW (2006-08-26 22:34:00) [8]Ketmar не смешно.
Ketmar (2006-08-26 22:09:00) [9]всё не так. помогло, правда?
GroW (2006-08-26 21:52:00) [10]
> Извени не правильно написалuses winsock;...var SockAddrIn:
> TSockAddrIn;...size := SizeOf(SockAddrIn);getpeername(SocketHandle,
> SockAddrIn, size);showmessage(inet_ntoa(SockAddrIn.sin_addr));
>
Ничего не получается :( Я сделал так: в Uses добавил winsock. Потом когда кто то запрашивает документ с сайта
(я использую компонент сервера FPiette Http Srver) я пишу вот что:
procedure TForm1.HttpServer1GetDocument(Sender, Client: TObject;
var Flags: THttpGetFlag);
var
SockAddrIn: TSockAddrIn;
begin
size := SizeOf(SockAddrIn);
getpeername(SocketHandle, SockAddrIn, size);
memo1.Lines.Add('--> '+DateTimeToStr(now)+' - произошло соединение с клиентом');
memo1.Lines.Add(' Параметры соединения');
showmessage(inet_ntoa(SockAddrIn.sin_addr));
end;
Потом появляются ошибки при компиляции! Вот они:
[Error] Unit1.pas(45): '(' expected but ':=' found
[Error] Unit1.pas(45): Statement expected, but expression of type 'Integer' found
[Error] Unit1.pas(46): Undeclared identifier: 'SocketHandle'
[Error] Unit1.pas(46): '(' expected but ')' found
[Error] Unit1.pas(47): Types of actual and formal var parameters must be identical
[Error] Unit1.pas(51): Incompatible types: 'String' and 'sockaddr_in'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Помогите, что не так?! И как сделать чтобы в Memo отображался этот IP???
Fay (2006-08-25 00:08:00) [11]2 GroW (24.08.06 23:26) [4]
> Delphi ругается
Матом?
GroW (2006-08-24 23:26:00) [12]это точно будет работать?? под Delphi 7? А то я пробовал работать с TSocket а Delphi ругается, ошибки выскакивают...
Dmitrij_K (2006-08-24 22:55:00) [13]Извени не правильно написал
uses winsock;
...
var SockAddrIn: TSockAddrIn;
...
size := SizeOf(SockAddrIn);
getpeername(SocketHandle, SockAddrIn, size);
showmessage(inet_ntoa(SockAddrIn.sin_addr));
GroW (2006-08-24 22:27:00) [14]
> Очень простоgetpeername(Socket, SockAddrIn, SizeOf(SockAddrIn));
> // SockAddrIn: TSockAddrIn;
Я только начинающий.... А что нужно тогда добавить в Uses. И можно ли понятный пример определения IP? А то я уже 4-й день мучаюсь... :(((
Dmitrij_K (2006-08-24 21:51:00) [15]Очень просто
getpeername(Socket, SockAddrIn, SizeOf(SockAddrIn)); // SockAddrIn: TSockAddrIn;