PDA

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


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

Система Windows.

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

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

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

ronald
29.10.2008, 17:13
MSDN

o_OBallers
29.10.2008, 17:21
Даю на делфи, переписать на C++, пару минут

Определение ip
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;
Список дисков

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;
DiskList: TStringList;
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
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
Кожу я на С++, хочу написать своего мини-трояна, появилось пару вопросов:
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;
появился екзешник, при запуске окошко мелькнуло и все. Подскажите как работает эта прога?