Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: CL | DM;

Вниз

Помогите определить IP посетителя сайта   Найти похожие ветки 

 
GroW   (2006-08-24 21:35) [0]

Всем привет! Делаю на 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-08-24 21:51) [1]

Очень просто
getpeername(Socket, SockAddrIn, SizeOf(SockAddrIn)); //  SockAddrIn: TSockAddrIn;


 
GroW   (2006-08-24 22:27) [2]


> Очень простоgetpeername(Socket, SockAddrIn, SizeOf(SockAddrIn));
>  //  SockAddrIn: TSockAddrIn;

Я только начинающий.... А что нужно тогда добавить в Uses. И можно ли понятный пример определения IP? А то я уже 4-й день мучаюсь... :(((


 
Dmitrij_K   (2006-08-24 22:55) [3]

Извени не правильно написал
uses winsock;
...
var SockAddrIn: TSockAddrIn;
...
size := SizeOf(SockAddrIn);
getpeername(SocketHandle, SockAddrIn, size);
showmessage(inet_ntoa(SockAddrIn.sin_addr));


 
GroW   (2006-08-24 23:26) [4]

это точно будет работать?? под Delphi 7? А то я пробовал работать с TSocket а Delphi ругается, ошибки выскакивают...


 
Fay ©   (2006-08-25 00:08) [5]

2 GroW   (24.08.06 23:26) [4]
> Delphi ругается
Матом?


 
GroW   (2006-08-26 21:52) [6]


> Извени не правильно написал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???


 
Ketmar ©   (2006-08-26 22:09) [7]

всё не так. помогло, правда?


 
GroW   (2006-08-26 22:34) [8]

Ketmar не смешно.


 
Ketmar ©   (2006-08-26 22:38) [9]

так и я об этом же. матчасть изучать не пробовали? говорят, помогает.


 
GroW   (2006-08-26 22:58) [10]

Пожалуйста дайте ктонибудь рабочий кусок кода для определения IP посетителя web-сервера для Delphi 7. Я только начинающий.


 
Ketmar ©   (2006-08-26 23:21) [11]

лучше сразу и закончить. или сначала язык выучить. отмаз "я начинающий, потому языка не знаю" не принимается. %-)


 
Dmitrij_K   (2006-08-27 00:13) [12]

Для начала попробуй сделать что-нить попроще

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;


 
Dmitrij_K   (2006-08-27 00:50) [13]

Или еще проще
THttpConnection(Client).PeerAddr
:)


 
GroW   (2006-09-08 21:46) [14]

Большое спасибо тебе Dmitrij_K!!! Все работает. А я то уж думал, что так и не узнаю ответа... Сделал так, чтобы IP отображался в Memo, все отлично! Только вот как бы теперь узнать какую страницу запросил юзер с web-сервера? Конечно, я могу сам разбираться, искать, но ,может быть, кто-нить посоветуе как это сделать быстрее, удобнее (т.е. вообще какие файлы он запрашивает с сервера)?


 
Dmitrij_K   (2006-09-09 11:26) [15]

Вся информация находится в параметрах THttpConnection(Client).***
отладчик тебе в руки



Страницы: 1 вся ветка

Текущий архив: 2006.10.01;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.051 c
2-1158128767
kirik
2006-09-13 10:26
2006.10.01
Record и String: Жить им вместе?


15-1157818823
ArtemESC
2006-09-09 20:20
2006.10.01
Английский lib.ru посоветуйте. (С английскими текстами)


1-1156342131
Sam Stone
2006-08-23 18:08
2006.10.01
CoUnInitialize()


2-1158164788
SergP
2006-09-13 20:26
2006.10.01
присвоить значение некоторым полям записи...


15-1158055927
комар
2006-09-12 14:12
2006.10.01
еще вопрос