Главная страница
    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.012 c
2-1157968494
Chuk & Gek
2006-09-11 13:54
2006.10.01
Защита


1-1156176876
zip0
2006-08-21 20:14
2006.10.01
Как узнать handle окна explorer a?


2-1157821457
Leyhont
2006-09-09 21:04
2006.10.01
SQL запрос


1-1156152002
Makhanev Alexander
2006-08-21 13:20
2006.10.01
нужно запустить процесс под сессиями юзеров terminal services


15-1158159660
vain
2006-09-13 19:01
2006.10.01
TTB





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский