Програма для обліку інтернет трафіку
Міністерство освіти і науки
Національний університет «Львівська політехніка»
Кафедра автоматизованих систем управління
Завдання на курсову роботу
з дисципліни
«Системний аналіз та проектування комп'ютерних інформаційних систем»
Прізвище, ім’я студента
Група КН-20
Тема курсової роботи Програма для обліку інтернет трафіку
Керівник Зербіно Д.Д.
Студент Кисель Д.С.
Зміст
Вступ…………………………………………………………………
1. Огляд літератури……………………………………………………
2. Формулювання задачі.……………………………………………………….. 11
3. Алгоритм розв’язання задачі.………………………………………………... 12
4. Програмні реалізації алгоритму.……………………………………………. 13
5. Інструкція користувачеві програми.………………………………………... 14
6. Контрольні приклади та аналіз результатів їх реалізації.……………….… 15
Висновки…………………………………………………………
Література……………………………………………………
Додатки……………………………………………………………
Додаток 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 GetIfTable
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_
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_
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/
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 head
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
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_
invoke ExitProcess,0
DlgProc proc hWnd:HWND,uMsg:UINT,wParam:
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_
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,
invoke SendMessage,he,TBM_GETPOS,0,0
mov limit1,eax