Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работают исходники любого сканера с rad studio, не работают исходники любого сканера  
V
    Опции темы
s2004
Дата 31.3.2015, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



продолжаются страности с rad studio xe whois не хотел работать но потом переписал прогу и всё заработало, но вот например пример любого сканера из интернета отказывается работать в ниже привидённом коде ругается на разные типы после исправления, в строке едита любые числа сбрасывает до 0.0.0.1 и всё другой диапазон вести невозможно. Кто то сталкивавлся с этой дельфи я менял раззличяные файлы winsock и winsock2 не помогло.
Код






*==================================*)

(* XScanner by XProger              *)

(* mail: [email protected]            *)

(* site: http://XProger.mirgames.ru *)

(*==================================*)

unit Code;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Controls, Forms,

  StdCtrls, ExtCtrls, winsock, AppEvnts, Buttons, Gauges, Spin;

 

type

  TForm1 = class(TForm)

    Panel1: TPanel;

    Label1: TLabel;

    Edit1: TEdit;

    Label2: TLabel;

    SpeedButton1: TSpeedButton;

    ProgressBar1: TGauge;

    ListBox1: TListBox;

    SpinEdit1: TSpinEdit;

    SpinEdit2: TSpinEdit;

    Label3: TLabel;

    Label4: TLabel;

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    procedure ApplicationEvents1Message(var Msg: tagMSG;

      var Handled: Boolean);

    procedure SpeedButton1Click(Sender: TObject);

  end;

 

  TMyThread = class(TThread)

   protected

    procedure Execute; override;

  end;

 

  TFSocket = record

   sa: TSockAddr;

   FData: integer;

   TimeOut: integer;

  end;

 

const

 MAX_PORTS=500;

 Ping=5000;

 

var

  Form1: TForm1;

  FSocket: array [0..MAX_PORTS - 1] of TFSocket;

  FPort: WORD;

  FInfo: TWSADATA;

  FHost: integer;

  FPStart, FPEnd: WORD;

  SThread: TMyThread;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;

  var Handled: Boolean);

var

 pSrvEnt:pServEnt;

 sPortDescription:String;

begin

 if (Msg.message>=FPStart+WM_USER)

                                and (Msg.message<=FPEnd+WM_USER)

 then

 if WSAGETSELECTERROR(Msg.lParam)=0

 then

  case WSAGETSELECTEVENT(msg.lParam) of

   FD_CONNECT:

      begin

       pSrvEnt := getservbyport(Msg.message - WM_USER,nil);

       if Assigned (pSrvEnt) then

        sPortDescription := 'service: ' + string(pSrvEnt^.s_name)

       else

        sPortDescription := ''; 

       ListBox1.Items.Add(IntToStr(ListBox1.Count+1)+

                        ') IP: '+inet_ntoa(FSocket[0].sa.sin_addr)+'  |  '+

                        'Port: '+intToStr(Msg.message - WM_USER) + '  |  ' +

                        sPortDescription);

       Application.ProcessMessages;

      end;

  end;

 Handled:=false;

end;

 

 

procedure TForm1.FormCreate(Sender: TObject);

var

 i: integer;

begin

 if WSAStartup(MAKEWORD(2, 0), FInfo)<>0

 then Halt;

 for i:=0 to MAX_PORTS-1 do

 with FSocket[i] do

  begin

   TimeOut := 0;

   FData := Socket(AF_INET, SOCK_STREAM, 0);

   if FData = SOCKET_ERROR

   then

    begin

     WSACleanup;

     Halt;

    end;

  end;

 Application.OnMessage:=Form1.ApplicationEvents1Message;

end;

 

procedure TForm1.FormDestroy(Sender: TObject);

var

 i: integer;

begin

 if SThread<>nil

 then

  begin

   SThread.Terminate;

   SThread.WaitFor;

   SThread:=nil;

  end;

 for i:=0 to MAX_PORTS-1 do

  CloseSocket(FSocket[i].FData);

 WSACleanup;

end;

 

procedure InitSockets;

var

 i: integer;

begin

 for i:=0 to MAX_PORTS-1 do

  with FSocket[i] do

   if (FPort>=FPEnd) or (SThread.Terminated)

   then break

   else

    if GetTickCount-TimeOut>PING

    then

     begin

      sa.sin_family:=AF_INET;

      sa.sin_addr.S_addr:=FHost;

      sa.sin_port:=htons(FPort);

      //

      WSAAsyncSelect(FData, Application.Handle, WM_USER+FPort, FD_CONNECT);

      connect(FData, FSocket[i].sa, SizeOf(FSocket[i].sa));

      TimeOut:=GetTickCount;

      inc(FPort);

      Form1.Label2.Caption:='Port: '+intToStr(FPort);

      Form1.ProgressBar1.Progress:=trunc(((FPort-FPStart)*100)/(FPEnd-FPStart));

      Application.ProcessMessages;

      //

      Sleep(PING div MAX_PORTS);

     end;

end;

 

procedure TMyThread.Execute;

var

 i: integer;

 buf: in_addr;

begin

 FPStart:=Form1.SpinEdit1.Value;

 FPEnd:=Form1.SpinEdit2.Value;

 FHost:=inet_addr(PChar(Form1.Edit1.Text));   вот тут ругается на разные типы ставлю PansiChar и работает, но повторю в значение адреса сканирования сбрасывает до 0.0.0.1 и всё.

 if (FPEnd<=FPStart)or (Form1.SpinEdit1.Value>65535) or

                            (Form1.SpinEdit2.Value>65535)

 then FHost:=SOCKET_ERROR;

 if FHost=SOCKET_ERROR

 then

  begin

   if not Terminated

   then SThread:=nil;

   Form1.SpeedButton1.Caption:='Запуск';

   Exit;

  end;

 buf.S_addr:=FHost;

 Form1.Edit1.Text:=inet_ntoa(buf);

 Form1.ListBox1.Clear;

 FPort:=FPStart;

 for i:=0 to MAX_PORTS-1 do

  with FSocket[i] do

   begin

    TimeOut:=0;

    FData:=Socket(AF_INET, SOCK_STREAM, 0);

   end;

 //

 while not Terminated do

  begin

   InitSockets;

   if FPort>=FPEnd

   then break;

  end;

 //

 for i:=0 to MAX_PORTS-1 do

  CloseSocket(FSocket[i].FData);

 //

 if not Terminated

 then

  begin

   SThread:=nil;

   Form1.SpeedButton1.Caption:='Запуск';

  end;

end;

 

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

 if SThread=nil

 then

  begin

   SThread:=TMyThread.Create(false);

   SpeedButton1.Caption:='Стоп';

  end

 else

  begin

   SThread.Terminate;

   SThread.WaitFor;

   SThread:=nil;

   SpeedButton1.Caption:='Запуск';

  end;

end;

 

end.
  


PM MAIL   Вверх
kami
Дата 31.3.2015, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(s2004 @  31.3.2015,  19:30 Найти цитируемый пост)
FHost:=inet_addr(PChar(Form1.Edit1.Text));

Код

Fhost:=inet_addr(PAnsiChar(AnsiString(Form1.Edit1.Text));

Это если побыстрому. А на самом деле из потока обращаться к визуальным компонентам (пусть даже и на чтение) - чревато боком.
PM MAIL WWW   Вверх
s2004
Дата 1.4.2015, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



kami ты не прочёл моего комента я уже написал "ставлю PansiChar и работает". И работает с ошибками не возможен ввод никакого адреса кроме 0.0.0.1. Побыстрому никак не работает.

Посмотрел на дельфи 2006 работает все исходники но мне надо более новые версии. Пробовал присоединять файлы winsock, winsock2  сообщения об ошибке не проходят. 
Может кто то на своей студии запустит для интреса этот исходник?
PM MAIL   Вверх
kami
Дата 1.4.2015, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(s2004 @  1.4.2015,  16:42 Найти цитируемый пост)
 я уже написал "ставлю PansiChar и работает". И работает с ошибками

Это значит - не работает.
Это вы не прочитали мой код, а уже поспешили с выводами.
PAnsiChar из string без явного преобразования "по нормальному" не получить. Прочитайте мой код еще раз, повнимательнее.

Добавлено через 5 минут и 12 секунд
Цитата(s2004 @  1.4.2015,  16:42 Найти цитируемый пост)
 Пробовал присоединять файлы winsock, winsock2  сообщения об ошибке не проходят. 

Вот интересна логика такого поступка: явно не работает код, взятый на просторах интернета, когда о юникоде в Delphi даже не мечтали. Почему виноват оказывается не этот древний код, а вполне себе входящие в комплект поставки Delphi winsock?
PM MAIL WWW   Вверх
s2004
Дата 2.4.2015, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



kami приношу свои извенения... smile  не прочёл твой код, но это только из -за хронического невысыпания. Кстати пример заработал.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.