Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите определить 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо