RDot: White Hat Security Community

RDot: White Hat Security Community (https://rdot.org/forum/index.php)
-   Software development (https://rdot.org/forum/forumdisplay.php?f=19)
-   -   Вопросы по Delphi/Pascal (https://rdot.org/forum/showthread.php?t=11)

Ded MustD!e 02.07.2010 20:11

Вопросы по Delphi/Pascal
 
Здесь задаем вопросы по Delphi/Pascal.

Путин 08.07.2010 00:13

Хочу сделать, что бы прописав в hosts 127.0.0.1 для кого-нить сайта запросы шли на мой проксик висящий локально.
Собственно через idHTTPProxtServer почти сделал - запросы в IdHTTPProxyServer1HTTPBeforeCommand видны, но дальше ничего не идет.
Как проксик idHTTPProxtServer работает корректно, а вот через hosts - нет.
Помогите пожалуйста.

Cthulchu 08.07.2010 03:34

Цитата:

Сообщение от Путин (Сообщение 1510)
Хочу сделать, что бы прописав в hosts 127.0.0.1 для кого-нить сайта запросы шли на мой проксик висящий локально.
Собственно через idHTTPProxtServer почти сделал - запросы в IdHTTPProxyServer1HTTPBeforeCommand видны, но дальше ничего не идет.
Как проксик idHTTPProxtServer работает корректно, а вот через hosts - нет.
Помогите пожалуйста.


у меня две руки и две ноги, но ножницы только начинают, а дальше - не идет, в чем проблема?

oRb 08.07.2010 09:26

Путин, запустите анализатор трафика и посмотрите на разницу в заголовках запросов.

Путин 08.07.2010 11:02

Цитата:

Сообщение от oRb (Сообщение 1550)
Путин, запустите анализатор трафика и посмотрите на разницу в заголовках запросов.

procedure TForm1.IdHTTPProxyServer2HTTPBeforeCommand(
AContext: TIdHTTPProxyServerContext);
begin
AContext.Headers.Text:=stringReplace(AContext.Head ers.Text, 'Connection:', 'Proxy-Connection:', [rfReplaceAll]);
end;

Теперь разницы в заголовках нет. Но всё равно проксик запрос принимает - а дальше не идет.

M_script 08.07.2010 13:49

Путин, а почему ты думаешь, что прокси-сервер, прописанный в хостс будет что-то куда-то перенаправлять? Для хостс нужен локальный хттп-сервер, а не прокси.

Cthulchu 08.07.2010 15:59

документашку на TCriticalSection для Delphi7 не подбросите?

Dr.TRO 08.07.2010 16:37

http://www.gothi.co.uk/2006/10/using-critical-sections-with-delphi/ вот пример, доков не нашел...

Cthulchu 08.07.2010 18:09

спасибо большое. надеялся, что там есть что-то большее, чем создание, вход и выход.

FeniXElite 10.07.2010 00:19

Cthulchu, думаю, что ты это уже читал, но всеже:
туц - Довольно полно описан принцип работы потоков. Или тут
туц

Юра 11.07.2010 16:10

pop3
 
Здраствуйте. У меня такая проблема. Хочу сделать Чекер мыл через Pop3.Проверяю так:
Код:

for l:=0 to StringGrid1.RowCount-1 do
begin
Email1:=Pos('@',StringGrid1.Cells[0,l+1]);
Username:=Copy(StringGrid1.Cells[0,l+1],1,Email1-1);
pop:='pop.'+copy(StringGrid1.Cells[0,l+1],Email1+1,Length(StringGrid1.Cells[0,l+1]));
idpop31.Username:=Username;
idPop31.Password:=StringGrid1.Cells[1,l+1];
idpop31.Host:=pop;
try
IdPOP31.Connect;
except
if  IdPOP31.Connected then
StringGrid1.Cells[2,l+1]:='Валид' else
StringGrid1.Cells[2,l+1]:='Невалид';
IdPOP31.Disconnect;
end;
end;

Проблема в том что оно проверяет где за 12 секунд один пароль .. Как сделать чтобы быстрее проверяло? Прикрутить многопоточность.. или есть еще какие способы? а то ооочень медленно проверяет (:confused::confused::confused:

W!z@rD 11.07.2010 16:13

Юра:
1 - попробовать переписать на сокетах
2 - многопоточность (VCL - TThread, Win32API - CreateThread)

mailbrush 11.07.2010 16:14

Скорость интернета какая? Я подозреваю, что слабая, т.к. у меня примерно за секунду чекается. Если уж очень маленький инет - многопоточность не поможет здесь.

Юра 11.07.2010 16:18

теоретически 2 мегабита, но сейчас вот 1,4 мб..МОжет в самом коде проблема?

mailbrush 11.07.2010 16:21

Хм, очень странно.
А ответ от сервера за сколько приходит?

Когда я еще кодил на Инди, тоже делал подобное - в миг заходил на POP3.
Проблема не должна быть в инди, подозреваю, что если перепишешь на сокеты - будет то же.

Юра 11.07.2010 16:24

А как узнать за сколько ответ от сервера приходит?) Я новичок мало что разбираюсь...

mailbrush 11.07.2010 16:26

Встроенная комманда Windows'a - ping.

Пуск -> Выполнить ->
Код:

ping pop3.mail.ru

Юра 11.07.2010 16:31

Блин...Окно появляется и сразу пропадает(

mailbrush 11.07.2010 16:38

Три раза идет запрос к серверу, после чего оно закрывается. За сколько ответ приходит?

Плюс еще, возможно, некоторые сервера уже не работают, а твоя программа пытается продолбится к ним на 110 порт.

Вобщем, вариантов много...

Юра 11.07.2010 16:42

Все ок) Вот скрин пинга: http://s41.radikal.ru/i093/1007/3c/d552d1910ea8t.jpg

Юра 11.07.2010 16:49

Мне кажется то в самом коде ..

W!z@rD 11.07.2010 18:56

на будущее:
1. скрины в jpg/jpeg/png формате
2. Пуск - выполнить - cmd.exe -> остальные команды (консольное окно закрываться не будет)

Юра 11.07.2010 19:27

Пинг 165 мсек..
Что делать блин?

mailbrush 12.07.2010 10:36

Цитата:

Сообщение от Юра (Сообщение 2264)
Пинг 165 мсек..
Что делать блин?

Не мало, но и не много.
Меняю свое мнение, возможно, инди что-то мутит.
Вообще, не советую тебе его использовать, попробуй на сокеты перепиши + многопоточность (через TThread проще).

ReanimatoR 12.07.2010 12:54

Получение списка процессов работает на win7\vista от прав администратора, а вот на XP не работает О_О?!
// Delphi 7


Код:

procedure TForm1.FormCreate(Sender: TObject);

var p:PROCESSENTRY32;ct:cardinal;th:Cardinal; mp:array[0..255] of char;
 mm:pchar;ts:TSearchRec; sst:STARTUPINFO;  ss,s:string;

begin
Edit3.Text:= (GetDiskSerialNumber('C'));
ct:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
 Process32First(ct,p);
 while Process32Next(ct,p) do begin
  begin
  if ExtractFileName(Application.ExeName)=string(p.szExeFile) then
    OpenProcessToken(p.th32ProcessID,TOKEN_READ,th);
    if string(p.szExeFile) = 'war3.exe'  then begin
    Memo1.Text := 'War3.exe ??????. ??? PID '+inttostr(p.th32ProcessID);
    Memo2.Text :=  inttostr(p.th32ProcessID);
    tid :=  p.th32ProcessID;
    war3 := 1;
    end;
  ListBox1.Items.Append(string(p.szExeFile));
  ListBox2.Items.Append(inttostr(p.th32ProcessID));

  end;
 end;
 if war3 = 0 then begin
 msgbox('Ошибка блиаааа','Не могу найти процесс war3.exe, либо вы нихуя не запустили warcraft III, либо запустили программу без прав администратора, в любом случае идите нахуй, программа работать так не будет.');
 end;


Nightmare 12.07.2010 15:21

Вероятно тут мне могут помочь теоретически, но не уверен...
 
Есть функция отправки GET запроса на хост через сокеты, мне нужно сделать её в бесконечном цикле, чтобы она постоянно слала на хост этот запрос.
Но проблема в том, что при реализации этого через библиотеку WinSock запросы успешно выполняются, но и + ко всему на компьютере открывается кучу соединений, в результате чего компьютер попросту намертво виснет.
Вот моя функция:

Код:

function fWSRecv():string;
var
hSocket: TSocket;
hHost: PHostEnt;
hAddr: TSockAddrIn;
hTimeout: TTimeVal;
samzapros,kuda:string;
begin
 kuda:='localhost';
 samzapros:='GET /log/ass.php' + #13#10 +
'Host: localhost' + #13#10 +
'User-Agent: Mozilla/5.0' + #13#10 +
'Accept: text/html' + #13#10 +
'Accept-Language: ru' + #13#10 +
'Accept-Charset: windows-1251' + #13#10 +
'Connection: close' + #13#10#13#10;
 hHost := gethostbyname(PChar(kuda));
 hAddr.sin_family := PF_INET;
 hAddr.sin_port := htons(80);
 hAddr.sin_addr := pinaddr(hHost^.h_addr^)^;
 hTimeout.tv_usec := 0;
// hTimeout.tv_sec := 10000;

      while true do begin
 hSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 if hSocket <> 0 then begin
 setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO, @hTimeout, sizeof(ttimeval));
 if connect(hSocket, hAddr, SizeOf(hAddr))=0 then begin
 Send(hSocket, samzapros[1], length(samzapros), 0);
  sleep(1000);
 end;
 CloseSocket(hSocket);
 end;
 end;
end;

Вызываю так:
var
ws:TwsaData;
begin
WSAStartup($101, ws);
fWSRecv;

и всё, куча соединений и т.д... вообще даже приблизительно не знаю, в каком месте у меня ошибка.

W!z@rD 12.07.2010 17:58

Nightmare
1. имха 1 секунды маловато будет, получается что-то вроде ддоса.
2. За 1 секунду врятли ресурсы успевают освобождаться.
3. сделай это в отдельном потоке с минимальным приоритетом.
4. if hSocket <> 0 then begin, а если ошибка?

Nightmare 12.07.2010 18:14

Цитата:

Сообщение от W!z@rD (Сообщение 2416)
Nightmare
1. имха 1 секунды маловато будет, получается что-то вроде ддоса.
2. За 1 секунду врятли ресурсы успевают освобождаться.
3. сделай это в отдельном потоке с минимальным приоритетом.
4. if hSocket <> 0 then begin, а если ошибка?

Ну вообще то это и есть именно dos, потому ставить 10-20 секунд не вариант.
в отдельном потоке это дело тоже ничего не решает, а приоритет хз поможет\нет.

Юра 16.07.2010 12:14

Никто не может помочь?(
Цитата:

for l:=0 to StringGrid1.RowCount-1 do
begin
Email1 := Pos('@', StringGrid1.Cells[0, l + 1]);
Username := Copy(StringGrid1.Cells[0, l + 1], 1, Email1 - 1);
pop:='pop.'+copy(StringGrid1.Cells[0, l + 1], Email1 + 1, Length(StringGrid1.Cells[0, l + 1]));
idpop31.Username := Username;
idPop31.Password := StringGrid1.Cells[1,l+1];
idpop31.Host := pop;
try try
IdPOP31.Connect(5000);
if IdPOP31.Connected then
StringGrid1.Cells[2,l+1]:='Валид';
except
StringGrid1.Cells[2,l+1]:='Невалид';
end;
finally
IdPOP31.Disconnect;
end;
end;
end;

W!z@rD 16.07.2010 12:17

>>try try

1. Что это?

try
...
except
...
finally

2. Прозвучали предложения: WinSock, многопоточность.

Юра 16.07.2010 12:33

Но дело в том что код нерабочий и без многопоточности..
А это мне посоветовали..

7r35p4553r*CfK 07.09.2010 12:10

Цитата:

Сообщение от Nightmare (Сообщение 2417)
Ну вообще то это и есть именно dos, потому ставить 10-20 секунд не вариант.
в отдельном потоке это дело тоже ничего не решает, а приоритет хз поможет\нет.

1)Для каждого сокета свой поток
2)Мониторить стэйт коннекшна (как вариант месагами), закрывать сокет как только послан syn или что там у тебя за дос (да да, именно дос а не ддос =), потому что он не дистрибьютед, насколько я понял). Я не знаю, может ты smurf хочешь замутить или scatter там понятно по другому будет.
While true вот причина бага, конечно машина зависнет, пока есть ресурсы будут сокеты создаваться.
Количество одновременных потоков(=сокетов) ты должен установить эмпирическим путем, начни с 512.

