[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. Смоки

    Смоки New Member

    Joined:
    11 Feb 2008
    Messages:
    7
    Likes Received:
    1
    Reputations:
    0
    вопрос по сокетам(winsock 1, 2) . Передачу данных никогда делать не пробовал. пользовался компонентами. решил попробовать и нифига не получаеться. конект есть, а данные или не передаются или не принимаются.
    код сервера:
    Code:
    const
      port = 256;
      fname = 'c:\BUF.txt';
    var
      WSAData:TWSAData;
      sock:TSocket;
      SAddr:TSockAddr;
      size_sa:integer;
      buf:array[1..255] of char;
      f:text;
    
    begin
      assign(f,fname);
      rewrite(f);
      if WSAStartup($202,WSAData)<>0 then
       begin
        writeln('startup error...');
        exit;
       end;
      SAddr.sin_family:=AF_INET;
      SAddr.sin_port:=htons(port);
      sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
      if sock = INVALID_SOCKET then
       begin
        writeln('socket error...');
        exit;
       end;
      if bind(sock,@SAddr,sizeof(SAddr))<>0 then
       begin
        writeln('bind error...');
        exit;
       end;
      size_sa:=sizeof(SAddr);
      listen(sock,1);
      accept(sock,@SAddr,@size_sa);
      recv(sock,buf,sizeof(buf),0);
      append(f);
      writeln(f,buf);
      closesocket(sock);
      close(f);
      WSACleanup;
      writeln('press any key to exit...');
    end.
    Код клиента:
    Code:
      port = 256;
      ip = '192.168.10.33';
    var
      WSAData:TWSAData;
      sock:TSocket;
      SAddr:TSockAddr;
      i,size_sa:integer;
      buf:array[1..255] of char;
    
    begin
      if WSAStartup($202,WSAData)<>0 then
       begin
        writeln('startup error...');
        exit;
       end;
      SAddr.sin_family:=AF_INET;
      SAddr.sin_addr.S_addr:=inet_addr(pchar(ip));
      SAddr.sin_port:=htons(port);
      sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
      if sock = INVALID_SOCKET then
       begin
        writeln('socket error...');
        exit;
       end;
      size_sa:=sizeof(SAddr);
      if connect(sock,@SAddr,size_sa)<>0 then
       begin
        writeln('error connect...');
        exit;
       end;
      for i:=1 to 26 do
       buf[i]:=char((ord('a')-1)+i);
      send(sock,buf,sizeof(buf),0);
      writeln(buf);
      closesocket(sock);
      WSACleanup;
      writeln('press any key for exit...');
    end.
     
  2. Xszz

    Xszz Elder - Старейшина

    Joined:
    23 Apr 2007
    Messages:
    141
    Likes Received:
    42
    Reputations:
    9
    как разбить строку вида 192.168.0.1 на 192 168 0 1 .
    И как отсекать только последнюю часть ? т.е. (1) ? Чтоб в результате получать
    192.168.0.
    Спасибо .
     
  3. vipadmin

    vipadmin New Member

    Joined:
    20 Feb 2008
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Как проверить склеен ли файл джойнером ?
     
  4. A2GIL

    A2GIL Elder - Старейшина

    Joined:
    31 Aug 2007
    Messages:
    84
    Likes Received:
    59
    Reputations:
    -3
    Если конечно ты подразумевал работу со строками, то вот:
    Code:
    //удаляет все точки из строчки (рифма=))
    function DelPoints(st:string):string;
    var
     i:integer;
    begin
     for i:=1 to length(st) do
      if st[i]='.' then
       st[i]:=' ';
     result:=st;
    end;
    //удаление последнего числа после точки
    function DelEnd(st:string):string;
    var
     i:integer;
    begin
     for i:=length(st) downto 1 do
      if st[i]='.' then begin
       result:=copy(st,1,i);//В данном случае точка в конце остается как ты и просил,
       //   ну а так result:=copy(st,1,i-1);её не будет
       break;
      end;
    end;
    //пример использования
    procedure TForm1.Button1Click(Sender: TObject);
    var
     s:string;
    begin
     s:=Edit1.Text;
     Edit2.Text:=DelPoints(s);
     Edit3.Text:=DelEnd(s);
    end;
     
    1 person likes this.
  5. A2GIL

    A2GIL Elder - Старейшина

    Joined:
    31 Aug 2007
    Messages:
    84
    Likes Received:
    59
    Reputations:
    -3
    Ты что хочешь программу написать, которая бы это определяла? Если да то тебе нужно научиться работать с заголовками PE файлов, поскольку по EP(entry point) можно определить откуда начинается запуск файла. Дак вот если файл-результат работы склейщика, то запускается сначала движок джойнера (стаб). Поэтому если хошь сделать своего рода детектор, то нужно вести базу сигнатур (т.е известные стабы). Конечно нужно учитывать, что файл может быть еще и закриптованным!
    А если просто хочешь визуально определить, то самый простой способ: берешь любой редоктор exe файлов, загружаешь и смотришь секции. Если новичок в этом можешь начать сResourceHacker...
     
    1 person likes this.
  6. Myst

    Myst Elder - Старейшина

    Joined:
    22 Feb 2008
    Messages:
    22
    Likes Received:
    15
    Reputations:
    5
    Насколько я понял ты хочешь из строки 192.168.0.1 получить 4 числа.
    Code:
    procedure getip(ip:string; var a,b,c,d:byte);
    // ip - ip адрес в строковом формате, a,b,c,d - искомые числа
    
    var
       i:byte;
       x:array[0..3]of byte;
    
    begin
       for i:=0 to 3 do begin
          x[i]:=0;
          while (ip<>'') and (ip[1]<>'.') do
           begin
              x[i]:=x[i]*10+strtoint(ip[1]);
              delete(ip,1,1);
           end;
          if (ip<>'') and (ip[1]='.') then
              delete(ip,1,1);
      end;
       a:=x[0];
       b:=x[1];
       c:=x[2];
       d:=x[3];
    end;
     
    1 person likes this.
  7. Xszz

    Xszz Elder - Старейшина

    Joined:
    23 Apr 2007
    Messages:
    141
    Likes Received:
    42
    Reputations:
    9
    Можно ли выгрузить Антивирус Касперского ?
    пробовал следующие методы
    Code:
    winexec('cmd.exe /C taskkill /F /IM avp.exe /T',sw_hide);
    
    Так же пытался
    Code:
    function KillTask(ExeFileName: string): Integer;
    const
    PROCESS_TERMINATE = $0001;
    var
    ContinueLoop: BOOL;
    FSnapshotHandle: THandle;
    FProcessEntry32: TProcessEntry32;
    begin
    Result := 0;
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
    ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
    
    while Integer(ContinueLoop) <> 0 do
    begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
    UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
    UpperCase(ExeFileName))) then
    Result := Integer(TerminateProcess(
    OpenProcess(PROCESS_TERMINATE,
    BOOL(0),
    FProcessEntry32.th32ProcessID),
    0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    end;
    CloseHandle(FSnapshotHandle);
    end;
    
    Не помогает ...
    Спасибо .
     
  8. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Так его не убить. Юзай поиск по форуму, уже про это писали.
     
    #1128 z01b, 22 Feb 2008
    Last edited by a moderator: 1 Mar 2008
  9. Pernat1y

    Pernat1y Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    479
    Likes Received:
    79
    Reputations:
    7
    а через net stop остановить службу?
     
  10. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Ня, никак!
     
  11. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    попробуй послать окну Каспера сообщения типа Wm_close или т.п.
     
  12. LEE_ROY

    LEE_ROY Elder - Старейшина

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    антивирус ксперского использует дров для защиты процесса, нихера вы его так невыгрузите...
     
  13. Killerkod

    Killerkod Elder - Старейшина

    Joined:
    1 Aug 2007
    Messages:
    178
    Likes Received:
    113
    Reputations:
    0
    Его можно ведь просто вырубить без выгрузки, просто поставив на ПК например дату 01,01,1990 и каспер 7 вырубается
     
  14. Myst

    Myst Elder - Старейшина

    Joined:
    22 Feb 2008
    Messages:
    22
    Likes Received:
    15
    Reputations:
    5
    Если поменять дату, он просто выдаст сообщение о некоректной дате и перестанет обновляться, но все равно будет работать, выгрузить его таким способом не получится.
     
  15. KSoniX

    KSoniX Elder - Старейшина

    Joined:
    17 Jan 2008
    Messages:
    94
    Likes Received:
    12
    Reputations:
    1
    ну можна еше с помошью Winpooch вырубит каспер
     
  16. Pernat1y

    Pernat1y Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    479
    Likes Received:
    79
    Reputations:
    7
    http://www.rootkit.com/newsread.php?newsid=778
     
  17. Freedom

    Freedom Elder - Старейшина

    Joined:
    2 Jul 2007
    Messages:
    38
    Likes Received:
    92
    Reputations:
    8
    подскажите плиз. как отобразить на форме картинку с какого нибудь сайта ?
    как её загрузить в TImage
     
  18. dos999

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    в свойстве Picture добавляешь картинку и в диологовом окне открытия прописываешь полный путь к ней. например

    http://forum.antichat.ru/antichat/pic/logo.gif
     
  19. dos999

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    У меня такая проблема... хочу отправить письмл с вложением, пользовался компонтом IdSMTP всё нормально работает, но когда подключение не прямое,а через прокси, то ничего не выходит... что делать?
     
    1 person likes this.
  20. FoFilder

    FoFilder New Member

    Joined:
    28 Feb 2008
    Messages:
    4
    Likes Received:
    2
    Reputations:
    0
    Проблема банальна, но ответа никак и нигде не могу найти.
    Суть.
    Как проверить существует ли директория на Ftp сервере?
    Использую Delphi 7 и Indy10.

    Пытался реализовать через DirectoryExists, но он всегда возвращает False.
    Мне надо
    проверка есть ли директория тогда IdFtp1.ChangeDir('/Logs_'+ip); а если нет то
    IdFTP1.makeDir('Logs_'+ip);
    IdFTP1.ChangeDir('/Logs_'+ip);

    Но не знаю как проверить есть данная директория на Ftp.
    Буду очень благодарен кто подскажет или скажет в каком направлении копать.
     
Thread Status:
Not open for further replies.