Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2011, 15:05   #1
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию Хук на интернет соединение

Всем доброго времени суток! Как можно узнать активно ли интернет соединение и узнать сколько загружено и отправлено байт вот функции некоторые нашёл но они в нерабочем состояние
Код:
uses Ras;

var
  CurrentState: string = '';

{ Эта функция возвращает строку с
  рассшифровкой значений state и error: }

// Заполнение s всеми соединениями:
procedure FillEntries(s: TStrings);
var
  EntryCount, bufsize: longint;
  entries: LPRasEntryName;
  i: integer;
begin
  s.Clear;
  s.BeginUpdate;
  bufsize := 0;
  // Определение количества соединений:
  RasEnumEntries(nil, nil, nil, bufsize, EntryCount);
  if EntryCount > 0 then begin
    // Выделение памяти под информацию о соединениях:
    GetMem(entries, bufsize);
    FillChar(entries^, bufsize, 0);
    entries^.dwSize := sizeof(TRasEntryName);
    // Получение информации о соединениях:
    RasEnumEntries(nil, nil, entries, bufsize, EntryCount);
    // Заполнение s названиями соединений:
    for i := 0 to EntryCount - 1 do begin
      s.Add(entries^.szEntryName);
      inc(entries);
    end;
    // Освобождение памяти:
    dec(entries, EntryCount);
    FreeMem(entries);
  end;
  s.EndUpdate;
end;

// Заполнение items всеми активными соединениями:
procedure FillConnections(items: TListItems);
var
  conns: LPRasConn;
  ConnCount, bufsize: longint;
  li: TListItem;
  i: integer;
  status: TRASCONNSTATUS;
begin
  items.BeginUpdate;
  items.Clear;
  bufsize := 0;
  // Определение количества активных соединений:
  RasEnumConnections(nil, bufsize, ConnCount);
  if ConnCount > 0 then begin
    // Выделение памяти:
    GetMem(conns, bufsize);
    conns^.dwSize := sizeof(TRasConn);
    // Заполнение conns информацией об активных соединениях:
    RasEnumConnections(conns, bufsize, ConnCount);
    status.dwSize := sizeof(TRasConnStatus);
    // Заполнение items названиями соединений:
    for i := 0 to ConnCount - 1 do begin
      li := items.Add;
      li.Data := pointer(conns^.hrasconn);
      li.Caption := conns^.szEntryName;
      li.SubItems.Add(conns^.szDeviceType);
      li.SubItems.Add(conns^.szDeviceName);
      RasGetConnectStatus(conns^.hrasconn, status);
      li.SubItems.Add(StateStr(status.rasconnstate, status.dwError));
      inc(conns);
    end;
    // Освобождение памяти:
    dec(conns, ConnCount);
    FreeMem(conns);
  end;
  items.EndUpdate;
end;

{ Процедура разрывает соединение и
  дожидается завершения операции: }
procedure HangUpAndWait(conn: integer);
var
  status: TRasConnStatus;
begin
  RasHangUp(conn); // Разрыв соединения
  status.dwSize := sizeof(TRasConnStatus);
  // Ожидание уничтожения соединения:
  repeat
    Application.ProcessMessages;
    sleep(0);
  until RasGetConnectStatus(conn, status) = ERROR_INVALID_HANDLE;
end;

{ Эта процедура будет вызываться при любых изменениях в
  соединении: }
procedure RasNotifier(msg: integer; state: TRasConnState;
  error: Cardinal); stdcall;
begin
  CurrentState := StateStr(state, error);
  Form1.ListBox2.Items.Add(CurrentState);
  // Обновление информации об актывных соединениях:
  FillConnections(Form1.ListView1.Items);
  if error <> 0 then begin
    Form1.Timer1.Enabled := false;
    Form1.Caption := CurrentState;
  end else begin
    Form1.Timer1.Enabled := false;
    Form1.Timer1.Enabled := true;
    Form1.Timer1.Tag := 0;
  end;
end;
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 10.01.2011, 15:12   #2
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

Код:
type
TMibIfRow = packed record
wszName : array[0..255] of WideChar;
dwIndex : DWORD;
dwType : DWORD;
dwMtu : DWORD;
dwSpeed : DWORD;
dwPhysAddrLen : DWORD;
bPhysAddr : array[0..7] of Byte;
dwAdminStatus : DWORD;
dwOperStatus : DWORD;
dwLastChange : DWORD;
dwInOctets : DWORD;
dwInUcastPkts : DWORD;
dwInNUCastPkts : DWORD;
dwInDiscards : DWORD;
dwInErrors : DWORD;
dwInUnknownProtos : DWORD;
dwOutOctets : DWORD;
dwOutUCastPkts : DWORD;
dwOutNUCastPkts : DWORD;
dwOutDiscards : DWORD;
dwOutErrors : DWORD;
dwOutQLen : DWORD;
dwDescrLen : DWORD;
bDescr : array[0..255] of Char;
end;

TMacAddress=array[1..8] of TMibIfRow;
TMibIfArray=array[0..512] of TMibIfRow;

TMibIfTable = packed record
dwNumEntries : DWORD;
Table : TMibIfArray;
end;

PMibIfTable = ^TMibIfTable;

var

  function GetIfTable(pIfTable:PMibIfTable; pdwSize: PULONG;
bOrder: boolean ): DWORD; stdCall; external 'IPHLPAPI.DLL';

implementation

{$R *.dfm}


procedure TForm1.Timer1Timer(Sender: TObject);         
var _buflen,_error,i: dword;
    _P: Pointer;
    _MibIfTable: PMibIfTable;
begin
timer1.Enabled:=false;
_buflen:=SizeOf(_MibIfTable^);
New(_MibIfTable);
_P:=_MibIfTable;
_error:=GetIfTable(_MibIfTable, @_buflen, false);
if _error <> NO_ERROR then
begin
MessageBox(0,'Произошла ошибка GetIfTable!','error',MB_OK);
Exit;
end;
for i:=0 to TMibIfTable(_P^).dwNumEntries-1 do
begin
label1.Caption:=IntToStr(TMibIfTable(_p^).table[i].dwSpeed)+' Byte';
label2.Caption:=IntToStr(TMibIfTable(_p^).table[i].dwOutOctets)+' byte';
label3.Caption:=IntToStr(TMibIfTable(_p^).table[i].dwInOctets)+' Byte';
end;
dispose(_MibIfTable);
timer1.Enabled:=true;
end;


end.
dwOperStatus - текущий статус интерфейса.
У меня есть почти готовий проект для подсчета трафа, могу скинуть.

Последний раз редактировалось legendary; 10.01.2011 в 15:15.
legendary вне форума Ответить с цитированием
Старый 10.01.2011, 15:45   #3
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

legendary чё-то не сходиться в закачке
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 10.01.2011, 17:00   #4
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

Цитата:
Сообщение от dmitriegorovih Посмотреть сообщение
legendary чё-то не сходиться в закачке
как это не сходиться?
legendary вне форума Ответить с цитированием
Старый 10.01.2011, 17:31   #5
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

ну вот смотрите это я так понимаю в битах у вас да даже если и в байтах всёравно мало
Изображения
Тип файла: jpg Безимени-1.jpg (93.1 Кб, 56 просмотров)
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 10.01.2011, 19:26   #6
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

http://www.xakep.ru/magazine/xa/100/116/1.asp
legendary вне форума Ответить с цитированием
Старый 11.01.2011, 08:03   #7
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

теперь понятно почему не сходится считывание, не с тех интернет соединений считывает, тогда переформулирую свой вопрос так: у меня usb модем как можно проследить за ним скоко он скачал и отправил, и какая скорость?
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 11.01.2011, 13:59   #8
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

Вот, мое криворукое творение!!! Там много что не работает, так что если что подправишь - пишите! Я так понял у вас инет такой же как и в меня – 3g usb modem, и нужно подсчитывать трафик по днях. А вот тут и появляется проблема! Читай тутка. Найдешь решение пишите!
Вложения
Тип файла: rar trafic5_beta.rar (242.7 Кб, 9 просмотров)
legendary вне форума Ответить с цитированием
Старый 11.01.2011, 15:58   #9
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

большое спасибо за ядро программы теперь Всего лишь разница в один мегабайт но я это устраню попробую это из за того что идёт преобразование из битов в мегабайты вот ваша программа которая ведёт нормальный общий подсчёт трафика
Вложения
Тип файла: rar trafic5_beta.rar (17.4 Кб, 16 просмотров)
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 11.01.2011, 17:10   #10
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

Цитата:
Сообщение от dmitriegorovih Посмотреть сообщение
разница в один мегабайт но я это устраню попробую это из за того что идёт преобразование из битов в мегабайты
значение dwOutOctets и всех остальных приводится в байтах!!!! а не битах. А вы не знаете как решить проблему различение инет сессий?
legendary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интернет соединение Михаил Юрьевич Общие вопросы Delphi 2 16.09.2010 08:02
Как проверить соединение с интернет SeRhy Работа с сетью в Delphi 20 18.06.2010 08:25
Соединение через интернет (C++ Builder) badfilin C++ Builder 1 21.03.2010 21:32
написать программу для интернет провайдеров, которая будет отслеживать соединение с пользователями. Rudi1989 Общие вопросы по Java, Java SE, Kotlin 6 01.04.2009 15:34
Соединение с БД через Интернет Kate Работа с сетью в Delphi 1 08.06.2007 08:49