Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизПомогите определить 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c