Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Как отловить коннект Radmin Viewer'а?

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

suslovp

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток!
На компе запущен сервак радмина. При коннекте вьювера нужно выполнить определённые действия, открыть одни программы, закрыть другие. Реально ли как-то отследить момент когда на комп с серваком конектится вьювер?
Что-то в нете покопался, ничего толкового не нашел. Да и может копал не в том направлении.
Думаю там должно быть всё просто, нужно мониторить (или прослушивать) порт, и как только по порту пошла инфа, считаем что клиент подключился В сетях не силён, и во всяких портах и сокетах. Хотя может и нифига не легко такое сделать. Короче кто что может толково подсказать - велкам Или мини примерчик, или носом хоть ткнуть где про такое расписано
ЗЫ Собираюсь на С++Builder'е писать, если получится что.

Всего записей: 121 | Зарегистр. 21-02-2007 | Отправлено: 17:49 10-02-2010
xterm

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Лично я бы начал с WinPcap, если бы не нашёл готовых программ, позволяющих определять пользовательские действия при коннекте на заданный порт. Для никсов - просто Pcap.

Всего записей: 96 | Зарегистр. 23-08-2009 | Отправлено: 01:25 12-02-2010
kermit

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
можно и проще -  
 
netstat -na | find "ESTABLISHED" > ports.log
 
ну а дальше парсиш этот лог, ищешь строку с номером порта, на котором работает радмин.
если есть, значит вьювер подключен
 
 
или можно еще через утилиту openports.exe или консольный TCPview от Руссиновича, они и приложение показывают

Всего записей: 463 | Зарегистр. 01-10-2003 | Отправлено: 02:29 12-02-2010
xterm

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kermit

Цитата:
netstat -na | find "ESTABLISHED" > ports.log  

Решение имеет очевидный недостаток - при поллинге всегда есть вероятность, что большой брат сможет успеть увидеть как будут закрываться одни программы и открываться другие.
 
suslovp
О, есть полуавтоматическое решение. Файервол с правилом на порт радимна, и запрос юзеру что делать в случае попытки коннекта. Во время запроса спокойно запускаешь батничек, который всё что нужно открывает-закрывает, а потом со спокойной совестью разрешаешь коннект вьюера

Всего записей: 96 | Зарегистр. 23-08-2009 | Отправлено: 05:50 12-02-2010
kermit

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xterm

Цитата:
Файервол с правилом на порт радимна, и запрос юзеру что делать в случае попытки коннекта. Во время запроса спокойно запускаешь батничек, который всё что нужно открывает-закрывает, а потом со спокойной совестью разрешаешь коннект вьюера

 
я бы на месте админа обязательно бы докопался до причины, по которой коннект не проходит с первого раза
 
имхо идеальный вариант это написание некоего редиректера - проги, которая слушает порт радмина и редиректит трафик на радмин (который есессно переведен на другой порт), предварительно закрыв ненужные окна.
хотя, если нет прав админа на локальном компе, такое не реализовать
а другие алгоритмы заведомо будут вносить задержку

Всего записей: 463 | Зарегистр. 01-10-2003 | Отправлено: 12:55 13-02-2010
niichavo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имхо, можно проще

Всего записей: 836 | Зарегистр. 14-09-2005 | Отправлено: 17:14 14-02-2010 | Исправлено: niichavo, 17:17 14-02-2010
xterm

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kermit

Цитата:
я бы на месте админа обязательно бы докопался до причины, по которой коннект не проходит с первого раза  

Он пройдёт с первого раза, если suslovp уложится в положенный таймаут. Просто окно вьюера откроется не сразу

Всего записей: 96 | Зарегистр. 23-08-2009 | Отправлено: 01:04 16-02-2010
suslovp

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нее, нафига фаерволы, задержка будет, палево, большой брат сразу о чём-нибудь догадается. Да и к тому же вдруг ты отвлёкся ненадолго, задумался, а тута бац, и палят уже, или уже поздно раздешать фаеру, таймаут вышел. Парсить лог чё-то как-то стрёмно выглядит, с малой частотой проверять, когда появится строчка о коннекте, может быть уже поздно скрывать окна. С большой частотой проверять файл, нагрузка левая на винт (ну хотя может и не сильно большая ). Нужно было автоматическое решение.
Выходные убил на поиски решения, начало утягивать в сторону самописных фаерфолов, думаю они же как раз всё что идёт из сети мониторят, а потом и до снифферов дошел. И знакомый тоже потом сказал что чё-нить типа сниффера нада.
Покопался в инете, быстро нашёл исходники на делфи. Ещё немного покопал нашел реализацию на Си. Выкинул всё лишнее, добавил своего, получился вот такой вот мутант:

Код:
 
//---------------------------------------------------------------------------
#include <winsock2.h>
 
//---------------------------------------------------------------------------
#define MAX_PACKET_SIZE    0x10000
#define SIO_RCVALL         0x98000001
 
// Системные сообщения ЛА
#define WM_LACMD (WM_APP + 2504)
// Команда для режима "Анти-шеф"
#define LAC_WINDOW_HIDE_FROM_BOSS 208
 
// Буфер для приёма данных
char Buffer[MAX_PACKET_SIZE]; // 64 Kb
 
