Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1157872780
Бугага
2006-09-10 11:19
2006.10.01
Рекорды


2-1157878455
Calibr
2006-09-10 12:54
2006.10.01
CreatePolygonRgn


2-1157701316
непонимающий
2006-09-08 11:41
2006.10.01
указатели


2-1157703387
Kolan
2006-09-08 12:16
2006.10.01
Где в BDS 2006 находится детектор утечек.


15-1157969727
Задачник
2006-09-11 14:15
2006.10.01
Посоветуйте что делать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский