Netbios-2.pdf

(101 KB) Pobierz
117504643 UNPDF
Szybkie wprowadzenie do programowania z użyciem protokołu NetBIOS
Niezbędnym krokiem dla rozpoczęcia jakiejkolwiek transmisji z użyciem protokołu NetBIOS jest
utworzenie w pamięci specjalnego bloku NCB (Network Control Block), którego odpowiednio
wypełnione pola warunkują zachowanie węzłów (każdy komunikujący się węzeł musi mieć swój
NCB). Wymagana jest również identyfikacja węzła w sieci poprzez nadanie mu unikalnej nazwy
(kilkanaście znaków ciągu ASCIIZ). Komendy NetBIOSu wywołuje się jako funkcje przerwania
5Ch (język C i WinAPI zamiast przerwania wykorzystuje funkcję „Netbios”, której jedynym
parametrem jest wskaźnik na strukturę NCB wypełnianą na tych samych zasadach co dla DOSa,
dodatkowo program musi zawierać dyrektywę „#include <nb30.h>”).
Komunikacja za pomocą sesji umożliwia kontrolę dostarczenia wysyłanych pakietów oraz pozwala
na jednorazowe przesłanie w pakiecie do 64kb danych. Do komunikacji w ramach sesji (komendy
SEND i RECEIVE) niezbędny jest przydzielony przy nawiązaniu połączenia sesyjnego numer sesji
(nawiązanie sesji - komendy LISTEN i CALL, po uprzednim nadaniu unikalnych nazw nadawcy i
odbiorcy, a także przydzieleniu im bloków NCB). W odróżnieniu od połączenia sesyjnego
wysyłanie datagramów nie wymaga uprzedniego nawiązywania łączności pomiędzy nadawcą a
odbiorcą - można natychmiast wysyłać i odbierać dane (oczywiście po uprzednim nadaniu
unikalnych nazw zarówno dla nadawcy jak i dla odbiorcy i utworzeniu bloków NCB). Wadą tego
rodzaju komunikacji jest ograniczenie rozmiarów wysyłanych pakietów danych (datagramów) do
512 bajtów oraz brak gwarancji, iż dane dotrą do węzła przeznaczenia. Zaletą jest bardzo łatwe i
wygodne przesyłanie komunikatów typu BROADCAST, czyli rozesłanie komunikatu przez jeden
węzeł do wszystkich nasłuchujących (w trybie BROADCAST) węzłów.
Ogólny schemat tworzenia połączenia sesyjnego między dwoma węzłami :
1.Dodanie unikalnych nazw nadawcy i odbiorcy do lokalnej tabeli nazw NetBIOSu - ADD NAME.
2.Nawiązanie logicznego połączenia (sesji) - CALL (nadawca) i LISTEN (odbiorca).
3.Transfer komunikatów/danych - SEND (nadawca) i RECEIVE (odbiorca).
4.Zakończenie/rozwiązanie sesji - HANG UP (nadawca lub odbiorca).
5.Usunięcie nazw nadawcy i odbiorcy z lokalnej tabeli nazw NetBIOSu - DELETE NAME.
Zakładamy, że moduł nadawcy i odbiorcy są pisane jako osobne programy.
Poniżej przykłądowa realizacja funkcji Send (wysyłanie w sesji) w Turbo Pascalu:
function Send(nr_sesji: Byte; dane: String; NCB: TypNCB):Byte;
{ wyslanie danych w ramach sesji o podanym numerze }
{ sesja musi byc uprzednio nawiazana }
begin
with NCB do begin
ncb_command:=$14;
ncb_lsn:=nr_sesji;
ncb_buffer:=@dane;
ncb_length:=SizeOf(dane);
ncb_post:=Nil;
ncb_lana_num:=$00;
rejestry.ES:=Seg(NCB);
rejestry.BX:=Ofs(NCB);
Intr($5C,rejestry);
Send:=ncb_cmd_cplt;
end;
end;
117504643.001.png
ę
NetBIOS - Network Basic Input Output System, został opracowany przez firmy IBMi Sytek Inc.
(obecnie Hughes LAN Systems Inc. Mountain View, Kalifornia) jako część programu IBM PC
Network. Podobnie jak ROMBIOS pozwala systemowi operacyjnemu komputera PC oraz
aplikacjom na dostęp do lokalnych urządzeń I/O, Net-BIOS zapewnia aplikacjom dostęp do
urządzeń sieciowych. Protokół NetBIOS, traktowany jako warstwa sesji modelu odniesienia OSI,
stał się de facto standardem.
Ekspansja sieci LAN i łączenie ich w większe struktury sieciowe oraz popularność TCP/IP jako
podstawowego protokołu sieci Internet wymusiły dopasowanie interfejsu NetBIOS do pracy ponad
protokołami sieci Internet. Z punktu widzenia architektury systemu, połączenie obsługi protokołu
NetBIOS, pracującego w warstwie sesji modelu OSI, z protokołami TCP lub UDP, działającymi w
warstwie transportowej, jest naturalnym sposobem obsługi wielu istniejących aplikacji LAN,
działających w rozproszonym środowisku sieciowym.
Nieco wicej teorii
Podobnie jak w przypadku ROMBIOS, który dostarczany jest przez wielu producentów wraz z
komputerami PC, producenci systemów operacyjnych działających w sieciach LAN również
stworzyli własne implementacje NetBIOS.
Protokół NetBIOS obsługuje cztery typy podstawowych działań: Name Service, Sesion Service,
Datagram Service oraz Miscellaneous functions. Aplikacje wykorzystują te usługi do odszukania
zasobów w sieci, nawiązania i zakończenia połączenia oraz do przesyłania danych.
Obsługa systemu nazw pozwala na odwoływanie się do aplikacji posiadającej pewne zasoby
poprzez określoną nazwę stosowaną w sieci. Składa się ona z 16 znaków alfanumerycznych, które
mogą być albo wyłączne (tylko dla danej aplikacji), albo współdzielone (wykorzystywane przez
grupę). Aplikacja rejestruje daną nazwę, aby upewnić się, czy żadna inna aplikacja nie ma nic
przedwko jej wykorzystaniu. Podstawowe działania usługi nazewnictwa to: Add Name, Add Group
Name oraz Delete Name.
Usługa sesji wykorzystywana jest do zapewnienia pewnej wymiany danych pomiędzy dwiema
aplikacjami NetBIOS. Każdy przesyłany komunikat może mieć długość od O do 131071 oktetów.
Usługa sesji obejmuje podstawowe działania. Są to operacje: Call, Lisen, Hang Up, Send, Receive
oraz Session Status.
Usługa Datagram Service zapewnia zawodną, niesekwencyjną i bezpołączeniową transmisję
danych, które mogą być przesycane na dwa sposoby. Jeden polega na tym, że nadawca datagramu
rejestruje nazwę, pod którą przesyłane będą dane, oraz określa nazwę adresata, do którego zostaną
przesiane. Druga technika polega na rozgłaszaniu datagramu. Podstawowe działania usługi
datagramowej to: Send Datagram, Send Broadcast Datagram, Receive Datagram oraz Receive
Broadcast Datagram.
Dokument RFC1001 zawiera definicję trzech typów węzłów końcowych NetBIOS oraz dwóch
typów serwerów NetBIOS. Węzły końcowe mogą pracować Jako Broadcast (B), Point-to-Point (P)
oraz Mixed Mode (M). Każdy z tych trzech trybów pracy wynika z funkcji, jakie może wykonywać
dany węzeł. Serwery obsługujące NetBIOS mogą natomiast pracować jako węzły NetBIOS Name
Serwer (NBNS) oraz jako węzły NetBIOS Datagram Distribution (NBDD). Węzeł NBNS zarządza
nazwami używanymi w sieci i sprawdza ich poprawność. NBNS formatuje nazwy NetBIOS
zgodnie z formatem stosowanym przez DNS (Domain Name System), dzięki czemu funkcjonuje
podobnie do usługi zapytań kierowanych do DNS. Węzeł NBDD rozszerza obsługę datagramów
NetBIOS na sieci, które nie obsługują rozgłaszania grupowego lub przesyłania pakietów
rozgłoszeniowych. Wszystkie wymienione węzły
oraz serwery połączone są w różne topologie sieci lokalnych oraz sieci połączonych między sobą.
NetBIOS Name Service
Praca protokołu NetBIOS z wykorzystaniem warstwy transportowej UDP lub TCP rozpoczyna się
od tego, że NetBIOS Name Service rejestruje nazwę aplikacji, która będzie użyta. Odszukanie
adresu IP skojarzonego z nazwą NetBIOS następuje dzięki procesowi Name Query. W zależności
od rodzaju stosowanego węzła (B, P lub M) zapytania te są albo rozgłaszane w sieci, albo
kierowane bezpośrednio do NBNS.
Komunikaty NetBIOS Name Service są kompatybilne z formatem nagłówka DNS. Struktura
komunikatu to nagłówek, po którym występują cztery pola - sekcja zapytania, sekcja odpowiedzi,
sekcja uprawnień oraz sekcja informacji dodatkowych. Typowy komunikat z zapytaniem o nazwę
zawiera nazwę NetBIOS umieszczoną w sekcji zapytania, po której następuje komunikat
odpowiedzi ze szczegółowymi informacjami o tej nazwie wraz z adresem IP. Kiedy zostanie
znaleziony adres IP odpowiadający określonej nazwie, możliwe jest uruchomienie usługi sesji
(wykorzystującej TCP) lub usługi datagramowej (wykorzystującej UDP).
NetBIOS Session Service
Zaimplementowana jest w taki sposób, że działanie tej usługi można podzielić na trzy fazy:
nawiązanie sesji,
stan ustalony i zamknięcie sesji. Nawiązanie sesji związane jest z określeniem adresu IP oraz portu
TCP, który wykorzystuje strona próbująca nawiązać tę sesję, po czym następuje nawiązanie
połączenia TCP z odległym urządzeniem. Stan ustalony zapewnia obsługę przesyłania danych oraz
obsługę funkcji podtrzymania połączenia. Zamknięcie sesji oznacza zakończenie sesji NetBIOS i
przesłanie komunikatu zlecającego zamknięcie sesji TCP.
Nagłówek NetBIOS Session Service. składa się z 4-oktetowego nagłówka oraz zakończenia,
którego długość zależy od rodzaju przesyłanego pakietu. W nagłówku znajdują się następujące
pola: Typ sesji (długość l oktet). Znaczniki (l oktet) oraz Długość (2 oktety). Pole Znaczniki
(długość l oktet) wykorzystuj tylko siódmy bit; wszystkie pozostałe bity ustawione są na zero. Bit 7
stosowany jest jako rozszerzenie pola Długość (które ma również długość l oktetu), określającego
liczbę oktetów znajdujących się w polach zakończenia pakietu (tzn. w polach nie będących polami
nagłówka). Kiedy zastosujemy pole Dlugość wraz z bitem rozszerzenia pola Znaczniki, to
sumaryczna długości pól zakończenia może wynosić 128k oktetów.
NetBIOS Datagram Service
Kompletny datagram NetBIOS składa się z nagłówka IP (o długości 20 oktetów), nagłówka UDP
(długości 8 oktetów), nagłówka datagramu NetBIOS (14 oktetów oraz danych NetBIOS). Dane
NetBIOS składają się z nazw NetBIOS określających
źródło oraz miejsce przeznaczenia danych (każda długości 255 oktetów) oraz z maksymalnie 512
oktetów danych użytkownika NetBIOS. Pełny datagram NetBIOS może mieć długość 1064 oktety,
ale jego przesłanie może wymagać podzielenia na fragmenty, gdy maksymalna długość datagramu
IP będzie wynosiła 576 oktetów.
Przed wysłaniem datagramów NetBIOS trzeba zapytać o nazwę, która pozwoli określić adres IP
miejsca przeznaczenia. Teraz datagram NetBIOS może być przesiany wewnątrz jednego lub kilku
kolejnych datagramów UDP, w zależności od tego, jaką będzie miał długość. Dostępne są trzy tryby
przesyłania danych: pojedynczy, który obsługuje przesyłanie danych do określonej nazwy
NetBIOS; grupowy, który przesyła te same dane do grupy odbiorców określonych nazwami Net
BIOS oraz rozgłoszeniowy, który wykorzystuje funkcję pierwotną Send Broadcast Datagram.
Współpraca NetBIOS i TCP
Wszystkie warstwy sieci ARPA musza ze sobą współpracować, w celu zapewnienia właściwego
działania protokołu. W tej analizie omawiamy wykorzystanie przez jedną ze stacji roboczych
(nazywana Art na wydruku 6.9.6ał zasobów innej stacji roboczej wystę-
pującej pod nazwą Robert. Przechwytywanie ruchu w sieci rozpoczyna się od chwili, kiedy Art
rozgłasza zapytanie o nazwę - pakiet NetBIOS Name Service (DNS) Query- szukając w sieci stacji
roboczej Robert. Zapytanie składa się z jednego wiersza, w którym
określona jest nazwa, typ i klasa obiektu. Odpowiedź zwrócona w ramce 2. zawiera potwierdzenie
unikalności nazwy Robert oraz informację, że jest to węzeł typu B (rozgłoszeniowy) o adresie IP
[XXX.YYY.200.B51]. Teraz, kiedy stacja robocza Art wie
więcej o stacji Robert, może podjąć próbę skorzystania z jej zasobów.
Stacja Art rozpoczyna od wysłania komunikatu z żądaniem nawiązania sesji NetBIOS (Typ=81)/
który ma długość 74 oktetów. Dane zawarte w tym komunikacie to nazwa stacji wywołującej i
stacji wywoływanej - ROBERT i ART. Następnie stacja Robert odpowiada wysyłając wiadomość
Positive Response (lub Session Confirm), Typ=82. W ten sposób zostaje nawiązana sesja logiczna.
Teraz stacja Art musi negocjować język, którego będzie używała w komunikacji ze stacją Robert.
Aby tego dokonać, wykorzystuje protokół Server Message Block (SMB). Protokół SMB
opracowany został przez Microsoft Corp. i klientom pracującym w systemie DOS umożliwia
komunikację z serwerami. Informacje SMB przenoszone są wewnątrz wiadomości NetBIOS.
Używając terminologii OSI, można powiedzieć, że NetBIOS zapewnia obsługę warstwy sesji (czyli
warstwy logicznej), podczas gdy SMB definiuje format, w jakim przesyłane będą dane, co oznacza,
że zapewnia obsługę funkcji warstwy prezentacji.
Po zestawieniu tego połączenia Art może przeszukiwać określony katalog na dysku stacji Robert
pobierając poszukiwany plik. Kolejne przeszukiwanie zwraca dodatkowe nazwy plików. Informacja
o tym, że nie ma już więcej plików, przesyłana jest, każąc stacji Art rozpocząć kolejne zadanie,
którym jest odszukanie atrybutów dysków. Kończąc pracę. Art wysyła komunikat o rozłączeniu
SMB. Po wymianie tych komunikatów następuje zamknięcie połączenia TCP, realizowane
wysłaniem przez stacje Art i Robert komunikatów FIN. Należy zwrócić uwagę na kolejność działań
poszczególnych protokołów: TCP zestawia połączenie end-to-end, zanim NetBIOS i SMB podejmą
próbę nawiązania sesji logicznej. Kiedy kończy się zapotrzebowanie na połączenie, protokół
warstwy wyższej (SMB) przerywa połączenie logiczne, a TCP połączenie miedzy stacjami. Opisany
proces współdziałania protokołów wykorzystamy w ostatniej analizie przypadku, w którym
prześledzimy będziemy pracę stacji roboczej pracującej pod kontrolą systemu Windows
Zgłoś jeśli naruszono regulamin