Sieci komputerowe - Instrukcja do laboratorium nr 2
Autor: Robert Tomaszewski
Forma zaliczenia: zademonstrowanie działającego (lub zaawansowanego) programu na koniec zajęć i objaśnienie jego konstrukcji/działania
(bez sprawozdania).
Bazując na materiałach opisujących Netbios udostępnionych przed zajęciami przez prowadzącego oraz wskazówkach umieszczonych na końcu tej
instrukcji napisz program (w języku C lub w Pascalu) dodający unikatową nazwę węzła (komputera, na którym go uruchomiono) do lokalnej
tabeli nazw Netbiosa. Na koniec działania program ma usuwać dodaną nazwę z tabeli nazw.
Ogólny wymagany schemat działania programu:
- Reset węzła Netbios (RESET).
- Pobranie łańcucha tekstowego od użytkownika (nazwa dla węzła).
- Dodanie nazwy jako unikatowej (ADDNAME).
- Wstrzymanie działania programu do momentu naciśnięcia dowolnego klawisza przez użytkownika (w tym momencie polecenie "nbtstat -n"
wydane w wierszu poleceń powinno wyświetlić dodaną nazwę)
- Usunięcie dodanej nazwy (DELETENAME)
Wskazówki - zakładamy, że funkcje są wykonywane w trybie wait (synch.)
- W związku z faktem, że rozwiązanie w Turbo Pascalu bazuje na mechanizmie przerwań mogą zdarzyć się problemy z działaniem takiego
programu w środowiskach Windows XP/Vista/7 (można wtedy próbować uruchamiania w DOS Boksie lub w trybie zgodności z Windows95/98).
- Ze względu na ograniczenia praw konta studenckiego polecenie "nbtstat -n" może nie działać na komputerach w laboratoriach (polecenie
to zwykle wymaga uprawnień administratorskich) - należy się wówczas posłużyć załączonym programem "nbtscan.exe",
dla którego równoważna składnia wygląda następująco "nbtscan -f lokalny_nr_IP" .
- Funkcje typu RESET, ADDNAME czy DELETENAME należy samodzielnie napisać poprzez odpowiednie wypełnienie pól struktury NCB i wywołanie
funkcji "Netbios" (C, WinAPI) lub przerwania (Pascal).
- Przed rozpoczęciem korzystania z Netbiosa (przed wywołaniem jakiejkolwiek funkcji) zaleca się wyzerowanie obszaru zmiennej
przechowującej blok NCB (w C można użyć procedury memset(), w Pascalu - FillChar()).
- W celu ustalenia numeru przydzielonego karcie sieciowej (interfejsowi sieciowemu) przez Netbios należy skorzystać z dołączonego
programu "lananum.exe". Informacja ta jest potrzebna do wypełnienia pola "ncb_lana_num" struktury NCB
(nieprawidłowa wartość uniemożliwi skorzystanie z jakiejkolwiek funkcji Netbiosa).
- Nazwa dla węzła pobrana od użytkownika nie powinna być dłuższa niż 15 znaków. Proszę pamiętać, że zmienna typu String w Pascalu
nie spełnia wymagań formatu ASCIIZ (w pierwszym polu - indeks 0 - zawarta jest informacja o długości łańcucha a nie znak). Należy
więc dokonać odpowiedniego przepisania znaków (i pamiętać o znaku pustym na końcu!). Język C eliminuje ten problem - tam wszystkie
łańcuchy są w formacie ASCIIZ.
- Zatrzymanie programu konsolowego w języku C najłatwiej zrealizować funkcją system("pause"); .
- Po wywołaniu każdej funkcji Netbiosa należy sprawdzić jej kod powrotu (kod błędu), żeby się upewnić co do powodzenia podjętego działania
(patrz - przykład implementacji funkcji Send w dokumencie Netbios-2.pdf)
- Dla programu pisanego w języku C należy pamiętać o dołączeniu do kompilacji biblioteki "netapi32" (w kompilatorze MinGW jej odpowiednik
to "libnetapi32.a" - w środowisku Code Blocks dodajemy ją poprzez menu Project→Build options...→zakładka Linker settings→przycisk
Add (i szukamy na dysku "libnetapi32.a" - zwykle jest w katalogu "lib" kompilatora MinGW), w środowisku MinGW Studio dodajemy
bibliotekę wpisując "netapi32" w pozycji Project→Settings→zakładka Link→okienko Libraries).
Polecane źródła
Materiały pomocnicze udostępnione tydzień przed zajęciami, dokumentacja Netbiosa online:
- Windows API - http://msdn.microsoft.com/en-us/library/bb870913
- DOS API - http://www.netbiosguide.com/