Protokoly TCP/IP, statystyka sieci.

Transkrypt

Protokoly TCP/IP, statystyka sieci.
Statystyka protokołów i połączeń sieciowych.
Aplikacja netstat.
dr Zbigniew Lipiński
Instytut Matematyki i Informatyki
ul. Oleska 48
50-204 Opole
[email protected]
Statystyka połączeń sieciowych.
Narzędzie netstat – podstawowe pojęcia.
port -
jest to 16-bitowa liczba, z zakresu 1-65535, która służy do identyfikacji instancji
aplikacji sieciowej na danym hoście.
W sieciach TCP/IP są dwa rodzaje portów – porty TCP, porty UDP.
routing -
jest procesem wyznaczania najkrótszej trasy i najlepszej metody przesyłania danych między
użytkownikami sieci.
tablica routingu - tablice danych zawierające adresy sieci odbiorców danych, adresy IP routerów, są
budowane przez routery w celu wyznaczania trasy przesyłanych datagramów IP.
metryka trasy - parametr charakteryzujący koszt danej trasy.
Routery przy określaniu najlepszej trasy posługują się zbiorem parametrów (metrykami), które służą do
wyliczenia kosztu trasy (kosztu transmisji).
Przykładowe parametry służące do wyliczania kosztu trasy:
• liczba skoków (liczba routerów do odbiorcy pakietu),
• pasmo przenoszenia (różnica między maks. i min. częstotliwością transmisji sygnałów w sieci),
• opóźnienie, czas przejścia pakietu od nadawcy do odbiorcy,
• obciążenie sieci, stopień wykorzystania urządzeń i łącz,
• niezawodność, liczba błędów występująca na danej trasie,
• takty, opóźnienie w warstwie łącza danych, 1 takt = 1/18s,
• parametry określane przez administratora, mogą być kombinacja różnych parametrów.
2
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Statystyka połączeń sieciowych.
Narzędzie netstat.
Narzędzie netstat służy do uzyskiwania informacji o statystyce protokołu i połączenia sieciowego na
danym hoście.
Narzędzie netstat uruchomione z odpowiednimi parametrami pozwala uzyskać informację o:
• połączeniach sieciowych i otwartych portach,
• statystykę transmisji ramek ethernetowych,
• tabelę routingu, do obsługi tabeli routingu służy polecenie linii komend route,
• informacje o metryce trasy,
• stan bieżących połączeń.
3
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Narzędzie netstat
C:\Users\admin>netstat /?
Wyświetla statystykę protokołu i bieżące połączenia sieciowe TCP/IP.
NETSTAT [-a] [-e] [-f] [-n] [-o] [-p protokół] [-r] [-s] [-t] [interwał]
-a
-e
-f
-n
-o
-p protokół
-r
-s
-t
interwał
Wyświetla wszystkie połączenia i porty nasłuchujące.
Wyświetla statystykę sieci Ethernet.
Wyświetla w pełni kwalifikowane nazwy domen (FQDN) adresów obcych.
Wyświetla adresy i numery portów w postaci liczbowej.
Wyświetla dla każdego połączenia skojarzony z nim identyfikator procesu będącego jego
właścicielem.
Wyświetla połączenia dla określonego protokołu; może to być protokół TCP, UDP, TCPv6 lub UDPv6.
Jeżeli ta opcja zostanie użyta razem z opcją -s do wyświetlenia statystyki wybranego protokołu,
protokół może mieć dowolną wartość z następujących: IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP lub
UDPv6.
Wyświetla
ś
tabelę
ę routingu.
Wyświetla statystykę wybranego protokołu. Domyślnie jest to statystyka protokołów IP, IPv6,
ICMP, ICMPv6, TCP, TCPv6, UDP i UDPv6; do określenia jej podzbioru można użyć opcji -p.
Wyświetla bieżący stan odciążania połączenia.
Ponownie wyświetla wybraną statystykę, odczekując zadaną liczbę sekund pomiędzy każdym
wyświetleniem.
4
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Narzędzie netstat
Przykład: statystyka protokołu TCP .
5
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Narzędzie netstat
Przykład: aktywne połączenia TCP .
6
Specyfikacja struktury MIB_TCPTABLE *
Nazwa struktury: MIB_TCPTABLE
Opis
: Struktura MIB_TCPTABLE zawiera tablicę połączeń TCP.
Atrybuty
:
dwNumEntries - Określa liczbę elementów tabeli.
table -
Wskaźnik do tablicy połączeń TCP (atrybut table to tablica struktur MIB_TCPROW).
Implementacja struktury MIB_TCPTABLE:
typedef struct _MIB_TCPTABLE {
DWORD
dwNumEntries;
MIB_TCPROW table[ANY_SIZE];
} MIB_TCPTABLE, *PMIB_TCPTABLE;
* MIB - Management Information Base
7
Specyfikacja struktury MIB_TCPROW
Nazwa struktury: MIB_TCPROW
Opis
: Struktura MIB_TCPROW zawiera informację o statusach połączeń TCP.
Struktura zadeklarowana w pliku Iprtrmib.h.
Atrybuty
:
dwState
Atrybut określa status połączenia TCP. Możliwe wartości atrybutu:
MIB_TCP_STATE_CLOSED, MIB_TCP_STATE_LISTEN,
MIB_TCP_STATE_SYN_SENT, MIB_TCP_STATE_SYN_RCVD,
MIB_TCP_STATE_ESTAB,
MIB_TCP_STATE_FIN_WAIT1, MIB_TCP_STATE_FIN_WAIT2,
MIB_TCP_STATE_CLOSE_WAIT, MIB_TCP_STATE_CLOSING,
MIB_TCP_STATE_LAST_ACK, MIB_TCP_STATE_TIME_WAIT,
MIB_TCP_STATE_DELETE_TCB
dwLocalAddr - Określa adres IP lokalnego hosta. Wartości zero wskazuje, że aplikacja nasłuchująca może
zaakceptować połączenie na dowolnym interfejsie.
dwLocalPort Atrybut określa numer portu lokalnego hosta.
dwRemoteAddr Atrybut określa adres IP zdalnego hosta.
dwRemotePort Atrybut określa numer portu zdalnego hosta.
Implementacja struktury MIB_TCPROW:
typedef struct _MIB_TCPROW {
DWORD
dwState;
DWORD
dwLocalAddr;
DWORD
dwLocalPort;
DWORD
dwRemoteAddr;
DWORD
dwRemotePort;
} MIB_TCPROW, *PMIB_TCPROW;
8
Specyfikacja struktury MIB_TCPSTATS
Nazwa struktury: MIB_TCPSTATS
Opis :
Struktura MIB_TCPSTATS zawiera informacje statystyczne o protokole TCP na lokalnym hoście.
Atrybuty
:
dwRtoAlgorithm Określa używany algorytm RTO (Retransmission Time-Out), RFC 1122,
algorytmy Jacobson’a, Karn’a.
V. Jacobson, Congestion Avoidance and Control, ACM SIGCOMM-88, August 1988.
dwRtoMin dwRtoMax dwMaxConn dwActiveOpens dwPassiveOpens dwAttemptFails dwEstabResets dwCurrEstab dwInSegs dwOutSegs dwRetransSegs dwInErrs dwOutRsts dwNumConns -
Określa minimalny czas retransmisji liczony w milisekundach.
Określa maksymalny czas retransmisji liczony w milisekundach.
Określa maksymalna liczbę połączeń. Wartość atrybutu = -1; oznacza zmienną
liczbę połączeń.
Określa liczbę aktywnych otwarć ‘active opens’. ‘Aktywne otwarcie’ określa
połączenie inicjujące klienta z serwerem.
Określa liczbę pasywnych otwarć ‘pasive opens’. ‘Pasywne otwarcie’ określa
liczbę otwartych połączeń serwera nasłuchującego na zapytania klienta.
Określa liczbę nieudanych prób połączeń.
Określa liczbę zresetowanych połączeń.
Określa liczbę bieżących połączeń.
Określa liczbę otrzymanych segmentów.
Określa liczbę wysłanych segmentów (liczba nie uwzględnia segmentów
retransmitowanych).
Określa liczbę retransmitowanych segmentów.
Określa liczbę odebranych błędów.
Określa liczbę wysłanych segmentów z flagą ‘reset=1’.
9
Określa liczbę wszystkich połączeń (przyrostowo).
Implementacja struktury MIB_TCPSTATS
typedef struct _MIB_TCPSTATS {
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
} MIB_TCPSTATS, *PMIB_TCPSTATS;
dwRtoAlgorithm;
dwRtoMin;
dwRtoMax;
dwMaxConn;
dwActiveOpens;
dwPassiveOpens;
dwAttemptFails;
dwEstabResets;
dwCurrEstab;
dwInSegs;
dwOutSegs;
dwRetransSegs;
dwInErrs;
dwOutRsts;
dwNumConns;
10
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Specyfikacja funkcji GetTcpTable()
Nazwa funkcji: GetTcpTable()
Zwracana wartość: DWORD
Funkcja zwraca NO_ERROR gdy wywołanie funkcji zakończyło się sukcesem.
W innym przypadku zwracane są kody błędów:
ERROR_INVALID_PARAMETER, ERROR_INSUFFICIENT_BUFFER,
ERROR_NOT_SUPPORTED, inne.
Argumenty
Opis
: PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder
pTcpTable - [out] Wskaźnik do bufora który przechowuje tablicę połączeń TCP (struktura
MIB_TCPTABLE).
pdwSize - [in, out] Dla ’wejścia’, określa wielkość bufora wskazywany przez wskaźnik pTcpTable.
Gdy bufor jest za mały dla odbioru danych połączenia, funkcja GetTcpTable() ustawia
wartość tego parametru na wymaganą wielkość bufora.
bOrder - [in] Określa czy tablica połączeń powinna być uporządkowana (sortowana). Gdy parametr
ma wartość TRUE, tablica jest uporządkowana w sposób: lokalny adres IP, lokalny numer
portu, zdalny adres IP, zdalny numer portu.
: Funkcja GetTcpTable() służy do pobierania informacji o tablicy połączeń TCP.
11
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Specyfikacja funkcji GetTcpStatistics()
Nazwa funkcji
: GetTcpStatistics()
Zwracana wartość: DWORD
Funkcja zwraca NO_ERROR gdy wywołanie funkcji zakończyło się sukcesem. W innym przypadku
funkcja używa FormatMessage dla uzyskania wiadomości o zawracanym błędzie
Argumenty
: PMIB_TCPSTATS pStats
pStats [out] Wskaźnik do struktury MIB_TCPSTATS do której pobierane są dane o statystyce
TCP lokalnego hosta.
Opis
: Funkcja GetTcpStatistics() służy do pobierania informacji o statystyce TCP lokalnego hosta.
12
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Specyfikacja makra MAKEWORD()
Nazwa makra
: MAKEWORD()
Zwracana wartość: WORD
Argumenty
: BYTE bLow, BYTE bHigh
bLow – drugi bajt nowej wartości typu WORD (the low-order byte of the new value).
bHigh – pierwszy bajt nowej wartość (the high-order byte of the new value).
Makro służy do tworzenia zmiennej typu WORD (16-bitowy unsigned integer) z dwóch zmiennych typu
BYTE (unsigned char, 8 bitów).
Makro zadeklarowane w Windef.h, zawiera Windows.h
Przykład:
MAKEWORD(4,3) = 772
(dec) 4, (bin) 00000100
(dec) 3, (bin) 00000011
wartość (dec) 772, (bin) 00000011 00000100
Implementacja makra MAKEWORD:
#define MAKEWORD(a, b)
((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))
13
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Specyfikacja funkcji getConnStatistics()
void getConnStatistics()
{
cout << "*** Statystyka polaczen ***" << endl;
MIB_TCPSTATS
* pTcpStats = NULL;
pTcpStats = new MIB_TCPSTATS[sizeof(MIB_TCPSTATS)];
GetTcpStatistics(pTcpStats);
cout << "\tdwRtoAlgorithm . : " << pTcpStats->dwRtoAlgorithm << endl;
cout << "\tdwNumConns . . . : " << pTcpStats->dwNumConns << endl;
delete [] pTcpStats;
}
14
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Specyfikacja funkcji getConnTable()
void getConnTable()
{
MIB_TCPTABLE
DWORD
DWORD
string
struct
DWORD
string
* pTcpTable =
NULL;
status
=
NO_ERROR;
dwActualSize =
MAKEWORD(0,0);
strState;
in_addr
inadLocal, inadRemote;
dwRemotePort = MAKEWORD(0,0);
sLocalIp, sRemoteIp;
cout << "*** Tablica polaczen ***" << endl;
status = GetTcpTable(pTcpTable, &dwActualSize, TRUE);
if (status == ERROR_INSUFFICIENT_BUFFER)
{
pTcpTable = new MIB_TCPTABLE[dwActualSize];
status = GetTcpTable(pTcpTable, &dwActualSize, TRUE);
}
15
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Specyfikacja funkcji getConnTable()
if (pTcpTable != NULL)
{
cout << "\tLok. Adres" << ":" << "Port\t\t" ;
cout << "Zdalny Adres" << ":" << "Port\t" ;
cout << "Stan" << endl;
for ( unsigned int i = 0; i < pTcpTable->dwNumEntries; i++)
{
switch (pTcpTable->table[i].dwState)
{
case MIB_TCP_STATE_TIME_WAIT: strState= "TIME_WAIT";
break;
case MIB_TCP_STATE_LAST_ACK: strState= "LAST_ACK";
break;
case MIB_TCP_STATE_CLOSING: strState= "CLOSING";
break;
case MIB_TCP_STATE_CLOSE_WAIT: strState= "CLOSE_WAIT";
break;
case MIB_TCP_STATE_FIN_WAIT1: strState="FIN_WAIT1";
break;
case MIB_TCP_STATE_ESTAB: strState ="ESTAB";
break;
case MIB_TCP_STATE_SYN_RCVD:
strState="SYN_RCVD";
case MIB_TCP_STATE_SYN_SENT:
strState="SYN_SENT" ;
case MIB_TCP_STATE_LISTEN:
strState="LISTEN" ;
case MIB_TCP_STATE_DELETE_TCB: strState="DELETE" ;
default: cout << "Unknown" << endl; break;
}
break;
break;
break;
break;
16
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Specyfikacja funkcji getConnTable()
inadLocal.s_addr = pTcpTable->table[i].dwLocalAddr;
if (strState != "LISTEN")
dwRemotePort = pTcpTable->table[i].dwRemotePort;
else
dwRemotePort = 0;
inadRemote.s_addr = pTcpTable->table[i].dwRemoteAddr;
sLocalIp=inet_ntoa(inadLocal);
sRemoteIp=inet_ntoa(inadRemote);
cout << "\t";
cout << sLocalIp << ":" <<
ntohs((unsigned short)(0x0000FFFF & pTcpTable->table[i].dwLocalPort))
<< "\t\t" ;
cout << sRemoteIp << ":" << ntohs((unsigned short)(0x0000FFFF & dwRemotePort))<< "\t\t";
cout << strState << endl;
}
}
delete [] pTcpTable;
}
17
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Specyfikacja projektu netstat1
Nazwa projektu: netstat1
Typ projektu: Win32 console application
Lista plików: netstat1.cpp
Metoda kompilacji: Microsoft Visual C++ 2008.
Utworzyć projekt typu 'Win32 console application‘ w menu
(-)File-> New -> Project-> Other languages-> Visual C++ -> win32 -> Win32 console application
-> wpisać nazwę: netstat1 -> przycisk (OK) -> Okno Win32 application wizard – netstat1-> wybrać:
Application settings -> wybrać: Empty project-> Przycisk (Finish).
Konfiguracja projektu:
(-)Project-> nazwa_projektu Properies... -> Configuration Properies-> Linker-> Input -> Additional
Dependecies, wpisać: ws2_32.lib IPHlpApi.Lib
Funkcjonalność:
Aplikacja pozwala uzyskać informację i statystyce protokołu TCP i połączeniach TCP.
Aby uruchomić aplikację należy w linii komend (Run-> cmd) wpisać: \> netstat1
18
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Struktura programu netstat1
Pliki nagłówkowe:
windows.h, winsock.h, iphlpapi.h, iptypes.h, iostream, string
Funkcje programu:
Funkcje WinSock: WSAStartup(); WSACleanup(); GetTcpTable(); GetTcpStatistics()
Funkcje zdefiniowane: getConnTable(), getConnStatistics()
Zmienne programu:
WSADATA wsaData;
WORD
wVersionRequested = MAKEWORD(1,1);
int
nRet;
19
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Struktura programu
Funkcja: main()
Zwracana wartość: void
Argumenty
: brak
(1) Sprawdzenie wersji WinSock’a.
nRet = WSAStartup(wVersionRequested, &wsaData);
(2) Wywołanie funkcji getConnStatistics();
(3) Wywołanie funkcji getConnTable();
(4) Zamknięcie winsock’a.
Wywołanie funkcji WSACleanup();
20
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
/////////////////////////
// tcpstat, netstat
////////////////////////
#include <windows.h>
#include <winsock.h>
#include <iphlpapi.h>
#include <iptypes.h>
#include <iostream>
#include <string>
using namespace std;
void
void
getConnTable();
getConnStatistics();
void main()
{
WORD
wVersionRequested = MAKEWORD(1,0);
WSADATA wsaData;
int
nRet;
nRet = WSAStartup(wVersionRequested, &wsaData);
getConnStatistics();
getConnTable();
WSACleanup();
}
21
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Dodatek
Management Information Base (MIB)
Baza MIB, (ang.) Management Information Base jest numeryczną bazą służącą do przechowywania danych o
zarządzanym systemie.
Struktura bazy MIB określa standard SMI, (ang.) Structure of Management Information, RFC 1155.
Baza MIB ma strukturę drzewa w której liściami są MIB'y służące do zarządzania poszczególnymi obiektami.
Struktura MIB (MIB-II):
{ iso org(3) dod(6) internet(1) mgmt(2) mib-2 (1) 1 }
{ 1 3
6
1
2
1
1}
{ iso org dod internet mgmt mib-2 system sysServices Instance}
{1.3.6.1.2.1.1.7.0}.
Przykład.
Główny MIB: 1.3.6.1.4.1.42.1.1 może reprezentować obiekt w zarządzanym systemie (host, router).
MIB'y zbudowane z głównego MIB'a (root MIB) służą do zarządzania określonymi obiektami.
22
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego
Dodatek
Management Information Base (MIB)
Przykład cd.
MIB’y identyfikujące różne typy obiektów:
systemowe {1.3.6.1.2.1.1}
interfejsy
{1.3.6.1.2.1.2}
address translation
{1.3.6.1.2.1.3}
IP subtree
{1.3.6.1.2.1.4}
ICMP
{1.3.6.1.2.1.5}
TCP
{1.3.6.1.2.1.6}
UDP
{1.3.6.1.2.1.7}
Exterior Gateway Protocol (EGP)
{1.3.6.1.2.1.8}
transmisja
{1.3.6.1.2.1.9}
Informacje standardach i zastosowaniach MIB można znaleźć w następujących dokumentach
RFC 1155, RFC 1157, RFC 1213, RFC 2578, RFC 4113.
23
Z. Lipiński, Instytut Matematyki i Informatyki, Uniwersytet Opolski, Podstawy programowania sieciowego

Podobne dokumenty