Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   C++: как определить свой IP, как получить имена всех дисков. (https://forum.antichat.xyz/showthread.php?t=89607)

agrofyl2 29.10.2008 16:35

C++: как определить свой IP, как получить имена всех дисков.
 
Кожу я на С++, хочу написать своего мини-трояна, появилось пару вопросов:
1. Как получить свой IP.
2. Как можно получить имена всех подключенных дисков.

Система Windows.

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

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

3. Как удалить ключ реестра.

ronald 29.10.2008 17:13

MSDN

o_OBallers 29.10.2008 17:21

Даю на делфи, переписать на 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 список дисков.
Если сам переводить не умеешь попроси кого-нибудь.

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

agrofyl2 29.10.2008 20:12

o_OBallers, спасибо, имена дисков получил(примерно так же).
Остальное тоже покопаюсь найду

Jes 29.10.2008 21:39

Цитата:

Сообщение от agrofyl2
3. Как удалить ключ реестра.

Код:

Функция 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

pantur 04.11.2008 13:25

MSDN => функция GetLogicalDrives.

xismyname 14.11.2008 00:45

Цитата:

Сообщение от agrofyl2
Кожу я на С++, хочу написать своего мини-трояна, появилось пару вопросов:
1. Как получить свой IP.
2. Как можно получить имена всех подключенных дисков.

Система Windows.

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

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

3. Как удалить ключ реестра.


Код:

/* Заголовочный файл winsock2.h используеться для
 * Виндовс систем, на Линукс дистрибутивах
 * используют заголовочные файлы
 *  -> <arpa/net.h>
 *  -> <netinet/in.h>
 *  -> <sys/socket.h>
 *
*/
#include <winsock2.h>
#include <stdio.h>

int main(void)
{

        /* WSADATA структура для содержании информации
        * о winsock,используеться только для виндовс */
        WSADATA wsd;
        struct hostent *host;
        struct in_addr addr;
        char name[32];
        unsigned int buffsize = strlen(name);

        /* Для того чтобы работать с winsock ты должен
        * ее загрузить с помощью функции WSAStartup() */
        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(
"Your IP address is %s\n",inet_ntoa(addr));
                }
        }

}

Вот исходной код написанный на C,должен работать в любом C++ компиляторе,в Microsoft Visual C++ приходиться подключить библиотеку ws2_32.lib,хотя название этой библиотеки точно не помню.

xForgan 02.02.2009 20:27

Скомпилил я этот код,
Цитата:

uses winsock


function GetLocalIP: String;
const WSVer = $101;
var
wsaData: TWSAData;
P: PHostEnt;
Buf: array [0..127] of Char;
begin
Result := '';
if WSAStartup(WSVer, wsaData) = 0 then begin
if GetHostName(@Buf, 128) = 0 then begin
P := GetHostByName(@Buf);
if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
end;
WSACleanup;
end;
end;
появился екзешник, при запуске окошко мелькнуло и все. Подскажите как работает эта прога?


Время: 13:25