Статьи

Hostname lookup своими руками!

Hostname lookup своими руками!

Итак, наверное все пользовались тулзой hostname lookup, но не все понимают, как она работает.
Сегодня мы будем писать свой hostname lookup на с++!
Начнем с того, что будем кодить как самые настоящие суровые хацкеры ―
я для эксперимента кодил на удаленной машиной, с Debian'ом на борту,
без графического окружения, а вместо привычных IDE у нас будет screen, nano и gcc!
Начнем по порядку: screen ― незаменимая программулина для работы на удаленной
машине(да и на локальной), бывает так, что нужно запустить какой-то длительный процесс
чего-либо, но сидеть сложа руки тоже не тру или для пере направления вывода какого-либо
демона, для последующего просмотра или мониторинга, тут и приходит на помощь
текстовый оконный менеджер screen. Мини инструкция: screen -S screen_name ― эта
команда создаст сессию скрина с именем screen_name и вы «перейдете в нее»,
Ctrl+A+C ―создаст вкладку(дублирует текущую, только без запущенный приложений,
если такие есть, и с чистым экраном), Ctrl+A+K ― закроет текущую «вкладку».
Nano : замечательный текстовый редактор =). Использовать ― nano file_name,
и после этого запустится наш редактор, создав нужный нам файл. Ctrl+O ― записать изменения, Ctrl+X ― выход из редактора.

Gcc ― с++ компилятор под никсы, gcc source_file -o app_name ― откомпилирует сорец source_file в приложение app_name в текущей директории.


Начнем
1- инсталируем нужные нам пакеты.

~#aptitude install -y gcc nano screen

2- запустим «скрин»


~#screen -S hostname_lookup


3- для удобства сразу создадим нужный нам каталог и перейдем в него.

~#cd /usr/src/
~#mkdir hostname_lookup && cd hostname_lookup.

Теперь у нас все готово, можем приступать непосредственно к кодингу%).


~#nano s.cc

и копи пастим туда следующее:


#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char *argv[ ])

{
hostent *domain;
if(argc != 2)
{
fprintf(stderr, "Не указано доменное имя!!!\n", argv[0]);
exit(-1);
}

if((domain=gethostbyname(argv[1])) == NULL)//Получаем инфу о домене
{
printf("Домена не существует!!!\n");
exit(-1);
}
else
{
printf("Домен : %s\n", domain->h_name);
printf(" Первичный IP домена: %s\n", inet_ntoa(*((in_addr *)domain->h_addr)));
printf(" Длинна доменного имени: %d байт\n", domain->h_length);

printf("Алиасы домена :\n");
int a = 0;
while(domain->h_aliases[a] != NULL)
{
printf(" #%d : %s\n", a, domain->h_aliases[a]);
a++;
}

printf("IP адреса домена:\n");
int b = 0;
while(domain->h_addr_list[b] != NULL)
{
printf(" #%i : %s\n", b, inet_ntoa(*((in_addr *)(domain->h_addr_list[b]))));
b++;
}

return 0;
}
}
Жмем Ctrl+O
Ctrl+A+C
gcc s.cc -o hostname_lookup && chmod +x hostname_lookup && ./hostname_lookup vk.com
И вот ты узрил результат работы нашей программулины=).
Разбор полетов.

Есть такая замечательная структура hostent – строка 21.

В ней объявлены следующие переменные: h_name, h_aliases, h_addrtype, h_length, h_addr_list,
h_addr.
Подробнее:
h_name - Доменное имя.

h_aliases - NULL-завершенный массив - алиасы домена.

h_addrtype - Тип адреса, обычно AF_INET(ipv4).

h_length - Длина доменного имени в байтах.

h_addr_list - Массив IP-адресов домена.

h_addr - Первый адрес в h_addr_list(можно сказать, что запись А домена).

Воспользоваться всеми этими блаженствами можно вызвав функцию gethostbyname(char *dom_name);
Результат выполнения функции ― экземпляр структуры hostent, если он не равен NULL то все пучком, и можно просто получить нужную нам инфу из структуры, которой присвоили результат выполнения gethostbyname(argv[1]) - hostent domain.
printf("Домен : %s\n", domain->h_name); - ну тут все понятно, вот таким образом мы и вытащим нашу инфу=).
Если человек хоть как-то увлекался кодингом, то он уже понял как все работает, иначе ― есть одна книжечка, которую ты сможешь найти в файловом архиве инатака=), «Основы программирования в Linux, 4-е издание».

Удачи! Ну и компиляций тебе без варнингов, друг

©Mr.Mozg

2.6

голосов: 10
2012.01.07 10:20 // ftuls

Новый контент

Hostname lookup своими руками! читать

Хэш нам не преграда, потому что нам его не надо! читать

Startup Delayer 3.0.319: управление автозагрузкой приложений читать

Чертовски хороший LAMP: Пошаговое руководство по установке стека (L)AMP на FreeBSD читать

Tweak-7 1.0.1125: твикер для Windows 7 или как оптимизировать работу Windows 7 читать

Linux и 3G модем. Определение, настройка для подключения к сети. читать

Cистема шифрования TrueCrypt читать

Многопользовательский чат на BAT читать

Исследование: администраторы баз данных мало заботятся о безопасности читать

Оффлайновый способ хранить пароль читать

Спам — как средство передачи шифровок? читать

Мониторинг жёстких дисков при помощи SMART читать

Повышение производительности netfilter, использование ipset читать

Дело об отказавшей системе читать

Атаки на домен: завладеваем корпоративной сетью читать

Теги

adobe android anonymous apache apple assembler brutforce bsd c++ cgi chrome ddos delphi djvu dns facebook fingerprinting firefox freebsd ftp google html http ibm icq inattack intel internet internet explorer ip it java javascript linux livejournal mail microsoft mysql network pdf perl php python scanner security shell skype sms softice twitter unix visual c++ web wi-fi wikileaks windows xml xss администрирование алгоритм анонимность арест архив атака базы данных безопасность браузер брутфорс взлом вирус вирусы вконтакте домен защита игры интернет исследования кибертерроризм крис касперски мыщъх обратная разработка операционная система пароль первая полоса перехват данных подбор поиск поисковик поисковые системы пользователь программирование программы процессор разработка разработки реверсинг россия Руссинович руткит самоучитель сети социальная сеть спам спецслужбы справочник статистика суд сша телефон теория технологии троян учебник уязвимости уязвимость форум хакер хакеры яндекс
© INATTACK 2003 — 2012

Взлом

— искусство,

Хакер

— его творец.