Программирование на C++ глазами хакера



             

Состояние локального компьютера - часть 2


char prtStr[1000]; sprintf(prtStr, "Loc Addr %1s; Loc Port %1u; Rem Addr %1s; Rem Port %1u; State %s;", szLocalIp, ntohs((unsigned short) (0x0000FFFF & pTcpTable->table[i].dwLocalPort)), szRemIp, ntohs((unsigned short)(0x0000FFFF & dwRemotePort)), strState); lList.AddString(prtStr); } } free(pTcpTable); }

У функции GetTcpTable три параметра:

  • структура типа PMIB_TCPTABLE;
  • размер структуры, указанной в качестве первого параметра;
  • признак сортировки — если указано TRUE, то таблица будет отсортирована по номеру порта, иначе данные будут представлены в перемешанном виде.
  • Если в качестве первых двух параметров указать нулевое значение, то во втором параметре будет получен необходимый размер для хранения структур PMIB_TCPTABLE. Этот прием мы уже не раз использовали в главе 5.

    Память определенного размера выделяется функцией malloc. В данном случае это необязательно делать в глобальной области.

    Повторный вызов функции GetTcpTable позволяет через первый параметр (переменная рТсрTаblе типа PMIB_TCPTABLE) получить данные о состоянии всех TCP-портов. Их количество находится в параметре dwNumEntries структуры рТсрTаblе. Информацию об определенном порте можно узнать из параметра table[i], где i — номер порта. Этот параметр тоже является структурой, и в нем нас интересуют следующие элементы:

  • dwState — состояние порта. Этот параметр может принимать различные значения (MIB_TCP_STATE_LISTEN, MIB_TCP_STATE_CLOSED и т. д.). Список всех констант можно найти в коде программы или в справочной системе. Назначение констант просто определить, достаточно только внимательно посмотреть на код из листинга 6.3;
  • dwLocalPort — локальный порт;
  • dwRemotePort — удаленный порт;
  • dwLocalAddr — локальный адрес;
  • dwRemoteAddr — удаленный адрес.
  • В примере запускается бесконечный цикл, который перебирает все записи из параметра table, и информация добавляется в список List Box.

    Рис. 6.4. Результат работы программы IPState

    Для правильной компиляции программы в начале модуля надо подключить три заголовочных файла:




    Содержание  Назад  Вперед