Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
8 / 7 / 0
Регистрация: 22.06.2010
Сообщений: 96
1

Контроль траффика

14.08.2010, 12:53. Показов 4123. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Суть проблемы. Есть интернет-подключение gprs через телефон. Суточный лимит 20 мегабайт. После 20 мегабайт оплата трафика очень большая (в 10 раз).

Теперь о программе. Как сделать программу контроля исходящего и входящего трафика? Что бы при превышении 20 мегабайт выскакивало окошко, что превышен лимит(или обрывало связь).

Какие у кого есть соображения? От чего отталкнуться так сказать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2010, 12:53
Ответы с готовыми решениями:

Контроль траффика в сети!
Здравствуйте уважаемые сисадмины! Есть вопросик от нубочайника. Задача контроля трафика и...

Контроль траффика роутера?
Подскажите пожалуйста как можно контроллировать трафик, который проходит через свой же роутер?...

Программа, выполняющая контроль траффика
Всем привет! Есть такая задачка - программа должна уметь считать трафик прошедший за определенное...

Контроль траффика, в сети без сервера
Народ подскажите как лучше организовать контроль траффика вот в такой сети вообщем есть Router...

10
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
14.08.2010, 13:39 2
Думаю логично было бы создать прокси сервер. Причем в функционал добавить ограничение рекламы, счетчиков, ограничение размера одного файла и.т.д., с той целью, чтобы трафика было меньше.
Соответственно браузер должен подключаться к серверам через прокси сервер.
1
8 / 7 / 0
Регистрация: 22.06.2010
Сообщений: 96
14.08.2010, 17:23  [ТС] 3
Думаю логично было бы создать прокси сервер.
Прокси сервер-вещь платная...

А как контролировать траффик именно на своём компе?
0
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
14.08.2010, 18:23 4
это не совсем тот ответ которого ты ждешь но программа TMeter тебе поможет
0
8 / 7 / 0
Регистрация: 22.06.2010
Сообщений: 96
16.08.2010, 16:49  [ТС] 5
это не совсем тот ответ которого ты ждешь но программа TMeter тебе поможет
Tmeter - это хорошо, знаем. Хотелось бы сделать самому.

Вот например пища для размышления. Все мы знаем в виндовс:

виндовс->выполнить->cmd->netsh interface ip show interface

Где выводяться данные по входящим, исходящим октетам. Как это можно использовать в c++ builder для контроля трафика?
0
48 / 48 / 7
Регистрация: 04.08.2010
Сообщений: 110
16.08.2010, 19:26 6
Как-то так:
.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <Forms.hpp>
//--------------------------
#include <iphlpapi.h>
#include <ExtCtrls.hpp>
#include <Grids.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TTimer *InOutTrafficTimer;
    TPanel *Panel1;
    TButton *GetButton;
    TButton *MonButton;
    TButton *Button1;
    TPanel *Panel2;
    TStringGrid *SG;
    TStatusBar *SB1;
    void __fastcall GetButtonClick(TObject *Sender);
    void __fastcall MonButton1Click(TObject *Sender);
    void __fastcall InOutTrafficTimerTimer(TObject *Sender);
    void __fastcall ExitButtonClick(TObject *Sender);
private:    // User declarations
    int NumActiveAdapter;
    void __fastcall SetSGData();
    char * get_iface_type(int type);
    char * get_iface_status(int type);
    MIB_IPADDRROW * get_iface_ipaddrow(DWORD index, MIB_IPADDRTABLE * rows);
    MIB_IPADDRTABLE * get_ifaces_table();
    char * get_ipaddr_type(unsigned short type);
    void get_ipaddr_type(char * str, unsigned short type);
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------
.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
//В проект необходимо добавить
// c:\Program Files (x86)\Embarcadero\RAD Studio\7.0\lib\psdk\iphlpapi.lib
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GetButtonClick(TObject *Sender)
{
 SetSGData();
 PMIB_IFTABLE pTable = NULL;
 DWORD dwSize = 0;
 if(GetIfTable( pTable, &dwSize, FALSE ) == ERROR_INSUFFICIENT_BUFFER)
 {
  pTable = PMIB_IFTABLE(LocalAlloc(LMEM_ZEROINIT, dwSize));
  if(!GetIfTable( pTable, &dwSize, TRUE ) )
  {
   MIB_IPADDRTABLE * pAddresses = get_ifaces_table();
   if(!pAddresses)
   {
    SB1->Panels[0].Items[0]->Text = "ПРЕДУПРЕЖДЕНИЕ: Не удалось получить таблицу IP-адресов!";
   }
   SB1->Panels[0].Items[0]->Text = "Число адаптеров: " + IntToStr((int)pTable->dwNumEntries);
   SG->RowCount = (int)pTable->dwNumEntries+1;
   for(unsigned int i = 0; i < pTable->dwNumEntries; ++i)
   {
    PMIB_IFROW ifRow = &pTable->table[i];
    {
     char str[MAXLEN_IFDESCR + 1] = { 0 };
     CharToOemA((char*) ifRow->bDescr, str);//(char*) ifRow->bDescr);
     //Number Name
     SG->Cells[0][i+1] = "№" + IntToStr((int)i+1) + " " + AnsiString((char*)ifRow->bDescr);
     //Type
     SG->Cells[1][i+1] = AnsiString(get_iface_type(ifRow->dwType));
     //Status
     SG->Cells[2][i+1] = AnsiString(get_iface_status(ifRow->dwOperStatus));
     //Address
     SG->Cells[3][i+1] = AnsiString(ifRow->bPhysAddr[0]) + ":" +
                         AnsiString(ifRow->bPhysAddr[1]) + ":" +
                         AnsiString(ifRow->bPhysAddr[2]) + ":" +
                         AnsiString(ifRow->bPhysAddr[3]) + ":" +
                         AnsiString(ifRow->bPhysAddr[4]) + ":" +
                         AnsiString(ifRow->bPhysAddr[5]);
     //In All
     SG->Cells[4][i+1] = AnsiString(ifRow->dwOutOctets);
     //non-cast
     SG->Cells[5][i+1] = AnsiString(ifRow->dwOutNUcastPkts);
     //unicast
     SG->Cells[6][i+1] = AnsiString(ifRow->dwOutUcastPkts);
     //non-cast+unicast
     SG->Cells[7][i+1] = AnsiString(ifRow->dwOutNUcastPkts + ifRow->dwOutUcastPkts);
     //Out All
     SG->Cells[8][i+1] = AnsiString(ifRow->dwInOctets);
     //non-cast
     SG->Cells[9][i+1] = AnsiString(ifRow->dwInNUcastPkts);
     //unicast
     SG->Cells[10][i+1] = AnsiString(ifRow->dwInUcastPkts);
     //non-cast+unicast
     SG->Cells[11][i+1] = AnsiString(ifRow->dwInNUcastPkts + ifRow->dwInUcastPkts);
     //Speed
     SG->Cells[12][i+1] = AnsiString(ifRow->dwSpeed);
 
     if(pAddresses)
     {
      MIB_IPADDRROW * pAddr = get_iface_ipaddrow(ifRow->dwIndex, pAddresses);
      if(pAddr)
      {
       BYTE * addr = (BYTE*) &pAddr->dwAddr;
       char str[255];
 
       get_ipaddr_type( str, pAddr->wType );
       //IP address
       SG->Cells[13][i+1] = AnsiString(addr[0]) + "." +
                            AnsiString(addr[1]) + "." +
                            AnsiString(addr[2]) + "." +
                            AnsiString(addr[3]) + " " +
                            AnsiString(str);
       if(addr[0] != 0 && addr[0] != 127)
       {
        NumActiveAdapter = i;
       }
       addr = (BYTE*) &pAddr->dwMask;
       //Network mask
       SG->Cells[14][i+1] = AnsiString(addr[0]) + "." +
                            AnsiString(addr[1]) + "." +
                            AnsiString(addr[2]) + "." +
                            AnsiString(addr[3]);
      }
     }
    }
   }
   if(pAddresses) LocalFree(pAddresses);
   MonButton->Enabled = true;
  }
  else
  {
   SB1->Panels[0].Items[0]->Text = "ОШИБКА: вызов GetIfTable";
  }
  LocalFree(pTable);
 }
 else
 {
  SB1->Panels[0].Items[0]->Text = "ОШИБКА: вызов GetIfTable";
 }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::MonButton1Click(TObject *Sender)
{
 if(MonButton->Caption == "Отслеживать")
 {
  InOutTrafficTimer->Enabled = true;
  MonButton->Caption = "Остановить";
 }
 else
 {
  InOutTrafficTimer->Enabled = false;
  MonButton->Caption = "Отслеживать";
 }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::InOutTrafficTimerTimer(TObject *Sender)
{
 NumActiveAdapter;
 PMIB_IFTABLE pTable = NULL;
 DWORD dwSize = 0;
 if(GetIfTable( pTable, &dwSize, FALSE ) == ERROR_INSUFFICIENT_BUFFER)
 {
  pTable = PMIB_IFTABLE(LocalAlloc(LMEM_ZEROINIT, dwSize));
  if(!GetIfTable( pTable, &dwSize, TRUE ) )
  {
   MIB_IPADDRTABLE * pAddresses = get_ifaces_table();
   if(!pAddresses)
   {
    SB1->Panels[0].Items[0]->Text = "ПРЕДУПРЕЖДЕНИЕ: Не удалось получить таблицу IP-адресов!";
   }
   SB1->Panels[0].Items[0]->Text = "Активный адаптер: " + SG->Cells[0][(NumActiveAdapter+1)];
   PMIB_IFROW ifRow = &pTable->table[NumActiveAdapter];
   {
     //In All
     SB1->Panels[0].Items[1]->Text = "In: " + AnsiString(ifRow->dwOutOctets);
     //Out All
     SB1->Panels[0].Items[2]->Text = "Out: " + AnsiString(ifRow->dwInOctets);
   }
   if(pAddresses) LocalFree(pAddresses);
  }
  else
  {
   SB1->Panels[0].Items[0]->Text = "ОШИБКА: вызова GetIfTable";
  }
  LocalFree(pTable);
 }
 else
 {
  SB1->Panels[0].Items[0]->Text = "ОШИБКА: вызова GetIfTable";
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SetSGData()
{
 //SG->Clear();
 SG->Cells[0][0] =  "Name";
 SG->Cells[1][0] =  "Type";
 SG->Cells[2][0] =  "Status";
 SG->Cells[3][0] =  "Address";
 SG->Cells[4][0] =  "Out Byte";
 SG->Cells[5][0] =  "Out ncast";
 SG->Cells[6][0] =  "Out ucast";
 SG->Cells[7][0] =  "Out ncast + ucast";
 SG->Cells[8][0] =  "In Byte";
 SG->Cells[9][0] =  "In ncast";
 SG->Cells[10][0] =  "In ucast";
 SG->Cells[11][0] =  "In ncast + ucast";
 SG->Cells[12][0] =  "Interface speed";
 SG->Cells[13][0] =  "IP address";
 SG->Cells[14][0] =  "Network mask";
}
//---------------------------------------------------------------------------
//функции
char * TForm1::get_iface_type(int type)
{
 switch(type)
 {
  case IF_TYPE_OTHER: return "Some other type of network interface.";
  case IF_TYPE_ETHERNET_CSMACD: return "An Ethernet network interface.";
  case IF_TYPE_ISO88025_TOKENRING: return "A token ring network interface.";
  case IF_TYPE_PPP: return "A PPP network interface.";
  case IF_TYPE_SOFTWARE_LOOPBACK: return "A software loopback network interface.";
  case IF_TYPE_ATM: return "An ATM network interface.";
  case IF_TYPE_IEEE80211: return "An IEEE 802.11 wireless network interface.";
  case IF_TYPE_TUNNEL: return "A tunnel type encapsulation network interface.";
  case IF_TYPE_IEEE1394: return "An IEEE 1394 (Firewire) high performance serial bus network interface.";
  default: return "An unknown type of interface";
 }
}
//---------------------------------------------------------------------------
char * TForm1::get_iface_status(int type)
{
 switch(type)
 {
  case IF_OPER_STATUS_NON_OPERATIONAL: return "LAN adapter has been disabled.";
  case IF_OPER_STATUS_UNREACHABLE: return "WAN adapter that is not connected.";
  case IF_OPER_STATUS_DISCONNECTED: return "For LAN adapters: network cable disconnected.";
  case IF_OPER_STATUS_CONNECTING: return "WAN adapter that is in the process of connecting.";
  case IF_OPER_STATUS_CONNECTED: return "WAN adapter that is connected to a remote peer.";
  case IF_OPER_STATUS_OPERATIONAL: return "Default status for LAN adapters";
  default: return "An unknown status of interface";
 }
}
//---------------------------------------------------------------------------
MIB_IPADDRROW * TForm1::get_iface_ipaddrow(DWORD index, MIB_IPADDRTABLE * rows)
{
 for(unsigned int i = 0; i < rows->dwNumEntries; ++i)
 {
  if (rows->table[i].dwIndex == index) return &rows->table[i];
 }
 return NULL;
}
//---------------------------------------------------------------------------
MIB_IPADDRTABLE * TForm1::get_ifaces_table()
{
 DWORD dwSize = 0;
 MIB_IPADDRTABLE * pTable = NULL;
 if ( GetIpAddrTable( pTable, &dwSize, FALSE ) )
 {
  pTable = PMIB_IPADDRTABLE(LocalAlloc(LMEM_ZEROINIT, dwSize));
  if ( pTable && !GetIpAddrTable( pTable, &dwSize, TRUE ))
  {
    return pTable;
  }
  LocalFree(pTable);
 }
 return NULL;
}
//---------------------------------------------------------------------------
void TForm1::get_ipaddr_type(char * str, unsigned short type)
{
 ZeroMemory( str, 255 );
 
 if ( type & MIB_IPADDR_PRIMARY ) strcat(str, "primary ");
 if ( type & MIB_IPADDR_DYNAMIC ) strcat(str, "dynamic ");
 if ( type & MIB_IPADDR_DISCONNECTED ) strcat(str, "disabled ");
 if ( type & MIB_IPADDR_DELETED ) strcat(str, "deleted ");
 if ( type & MIB_IPADDR_TRANSIENT ) strcat(str, "transient ");
 if ( !strlen(str) ) strcpy( str, "unknown " );
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ExitButtonClick(TObject *Sender)
{
 Close();
}
//---------------------------------------------------------------------------
Вложения
Тип файла: zip отслеживание трафика.zip (29.7 Кб, 209 просмотров)
1
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
17.08.2010, 00:52 7
Цитата Сообщение от pascyber1 Посмотреть сообщение
Как сделать программу контроля исходящего и входящего трафика?
API функция GetIfTable в помощь!
Ну или можете использовать готовую прогу, которая не только подсчитывает трафик, но и сообщает о привышении заданого лимита.
Скачать можно тут:
Вложения
Тип файла: rar Count_Traffic.rar (58.7 Кб, 140 просмотров)
0
8 / 7 / 0
Регистрация: 22.06.2010
Сообщений: 96
17.08.2010, 22:58  [ТС] 8
Скачать можно тут
-вы не поверите, сейчас в данный момент ею пользуюсь

Добавлено через 5 минут
abiprofi
, не получилось ничего , но спасибо за этот вариант.

Добавлено через 3 минуты
отслеживание трафика.zip (29.7 Кб,
-скомпилируйте правильно прогу - не работает, выдаёт ошибку!
0
PB
18.08.2010, 11:59
  #9

Не по теме:

ссылка удалена
Почему?
Разве ссылка вела на другой форум или программа была платной?

0
NiTan
18.08.2010, 12:38
  #10

Не по теме:

PB, закачал ту программу сюда на форум.

0
27 / 25 / 5
Регистрация: 22.04.2010
Сообщений: 772
19.02.2011, 15:52 11
abiprofi, А можно как-нибудь постоянно считывать данные с сетевой карточки, и, к примеру, сохранять их в файлы?
0
19.02.2011, 15:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2011, 15:52
Помогаю со студенческими работами здесь

Распределение траффика
У меня есть 3 поддомена. Как можно распределять траффик между ними?

Ограничение траффика
Вопрос какой программой ( желательно попрощще) воспользоваться, Суть в чём: у меня дома 3...

Отнимание траффика
Привет всем. Люди добрае помогите. Есть прога которая подсчитывает интернет траффик. на форме есть...

Блокировка траффика
в местной файлообменной сети. В Greylinke не могу ни чью шару посмотреть и поиск не работает....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru