C++: как определить свой IP, как получить имена всех дисков.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by agrofyl2, 29 Oct 2008.

  1. agrofyl2

    agrofyl2 New Member

    Joined:
    25 Apr 2008
    Messages:
    54
    Likes Received:
    4
    Reputations:
    0
    Кожу я на С++, хочу написать своего мини-трояна, появилось пару вопросов:
    1. Как получить свой IP.
    2. Как можно получить имена всех подключенных дисков.

    Система Windows.

    Помогите пожалуйста.

    ---
    И еще вспомнил:

    3. Как удалить ключ реестра.
     
    #1 agrofyl2, 29 Oct 2008
    Last edited: 29 Oct 2008
  2. ronald

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

    Joined:
    27 Mar 2008
    Messages:
    252
    Likes Received:
    42
    Reputations:
    6
    MSDN
     
  3. o_OBallers

    o_OBallers Banned

    Joined:
    11 Oct 2007
    Messages:
    23
    Likes Received:
    24
    Reputations:
    0
    Даю на делфи, переписать на C++, пару минут

    Определение ip
    PHP:
    uses winsock 


    function GetLocalIPString;
    const 
    WSVer = $101;
    var
      
    wsaDataTWSAData;
      
    PPHostEnt;
      
    Buf: array [0..127of Char;
    begin
      Result 
    := '';
      if 
    WSAStartup(WSVerwsaData) = 0 then begin
        
    if GetHostName(@Buf128) = 0 then begin
          P 
    := GetHostByName(@Buf);
          if 
    <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
        
    end;
        
    WSACleanup;
      
    end;
    end;
    Список дисков
    PHP:
    function DiskInDrive(const Drive:char):Boolean;
    var
        
    DrvNum:byte;
        
    EMode:Word;
    begin
      result
    :=false;
      
    DrvNum:=ord(Drive);
      if 
    DrvNum >= ord('a'then
        dec
    (DrvNum, $20);
      
    EMode:=SetErrorMode(SEM_FAILCRITICALERRORS);
      try
        if 
    DiskSize(DrvNum - $40) <> -1 then
          result
    :=true
        
    else
          
    messagebeep(0);
      finally
        
    SetErrorMode(EMode);
      
    end;
    end;

    var 
    Alfavit:string[26]='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    AlfavitCount:integer;
    DiskListTStringList;
    begin
    DiskList
    :=TStringList.Create;
            for 
    AlfavitCount:=0 to 25 do
              
    begin
                
    if DiskInDrive(Alfavit[AlfavitCount]) then DiskList.Add(Alfavit[AlfavitCount]);
              
    end;
    DiskList.Free;
    end;
    В списке DiskList список дисков.
    Если сам переводить не умеешь попроси кого-нибудь.

    Да и чуть не забыл когда будешь писать воспользуйся тремя китами парадигмы ООП, это очень важно,
    удачи тебе рукодельник.
     
  4. agrofyl2

    agrofyl2 New Member

    Joined:
    25 Apr 2008
    Messages:
    54
    Likes Received:
    4
    Reputations:
    0
    o_OBallers, спасибо, имена дисков получил(примерно так же).
    Остальное тоже покопаюсь найду
     
  5. Jes

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

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    Code:
    Функция RegDeleteKey удаляет указанный ключ. Эта функция не может удалить ключ, которяй является подключем.
    
    LONG RegDeleteKey(
        HKEY hKey,	// дескриптор открытого окна 
        LPCTSTR lpSubKey 	// адрес имени подключа на удаление 
    );
    
    Параметры:
    
    hKey 	Идентифицирует уже открытый ключ или один из предопределенных дескрипторов:
    
    HKEY_CLASSES_ROOT
    HKEY_CURRENT_USER
    HKEY_LOCAL_MACHINE
    HKEY_USERS
    HKEY_CURRENT_CONFIG
    
    Ключ, указанный в параметре lpSubKey должен быть подключем ключа, указанного в hKey.
    lpSubKey 	Адрес нульзаканчивающейся строки, указывающей имя ключа на удаление. Этот параметр не может быть NULL, и указанный ключ не должен иметь подключей.
    Возвращаемые значения:
    
    Если функция успешна, возвращается значение ERROR_SUCCESS.
    
    Header	Declared in Winreg.h; include Windows.h.
    Library	Use Advapi32.lib.
    
    
    &copy msdn
     
  6. pantur

    pantur New Member

    Joined:
    3 Nov 2008
    Messages:
    5
    Likes Received:
    2
    Reputations:
    0
    MSDN => функция GetLogicalDrives.
     
  7. xismyname

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

    Joined:
    7 Sep 2008
    Messages:
    77
    Likes Received:
    7
    Reputations:
    -5

    Code:
    /* Заголовочный файл winsock2.h используеться для
     * Виндовс систем, на Линукс дистрибутивах
     * используют заголовочные файлы
     *  -> <arpa/net.h>
     *  -> <netinet/in.h>
     *  -> <sys/socket.h>
     *
    */ 
    [COLOR=DarkOrange]#include <winsock2.h>
    #include <stdio.h>
    
    int main(void)
    {[/COLOR]
            /* WSADATA структура для содержании информации 
             * о winsock,используеться только для виндовс */
    	[COLOR=DarkOrange]WSADATA wsd; 
    	struct hostent *host;
    	struct in_addr addr;
    	char name[32];
    	unsigned int buffsize = strlen(name);
    [/COLOR]
    	/* Для того чтобы работать с winsock ты должен
             * ее загрузить с помощью функции WSAStartup() */
    	[COLOR=DarkOrange]if(WSAStartup(MAKEWORD(2,2),&wsd) == 0)
    	{
    		GetComputerNameA(name,&buffsize);
    		host = gethostbyname(name);
    
    		if(host != NULL)
    		{
    			memcpy(&addr,host->h_addr_list[0],sizeof(host->h_addr_list[0]));
    			printf([/COLOR][COLOR=Red]"Your IP address is %s\n"[/COLOR][COLOR=DarkOrange],inet_ntoa(addr));
    		}
    	}[/COLOR]
    }
    Вот исходной код написанный на C,должен работать в любом C++ компиляторе,в Microsoft Visual C++ приходиться подключить библиотеку ws2_32.lib,хотя название этой библиотеки точно не помню.
     
  8. xForgan

    xForgan New Member

    Joined:
    20 Aug 2005
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Скомпилил я этот код,
    появился екзешник, при запуске окошко мелькнуло и все. Подскажите как работает эта прога?