//Структура заголовка IP-пакета
  // ip заголовок
  // Более подробно в RFC 791
  // http://rfc2.ru/791.rfc
typedef struct IPHeader {
    UCHAR   iph_verlen;   // версия и длина заголовка
    UCHAR   iph_tos;      // тип сервиса
    USHORT  iph_length;   // длина всего пакета
    USHORT  iph_id;       // Идентификация
    USHORT  iph_offset;   // флаги и смещения
    UCHAR   iph_ttl;      // время жизни пакета
    UCHAR   iph_protocol; // протокол
    USHORT  iph_xsum;     // контрольная сумма
    ULONG   iph_src;      // IP-адрес отправителя
    ULONG   iph_dest;     // IP-адрес назначения
} IPHeader;
 
  // tcp заголовок
  // Более подробно в RFC 793
  // http://rfc2.ru/793.rfc
typedef struct TCPHeader {
    USHORT  sourcePort;        // порт отправителя
    USHORT  destinationPort;   // порт назначения
    ULONG   sequenceNumber;    // номер последовательности
    ULONG   acknowledgeNumber; // номер подтверждения
    UCHAR   dataoffset;        // смещение на область данных
    UCHAR   flags;             // флаги
    USHORT  windows;           // размер окна
    USHORT  checksum;          // контрольная сумма
    USHORT  urgentPointer;     // срочность
} TCPHeader;
 
 
//---------------------------------------------------------------------------
 
void main(void)
{
    WSADATA     wsadata;   // Инициализация WinSock.
    SOCKET      s;         // Cлущающий сокет.
    char        name[128]; // Имя хоста (компьютера).
    HOSTENT*    phe;       // Информация о хосте.
    SOCKADDR_IN sa;        // Адрес хоста
    unsigned long        flag = 1;  // Флаг PROMISC Вкл/выкл.
    unsigned int count;    // количество прочитанных байт
    IPHeader* hdr = (IPHeader *)Buffer;
    TCPHeader* tcphdr = (TCPHeader *)(&Buffer[sizeof(IPHeader)]);
    HWND hWnd; // дескриптор сворачиваемых окон
 
    // инициализация
    WSAStartup(MAKEWORD(2,2), &wsadata);
    s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
    gethostname(name, sizeof(name));
    phe = gethostbyname( name );
    ZeroMemory( &sa, sizeof(sa) );
    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
    bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
 
    // Включение promiscuous mode.
    ioctlsocket(s, SIO_RCVALL, &flag);
 
    // Бесконечный цикл приёма IP-пакетов.
    while(1)
    {
        count = recv( s, Buffer, sizeof(Buffer), 0 );
        // обработка IP-пакета
        if( count >= sizeof(IPHeader) )
        {
            //Начинаем разбор пакета...
            // Если протокол TCP
            if(hdr->iph_protocol == IPPROTO_TCP)
            {
                if (tcphdr->sourcePort == 0x2313) // если порт радмина (байтики развёрнуты, 0x1323 = 4899, порт по умолчанию)
                {
                    // гасим процессы
                    system("taskkill /F /IM opera.exe");
                    // ищем и сворачиваем процессы
                    hWnd = FindWindow( "FlylinkDC++", NULL );
                    if(hWnd) SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
                    hWnd = FindWindow( "mIRC", NULL );
                    if(hWnd) SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
                    hWnd = FindWindow( "LightAlloyFront", NULL );
//                    if(hWnd) SendMessage(hWnd, WM_LACMD, LAC_WINDOW_HIDE_FROM_BOSS, 0);
                    if(hWnd) SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); // упс, пока так, с анти-боссом будет косяк...
                }
            }
        }
    }
 
//    closesocket( s );  //хз, вроде до сюда никогда не дойдём
//    WSACleanup();
 
}
//---------------------------------------------------------------------------
 

 
Убивалка мне как-то не нравится, зато коротко Чё-то я несмог убить процесс по имени чтоб было корокто и красиво на winapi или ещё как.
Да и сворачивалка тоже, при коннекте эта ветка будет выполнятся многократно, и постоянно будут слатся окнам сообщения чтоб свернулись, тоже как-то некрасиво.
Может кто чё подскажет в этом плане толкового.
Ну и так по проге может ещё кто выскажется.
 
ЗЫ протестил дома в сетке, вроде работает так что большой брат в пролёте
ЗЗЫ как я и говорил оказалось всё просто, и знающим людям тут на 10 минут писанины, а я выходные убил

Всего записей: 121 | Зарегистр. 21-02-2007 | Отправлено: 17:27 16-02-2010 | Исправлено: suslovp, 17:34 16-02-2010
xterm

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
suslovp
Да ты крут. Молодец что исходники привёл. Зря я журнал "Хакер" не читал в своё время

Всего записей: 96 | Зарегистр. 23-08-2009 | Отправлено: 02:19 17-02-2010
santaalex01

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ТС, ну как там дела у вас? Получилось?
И еще вопрос: на локальном компьютере права какие у вас - администратора или простого пользователя?  

Всего записей: 3 | Зарегистр. 22-01-2007 | Отправлено: 05:12 29-08-2010 | Исправлено: santaalex01, 18:43 29-08-2010
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Как отловить коннект Radmin Viewer'а?


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru