Просмотр полной версии : C++: как определить свой IP, как получить имена всех дисков.
agrofyl2
29.10.2008, 16:35
Кожу я на С++, хочу написать своего мини-трояна, появилось пару вопросов:
1. Как получить свой IP.
2. Как можно получить имена всех подключенных дисков.
Система Windows.
Помогите пожалуйста.
---
И еще вспомнил:
3. Как удалить ключ реестра.
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, спасибо, имена дисков получил(примерно так же).
Остальное тоже покопаюсь найду
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.
© msdn
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,хотя название этой библиотеки точно не помню.
Скомпилил я этот код,
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;
появился екзешник, при запуске окошко мелькнуло и все. Подскажите как работает эта прога?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot