Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: получение данных из утилит винды  (Прочитано 10903 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 02-06-2009 18:21 » 

есть ли какие то общие методы получения результатов работы утилит, сваленных в system32 ?

Например, определяю текущий трафик
Код:
C:\>netstat -e
Статистика интерфейса

                           Получено      Отправлено

Байт                        2477229         1373216
Одноадресные пакеты            6178            6665
Многоадресные пакеты            214              93
Отброшено                         0               0
Ошибки                            0               0
Неизвестный протокол            124


мне видится только сделать
Код:
C:\>netstat -e > c:\1.txt
а затем парсить файл на предмет количества полученных и отправленных байтов...
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 02-06-2009 18:24 » 

Алексей1153++, можно поднять службу snmp и снимать теже данные оттуда. Инфа одна и та же. Счетчики 32 бита - надо учитывать переполнение и переход через 0.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 02-06-2009 18:30 » 

Цитата
есть ли какие то общие методы получения результатов работы утилит, сваленных в system32
Леш, а что именно хочеш конкретно получить. Просто, честно говоря винда не предназначена для работы в консоле.
netstat откуда то берет данные. Значит можно таким же макаром самому брать из того же источника.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 02-06-2009 18:40 » 

Ром, что за служба такая? А перенос учтём, да и не такие уж мы прожорливые с этим тарифом Отлично

Финч - ну задача и есть, самописный контроль трафика
Записан

zubr
Гость
« Ответ #4 : 02-06-2009 19:03 » 

Алексей1153++, смотри в сторону IP Helper Functions: GetTcpTable, GetTcpStatistics и т. п.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 02-06-2009 19:35 » 

Зубр, в МСДН указан заголовок "Iphlpapi.h" , у меня его нет в студии. А в SDK есть, но там какая то кутерьма с другими заголовками, например, говорит, что неопределено  MIB_ICMP_EX, и я не могу найти заголовок нужный
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 02-06-2009 19:53 » 

Леш, в "сетевые подключения" выбери в меню "дополнительно" -> "дополнительные сетевые компоненты" и установи "Management and Monitoring Tools". Появится в серсис "SNMP Service".

По SNMP можно снимать статистику не только со своей, но и с других машин (где запущена такая служба) и свичей и роутеров, поддерживающих SNMP.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 02-06-2009 19:59 » 

спасибо )
Записан

zubr
Гость
« Ответ #8 : 03-06-2009 03:55 » 

Алексей1153++, я когда в Delphi использовал функции IP Helper, то сам их определял (функции и необходимые структуры), пользуясь описаниями из MSDN. Сами функции брал из IPHLPAPI.DLL
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 03-06-2009 11:07 » 

получилось
Код:
#include "Iprtrmib.h"

typedef DWORD(*ft_GetTcpStatistics)(MIB_TCPSTATS* pStats);

ft_GetTcpStatistics pfGetTcpStatistics;

HMODULE h=LoadLibrary("IPHLPAPI.DLL ");
if(h)
{
*((DWORD*)&pfGetTcpStatistics)=(DWORD)::GetProcAddress(h,"GetTcpStatistics");

MIB_TCPSTATS st;
::memset(&st,0,sizeof(st));
if(0==pfGetTcpStatistics(&st))
{
....
}
}

в структуре вернулись значения
   dwInSegs   172
   dwOutSegs   171

dwInSegs - Specifies the number of segments received.
dwOutSegs - Specifies the number of segments transmitted. This number does not include retransmitted segments.

а где брать размеры этих сегментов ?
Записан

zubr
Гость
« Ответ #10 : 03-06-2009 18:04 » 

Алексей1153++, глянь сюда: http://www.codeproject.com/KB/IP/Monitor_IP_Scanner.aspx
По моему это то что тебе нужно.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 03-06-2009 19:11 » 

да, самое оно, спасибо )

Код:
typedef DWORD
(WINAPI
*TGetIfTable)(
    OUT    PMIB_IFTABLE pIfTable,
    IN OUT PULONG       pdwSize,
    IN     BOOL         bOrder
    );

typedef DWORD
(WINAPI
*TGetNumberOfInterfaces)(
    OUT PDWORD  pdwNumIf
    );


TGetIfTable pGetIfTable=(TGetIfTable)GetProcAddress(LoadLibrary("Iphlpapi.dll"), "GetIfTable");

TGetNumberOfInterfaces pGetNumberOfInterfaces=(TGetNumberOfInterfaces)GetProcAddress(LoadLibrary("Iphlpapi.dll"),"GetNumberOfInterfaces");

MIB_IFTABLE *pTable=0;
if(pGetIfTable && pGetNumberOfInterfaces)
{
DWORD dwAdapters=0;
ULONG uRetCode = pGetIfTable(pTable,&dwAdapters,TRUE);

pTable=new MIB_IFTABLE[dwAdapters];
pGetIfTable(pTable,&dwAdapters,TRUE);

//...
}

//...
if(pTable)
{
delete [] pTable;
pTable=0;
}

Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines