Програма для обліку інтернет трафіку



Міністерство освіти і науки

Національний університет  «Львівська політехніка»

Кафедра автоматизованих систем управління

 

 

 

 

 

 

Завдання на курсову роботу

з дисципліни

«Системний аналіз та проектування комп'ютерних інформаційних систем»

 

 

Прізвище, ім’я студента                                                                                             Кисель Д.С.

Група                                                                                                                                                          КН-20

Тема курсової роботи                                                                          Програма                         для обліку інтернет трафіку

 

 

 

 

 

 

 

 

Керівник                                                                                                                                            Зербіно Д.Д.

     Студент                                                                                                                                             Кисель Д.С.

 

Зміст

 

Вступ………………………………………………………………………………. 3

1.      Огляд літератури………………………………………………………………. 4

2.      Формулювання задачі.……………………………………………………….. 11

3.      Алгоритм розв’язання задачі.………………………………………………... 12

4.  Програмні реалізації алгоритму.……………………………………………. 13

5.  Інструкція користувачеві програми.………………………………………... 14

6.  Контрольні приклади та аналіз результатів їх реалізації.……………….… 15

Висновки……………………………………………………………………….… 17

Література…………………………………………………………………........... 18

Додатки…………………………………………………………………………….19

Додаток 1. Лістинг Inc файлу………………………………………………...…… 19

Додаток 2. Лістинг Asm файлу………………….…….………………………….… 22

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вступ

 

Метою курсової роботи є закріплення теоретичних знань та практичних навичок програмування, набутих при вивченні дисциплін «Системний аналіз та проектування комп'ютерних інформаційних систем»

В ході виконання курсової роботи студенти повинні навчитися самостійно працювати з літературою, розробляти алгоритми, здійснювати їх програмну реалізацію та від лагодження на сучасних комп‘ютерних системах.

Реалізація моєї теми курсової роботи стане в нагоді користувачам які користуються безпровідним інтернетом і мають обмежений обсяг данних, вони зможуть встановлювати ліміт на використання кожного дня, таким чином економити.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. Огляд літератури

GetIfTable Function

The GetIfTable function retrieves the MIB-II interface table.

Syntax

DWORD GetIfTable(

  __out    PMIB_IFTABLE pIfTable,

  __inout  PULONG pdwSize,

  __in     BOOL bOrder

);

Parameters

pIfTable [out]

A pointer to a buffer that receives the interface table as a MIB_IFTABLE structure.

pdwSize [in, out]

On input, specifies the size in bytes of the buffer pointed to by the pIfTable parameter.

On output, if the buffer is not large enough to hold the returned interface table, the function sets this parameter equal to the required buffer size in bytes.

Return code

Description

ERROR_INSUFFICIENT_BUFFER

The buffer pointed to by the pIfTable parameter is not large enough. The required size is returned in the DWORD variable pointed to by the pdwSizeparameter.

ERROR_INVALID_PARAMETER

The pdwSize parameter is NULL, or GetIfTable is unable to write to the memory pointed to by the pdwSize parameter.

ERROR_NOT_SUPPORTED

This function is not supported on the operating system in use on the local system.

Other

Use the FormatMessage function to obtain the message string for the returned error.

bOrder [in]

A Boolean value that specifies whether the returned interface table should be sorted in ascending order by interface index. If this parameter is TRUE, the table is sorted.

Return Value

If the function succeeds, the return value is NO_ERROR.

If the function fails, the return value is one of the following error codes.

 

Remarks

The GetIfTable function enumerates physical interfaces on a local system and returns this information in a MIB_IFTABLE structure. The physical interfaces include the software loopback interface.

The GetIfTable2 and GetIfTable2Ex functions available on Windows Vista and later are an enhanced version of the GetIfTable function that enumerate both the physical and logical interfaces on a local system. Logical interfaces include various WAN Miniport interfaces used for L2TP, PPTP, PPOE, and other tunnel encapsulations.

Interfaces are returned in a MIB_IFTABLE structure in the buffer pointed to by the pIfTable parameter. The MIB_IFTABLE structure contains an interface count and an array of MIB_IFROWstructures for each interface.

Note that the returned MIB_IFTABLE structure pointed to by the pIfTable parameter may contain padding for alignment between the dwNumEntries member and the first MIB_IFROW array entry in the table member of the MIB_IFTABLE structure. Padding for alignment may also be present between the MIB_IFROW array entries. Any access to a MIB_IFROW array entry should assume padding may exist.

MIB_IFROW Structure

The MIB_IFROW structure stores information about a particular interface.

Syntax

typedef struct _MIB_IFROW {

  WCHAR wszName[MAX_INTERFACE_NAME_LEN];

  DWORD dwIndex;

  DWORD dwType;

  DWORD dwMtu;

  DWORD dwSpeed;

  DWORD dwPhysAddrLen;

  BYTE  bPhysAddr[MAXLEN_PHYSADDR];

  DWORD 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;

  BYTE  bDescr[MAXLEN_IFDESCR];

} MIB_IFROW, *PMIB_IFROW;

 

Members

wszName

Type: WCHAR[MAX_INTERFACE_NAME_LEN]

A pointer to a Unicode string that contains the name of the interface.

dwIndex

Type: DWORD

The index that identifies the interface. This index value may change when a network adapter is disabled and then enabled, and should not be considered persistent.

dwType

Type: DWORD

The interface type as defined by the Internet Assigned Names Authority (IANA). For more information, see http://www.iana.org/assignments/ianaiftype-mib. Possible values for the interface type are listed in the Ipifcons.h header file.

The table below lists common values for the interface type although many other values are possible.

Value

Meaning

IF_TYPE_OTHER

1

Some other type of network interface.

IF_TYPE_ETHERNET_CSMACD

6

An Ethernet network interface.

IF_TYPE_ISO88025_TOKENRING

9

A token ring network interface.

IF_TYPE_PPP

23

A PPP network interface.

IF_TYPE_SOFTWARE_LOOPBACK

24

A software loopback network interface.

IF_TYPE_ATM

37

An ATM network interface.

IF_TYPE_IEEE80211

71

An IEEE 802.11 wireless network interface.

IF_TYPE_TUNNEL

131

A tunnel type encapsulation network interface.

IF_TYPE_IEEE1394

144

An IEEE 1394 (Firewire) high performance serial bus network interface.

 

 

dwMtu

Type: DWORD

The Maximum Transmission Unit (MTU) size in bytes.

dwSpeed

Type: DWORD

The speed of the interface in bits per second.

dwPhysAddrLen

Type: DWORD

The length, in bytes, of the physical address specified by the bPhysAddr member.

bPhysAddr

Type: BYTE[MAXLEN_PHYSADDR]

The physical address of the adapter for this interface.

dwAdminStatus

Type: DWORD

The interface is administratively enabled or disabled.

dwOperStatus

Type: DWORD

The operational status of the interface. This member can be one of the following values defined in the INTERNAL_IF_OPER_STATUS enumeration defined in the Ipifcons.h header file.

 

 

 

 

 

 

 

 

Value

Meaning

IF_OPER_STATUS_NON_OPERATIONAL

LAN adapter has been disabled, for example because of an address conflict.

IF_OPER_STATUS_UNREACHABLE

WAN adapter that is not connected.

IF_OPER_STATUS_DISCONNECTED

For LAN adapters: network cable disconnected. For WAN adapters: no carrier.

IF_OPER_STATUS_CONNECTING

WAN adapter that is in the process of connecting.

IF_OPER_STATUS_CONNECTED

WAN adapter that is connected to a remote peer.

IF_OPER_STATUS_OPERATIONAL

Default status for LAN adapters

 

dwLastChange

Type: DWORD

The length of time, in hundredths of seconds (10^-2 sec), starting from the last computer restart, when the interface entered its current operational state. This value rolls over after 2^32 hundredths of a second.

The dwLastChange member is not currently supported by NDIS. On Windows Vista and later, NDIS returns zero for this member. On earlier versions of Windows, an arbitrary value is returned in this member for the interfaces supported by NDIS. For interfaces supported by other interface providers, they might return an appropriate value.

dwInOctets

Type: DWORD

The number of octets of data received through this interface.

dwInUcastPkts

Type: DWORD

The number of unicast packets received through this interface.

dwInNUcastPkts

Type: DWORD

The number of non-unicast packets received through this interface. Broadcast and multicast packets are included.

dwInDiscards

Type: DWORD

The number of incoming packets that were discarded even though they did not have errors.

dwInErrors

Type: DWORD

The number of incoming packets that were discarded because of errors.

dwInUnknownProtos

Type: DWORD

The number of incoming packets that were discarded because the protocol was unknown.

dwOutOctets

Type: DWORD

The number of octets of data sent through this interface.

dwOutUcastPkts

Type: DWORD

The number of unicast packets sent through this interface.

dwOutNUcastPkts

Type: DWORD

The number of non-unicast packets sent through this interface. Broadcast and multicast packets are included.

dwOutDiscards

Type: DWORD

The number of outgoing packets that were discarded even though they did not have errors.

dwOutErrors

Type: DWORD

The number of outgoing packets that were discarded because of errors.

dwOutQLen

Type: DWORD

The transmit queue length. This field is not currently used.

dwDescrLen

Type: DWORD

The length, in bytes, of the bDescr member.

bDescr

Type: BYTE[MAXLEN_IFDESCR]

A description of the interface.

Remarks

On the Microsoft Windows Software Development Kit (SDK) released for Windows Vista and later, the organization of header files has changed and the MIB_IFROW structure is defined in theIfmib.h header file not in the Iprtrmib.h header file. Note that the Ifmib.h header file is automatically included in Iprtrmib.h which is automatically included in the Iphlpapi.h header file. The Ifmib.hand Iprtrmib.h header files should never be used directly.

Requirements

 

 

Minimum supported client

Windows 2000 Professional

Minimum supported server

Windows 2000 Server

Header

Ifmib.h on Windows Server 2008 and Windows Vista (include Iphlpapi.h);

Iprtrmib.h on Windows Server 2003, Windows XP, and Windows 2000 (include Iphlpapi.h)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Формулювання задачі

 

Розробити програмний продукт, а саме ”               Програма для обліку інтернет трафіку ”, яка повинна володіти наступною функціональністю:

- повинна відображати список підключень;

- відображати інформацію про вибране підключеня;

- підраховувати вхідний і вихідний інтернет трафік;

- встановлювати ліміт на вхідний або вихідних трафік;

- виводити повідомлення про перевищення ліміту;

- закривати з’єднання якщо того хоче користувач;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Алгоритм розв’язання задачі

В програмі використано 3 функції:

1.      Головна для створення діалогового вікна і ініціалізації всіх дочірніх вікон.

2.      Функція для сканування усіх доступних підключень в якій по черзі записуються в ComBox.

3.      Функція для вибраного підлючення яка виводить інформацію про нього і перевіряє вихід за рамки встановленого ліміту.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. Програмні реалізації алгоритму

 

Загальна характеристика програми:

Назва програми - Програма для обліку інтернет трафіку.

Написана мовою Асемблер.

 

Призначення програми:

Проводити облік інтернет трафіку, встановлювати ліміт на вхідні або вихідні данні.

 

Вхідними даними є трафік який використовується під час інтернет зєднання, інформація про вибраний інтерфейс.

Результуючою інформацією є повідомлення про перевищення ліміту.

 

Програмні засоби.

Дана програма запускається у вікні Windows під керуванням операційної системи Windows Vista, Windows 7 .

 

 

Технічні засоби.

Для повноцінного функціонування програми необхідні такі технічні засоби:

1.      Комп’ютер класу Pentium II і вище

2.      Монітор

3.      Клавіатура

4.      Windows Vista або Windows 7 (нормальне функціювання на нищих версіяв Windows не гарантується)

 

 

 

 

5. Інструкція користувачеві програми

              Перед початком роботи з програмою рекомендується скопіювати її в системний каталог операційної системи і створити ярлик на робочому столі.

1.       Після запуску              перш за все треба встановити галочки навпроти підходящих для вас конфігурацій.

2.       Після цього повзунком встановити ліміт на вхідні або вихідні данні і натиснути для підтвердження конпку “SET”

3.       Потім у вкладці “Selected Interface” вибрати потрібне підключення.

4.       У разі перебільшення ліміту на дисплеї з’явиться вікно для закриття програми а якщо це вибрано в налаштуваннях то і закриття з’єднання або для продовження роботи.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6. Контрольні приклади та аналіз результатів їх реалізації

 

(Мал.1)

Так виглядає программа при запуску.

 

(Мал.2)

Встановлення початкових конфігурацій.

 

(Мал.3)

Вибір з’єднання яке хочемо використовувати.

(Мал.4)

Відображення інформації про підключення.

 

(Мал.5)

Повідомлення про перебільшення ліміту.

Висновоки

1.                  Під час виконання роботи я написав програмний продукт “ Програму для обліку інтернет трафіку ”, використовуючи програмне середовище RadASM.

2.                  Розроблена програма, протестована на операційних системах Windows Vista і Windows 7.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список використаної літератури

 

1.      Румянцев П.В. Азбука программирования в Win32 API. – 3-е издание., дополн. – М.: Горячая линия–Телеком, 2001. – 312 с.: ил.

2.      MASM32 Library Reference

3.      www.wasm.ru Уроки Iczelion’а по Win32 API в переводе Aquila

4.      http://msdn.microsoft.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Додаток 1

Лістинг Inc файлу

include windows.inc

              include wininet.inc

              include kernel32.inc

              include user32.inc

              include Comctl32.inc

              include gdi32.inc

              include iphlpapi.inc

              include shell32.inc

              include oleaut32.inc

             

              includelib oleaut32.lib

              includelib wininet.lib

              includelib kernel32.lib

              includelib user32.lib

              includelib Comctl32.lib

              includelib shell32.lib

              includelib gdi32.lib

              includelib iphlpapi.lib

             

              DlgProcAbout                             proto :HWND, :UINT, :WPARAM, :LPARAM

              DlgProc                                           proto :HWND,:UINT,:WPARAM,:LPARAM

              CountInterfaces               proto hWnd:HWND

              SelectedInterface               proto :HWND

              OnCreate                                          proto :HWND             

.const

              IDD_DIALOG1                                          equ 101

 

             

              TB_THUMBPOSITION              equ 04h

              TB_THUMBTRACK                            equ 05h

                 WM_SHELLNOTIFY                             equ WM_USER+5

                 IDI_TRAY                                           equ 0

                 IDM_RESTORE                             equ 1000

              IDM_EXIT                                           equ 1010

  

note NOTIFYICONDATA <>

 

MIB_IFROW STRUCT

 

  wszName            db    512 dup (?)

  dwIndex            dd        ?

  dwType             dd        ?

  dwMtu              dd        ?

  dwSpeed            dd        ?

  dwPhysAddrLen      dd        ?

  bPhysAddr1         dd        ?

  bPhysAddr2         dd        ?

  dwAdminStatus      dd        ?

  dwOperStatus       dd        ?

  dwLastChange       dd        ?

  dwInOctets         dd        ?

  dwInUcastPkts      dd        ?

  dwInNUCastPkts     dd        ?

  dwInDiscards       dd        ?

  dwInErrors         dd        ? 

  dwInUnknownProtos  dd        ?

  dwOutOctets        dd        ? 

  dwOutUCastPkts     dd        ?

  dwOutNUCastPkts    dd        ?

  dwOutDiscards      dd        ?

  dwOutErrors        dd        ?

  dwOutQLen          dd        ? 

  dwDescrLen         dd        ?

  bDescr             db    256 dup (?)

MIB_IFROW ENDS

 

LimitName                                           db "LIMIT EXCEEDED",0

LimitString                             db "OK - TO CLOSE PROGRAM",13,10,\

                                                                         "CANCEL - TO CONTINUE",0

HelpStr                                                        db "Ця програма призначена для обліку інтернет трафіку",13,10,\

                                                                         "Слідкуйте за інтернет трафіком і економте!)",13,10,\

                                                                         "http://vkontakte.ru/dkisselev",0

HelpTit                                                        db "Help TraficInspector",0

LimitSet                                           db "YOU LIMIT ",0

formInOctets                            db 'SENT KB         : %d',0

formOutOctets                            db 'RECEIVED KB : %d',0

formSpeed                                          db 'INTERFACE INDEX: %d,',0

numdiv                                                        dd 1024

TimerID                                           dd 0

ClassName                                            db "TrayIconWinClass",0

AppName                                              db "TrayIcon Demo",0

RestoreString                             db "&Restore",0

ExitString                               db "E&xit Program",0             

szDisplayName db "TraficInspector",0

AboutMsg      db "TraficInspector Copyright © 2011",13,10,\

                                              "- Кисель Дмитро (vkontakte.ru/dkisselev) -",0

file                                          db 'help.txt',0

 

.data?

              divRes                                                        dd ?

              divResIn                                          dd ?

              divResOut                                          dd ?

              reqsize                                                        dd ?

              hInet                                                        dd ?

              mInet                          dd ?   

    TypeCount                                           dd ?

              traff                                                        dd ?

              hInstance                                          dd ?

              hFile                                                        dd ?

              hComBox                                           dd ?

              hMem                                                        dd ?

              hmenu                                                        dd ?

              h                                                                       dd ?

              buf                                                         db 255 dup (?),0

              buf1                                                         db 255 dup (?),0

              buf2                                                         db 255 dup (?),0

              buf3                                                         db 255 dup (?),0

              hBitmap                            HBITMAP ?

              hdcMem                            HDC ?

             

.data

i                                          dd 0

ln                                          dd 0

cOut                            dd 0

closeCon              dd 0

hedit                            dd 0

hPopupMenu              dd 0

hbox1                            dd 0

buffer                            db 256 dup(0),0

br                                db 256 dup (0),0

he                                           dd 0

format                            db              ' %ld',0

edit                              dd 0

limit1                            dd 500

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Додаток 2

Лістинг Asm файлу

 

.386

              .model flat,STDCALL

              option casemap :none

              include kyrs6.inc

.code

Start:

              invoke GetModuleHandle,NULL

              mov hInstance,eax

 

    invoke InitCommonControls

              invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL

              invoke ExitProcess,0

 

DlgProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

              mov eax,uMsg

.if eax==WM_INITDIALOG

                           

                            invoke LoadMenu,hInstance,10000

                            mov hmenu,eax

                            invoke SetMenu,hWnd,hmenu

                           

                            invoke CreatePopupMenu

        mov hPopupMenu,eax

                           

                            invoke GetDlgItem,hWnd,1011

                                          mov hbox1,eax

                            invoke GetDlgItem,hWnd,1005

                                          mov hedit,eax

                            invoke GetDlgItem,hWnd,1002

                                          mov he,eax

                            invoke GetDlgItem,hWnd,1010

                                          mov edit,eax

                            invoke GetDlgItem,hWnd,1001

                            mov hComBox,eax

                            mov h,0             

                           

                            invoke SendMessage,he,TBM_SETRANGEMAX,0,500000

                           

                            invoke CountInterfaces,hComBox

                            invoke SetTimer,hWnd,0,1200,0

.elseif eax==WM_COMMAND

                            mov                            eax,wParam

                            mov                            edx,eax

                            shr                            edx,16

                            and                            eax,0FFFFh

                           

                           

                            .if edx == BN_CLICKED ; if key pres

                                          .if eax == 1009

                                                        invoke SendMessage,hedit,WM_GETTEXT,256,addr buffer

                                                        invoke SendMessage,he,TBM_GETPOS,0,0

                                                        mov limit1,eax

Програма для обліку інтернет трафіку