paranoidchaos 07.09.2010 12:13

реализация libevent под дельфию или паскаль имеется ?

p00lzer 03.10.2010 22:51

2 визард
1:исключение, если в блоке try произошла ошибка то поток идет выполнять блок exept

2Nightmare
click

2Юра
[url=http://www.codenet.ru/webmast/pop3.php]click[/click]
а учитывая что ты новичок ищи статьи по winsock2

SeNaP 11.02.2011 17:33

Есть 2 формы: Form1 и Form2.
На первой форме есть некоторая функция. Возможно ли вызвать из Form2 функцию, которая находится на Form1?

Всётаки запелил :)

Код:

unit Unit1;
....
private
    { Private declarations }
  public
      function Pars(T_, ForS, _T: string): string;
    { Public declarations }
....

//Сама функция
function TForm1.Pars(T_, ForS, _T: string): string;
begin
....
....
....
end;


MotoR 11.02.2011 22:17

Возможно.
1) Либо сразу обращайся из Form2 к функции в Form1, при этом придется вручную писать имя функции. При компиляции появится предупреждение о том, что ты пытаешься вызвать функцию из другой формы нажмешь "Yes" и Form1 автоматически подключится к Form2.
Код:

...
implementation

uses Unit1;

{$R *.dfm}
...

2) Пропиши сам в Form2 Unit1:
Код:

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit1;

Кому как нравится

P.S. Обращаться будешь так: Form1.FunctionName();


Часовой пояс GMT +3, время: 11:22.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Перевод: zCarot