HackerWannabe 1 FAQ, BEZPIECZEŃSTWO, Bezpieczeństwo.Teleinformatyczne, ! Zabezpieczenia i linux


#### #### #### #### ###########

# # # # # # ## # # # #

# # # # # # #### # # # ########

# # # # # ### ### # # #

# ###### # # # # ####

# HACKER # # WANABE # # FAQ # Version 1.0 BETA

# ###### # ## #### ## # #### 2002

# # # # ## ## ## ## # #

#### #### ### ### ####

Spis tematow:

1. Wstep

2. Protokoly Komunikacyjne:

2.1 IP

2.2 TCP

2.3 TCP/IP

2.4 UDP

2.5 ICMP

2.6 FTP

2.7 HTTP

2.8 POP, POP2, POP3

2.9 IGRP i EIGRP

2.10 UUCP

2.11 IPX

2.12 SPX

2.13 SAP

2.14 RIP

2.15 RTMP

2.16 OSPF

2.17 SMTP

2.18 ARP

2.19 RARP

2.20 Model OSI

3. Linux

3.1 Polecenia w Linuksie

3.2 Odinstalowywanie Linuksa

3.2.1 Sposob pierwszy

3.2.2 Sposob drugi

3.3 SDI dla Mandrake 8.2

3.4 Serwer DHCP

3.5 Iptables dla Mandrake 8.2

3.6 Konfiguracja serwera WWW pod Mandrake 8.2

4. Sieci

4.1 Anonimowowsc w sieci

4.1.1 Wstep

4.1.2 Proxy

a) anonimowe Proxy

b) jak sprawdzic anonimowosc Proxy?

c) skad wytrzasnac Proxy?

4.1.3 Konta shellowe

4.1.4 Java Script

4.1.5 Cookies

4.1.6 Fake mail i mailbombing

4.1.7 Bezpieczenstwo danych osobowych

4.2 Obliczanie adresu sieci na podstawie adresu IP

4.3 Sniffing

4.4 Warchalking i Wireless LAN

4.5 WAN ROUTING

5. Systemy Operacyjne

5.1 Systemy Operacyjne

5.1.1 Wstep

5.1.2 Nizszy poziom zarzadzania procesorem (procesami)

5.1.3 Zarzadzanie pamiecia

- jeden spojny obszar

- Strefy

- Strefy przemieszczalne

- Stronnicownie

- Stronnicownie na zadanie

- Segmentacja

- Segmentacja ze stronnicowniem na zadanie

5.1.4 Wyzszy poziom zarzadzania procesorem (procesami)

5.1.5 Poziom zarzadzania urzadzeniami I/O

5.1.6 Poziom zarzadzania informacja

6. Programowanie

6.1 BASH programowanie

6.2 Wstep do programowania w C

6.3 Pisanie programow Internetowych pod Linuxem - podstawy

6.4 Czym się różnią C/C++, Pascal, Assembler, Basic, Java itp..

6.5 Z czego składa się język programowania

7. Algorytmy

7.1 FIFO

7.2 LIFO

7.3 Stos

7.4 Algorytmy

7.5 Zrozumieć kod CRC

7.6 Kompresja metodą RLE

8. Linki

9. Zakonczenie

--------------------------------------------------------------------------------------------

-------------------

1. WSTEP by CZaR|Ny

-------------------

FAQ powstało w celach edukacyjnych i zostało napisane przez kilka osób po to by każdy początkujący

mógł poszerzyć swoją wiedzę. Nie opisujemy tutaj żadnych metod włamań tylko przekazujemy podstawy,

które powinien mieć każdy zaczynający swoją przygodę z poznawaniem Internetu od środka.

Jak widzicie jest trochę do czytania i na pewno każdy znajdzie tutaj coś dla siebie. Nie będe się

więcej rozpisywał bo to i tak nie ma sensu - zapraszam do lektury.

...:::DISCLAIMER:::...

Nie ponosimy żadnej odpowiedzialności za wykorzystywanie tego materiału. Wszystko co zrobisz z tym

FAQ robisz na własną odpowiedzialność. Jeśli Ci się to nie podoba to po prostu nie czytaj i skasuj

ten dokument ze swojego dysku, może to uchroni Ciebie i Twoje najbliższe otoczenie przed przykrymi

niespodziankami związanymi z materiałami zawartymi tutaj. Jeśli dalej chcesz się czegoś nauczyć i

zacząć wprowdzać zawartą tutaj wiedzę w życie to zapraszam...

---------------------------------------------------------------------------------------------

---------------------------

2. Protokoły komunikacyjne

---------------------------

==========

2.1 IP by Estor

==========

IP - Internet protocol - Protokół internetowy

1. Co to jest protokół ?

Protokół określa zasady komunikacji pomiędzy dwoma komputerami.

Ale tak łopatologicznie to może na przykładzie wyjaśnię:

W jednej knajpie siedzą Polacy i Chińczycy - Polacy rozmawiają

z Polakami, a Chińczycy z Chińczykami.

Polacy używają protokołu o nazwie POLSKI, a Chińczycy protokół

o nazwie CHIŃSKI. Ponieważ każdy z Polaków zna zasady protokołu

POLSKI dlatego mogą się ze sobą dogadać, ale żaden CHŃCZYK nie

wie co mówią Polacy, to samo się tyczy protokołu CHIŃSKI,

Polacy go nie znają dlatego nie rozumieją co mówią Chińczycy.

więc czym jest protokół?, są to zasady które normalizują sposób

wymiany danych pomiędzy komputerami, w jaki sposób nawiązywać

połączenie, jaki rozmiar muszą mieć dane itd.

Więc mój adres IP jest protokołem ?

NIE... mówi się że adres jest IP, ponieważ jest on określony w

specyfikacji protokołu internetowego, ale on sam nie jest

protokołem.

2. Do czego stworzono IP ?

W mym chorym umyśle wyobrażam sobie protokół IP jako taczki!,

nic nie robi tylko siedzi i transportuje te datagramy.

Protokół internetowy został stworzony na użytek sieci wzajemnie połączonych

systemów komputerowych, z komunikacją opartą na wymianie pakietów.

Protokół internetowy obsługuje transmisję bloków danych zwanych

datagramami (ang. datagram) z źródła do przeznaczenia, gdzie źródło

i przeznaczenie są hostami identyfikowanymi przez adres o ustalonej

długości.

Protokół internetowy pozwala na dzielenie (fragmentacje) i składanie

(defragmentacje) datagramów podczas ich wędrówki po sieci, jeśli jest to

tylko konieczne np. podczas transmisji przez sieci z "małymi pakietami"

Protokół internetowy jest swoiście ograniczony w obszarze działania, do

dostarczania funkcji niezbędnych, aby przetransportować datagram z źródła do

przeznaczenia, poprzez sieć. Jest on POZBAWIONY!!! mechanizmów gwarantujących

niezawodność transmisji danych, kontroli przepływu danych, sekwencjonowanie,

oraz inne usługi często używane w protokołach typu Host-To-Host.

3. Krótki przegląd IP

Datagram w protokole IP składa się z 2 elementów:

1. Nagłówka

2. Danych które mają zostać przetransportowane...

(a nie mówiłem że taczki 8) )

Protokół internetowy definiuje dwie podstawowe funkcje:

- adresowanie

- fragmentacje

Moduły internetowe używają adresu zawartego w nagłówku internetowym

do transportowania internetowych datagramów w kierunku ich miejsca

docelowego. Wybór drogi dla transmisji nazywa się routing.

Rotuting, czyli wyznaczanie trasy pakietów, niektórzy wielcy admini

spolszczyli słowo routing czyli wyznaczanie trasy = trasowanie 8(.

W tym FAQ ja preferuje angielską nazwę routing.

Moduły internetowe używają pól w nagłówku internetowym także do

fragmentacji i de fragmentacji datagramów, jeśli to

konieczne z powodu maksymalnego rozmiaru datagramu. Maksymalny

rozmiar datagramu jest definiowany przez typ sieci.

4. Jak to jest zbudowane ?

Protokół internetowy traktuje każdy datagram jako odrębną,

niezależną jednostkę nie związaną z żadnym innym datagramem. Nie ma

żadnych połączeń, ani logicznych zależności pomiędzy dwoma datagramami

(wirtualnych czy też innych). Protokół internetowy używa 4 pól do

udostępniania swoich usług:

- Type of Service - typ usługi,

- Time to Live - czas życia

- Options - opcje

- Header Checksum - suma kontrolna nagłówka

Typ usługi (Type of Service) jest używany do poinformowania protokołów

wyższych warstw jak mają traktować dany datagram.

Ten typ wskazania usługi, jest używany przez bramy (Ang. gateway) w celu

wybrania aktualnych parametrów transmisji, dla poszczególnych sieci,

sieć która ma zostać dla kolejnego hop'a (skoku), czy też kolejnej bramy w

czasie routing'u datagramu.

Czas życia (Time to Live) wartość wskazująca górną granice życia datagramu.

Jest ona ustawiana przez wysyłającego i wartość ta jest zmniejszana w czasie

drogi w każdy punkcie gdzie dany datagram będzie przetwarzany. Jeśli wartość

ta osiągnie zero zanim osiągnie cel ulegnie zniszczeniu.

Czas życia można uważać jako limit czasu do samozniszczenia.

Opcje udostępniają 4 funkcje kontrolne wymagane lub też użyteczne w pewnych

sytuacjach, choć zbędne przy typowej komunikacji.

Opcje zawierają ustawienia timestamps ,zabezpieczeń oraz specjalnego routingu.

Suma kontrolna nagłówka umożliwia zweryfikowanie czy datagram został

przetransportowany właściwie. Dane mogą zawierać błędy, suma je nie obejmuje.

Jeśli suma kontrolna nagłówka się nie zgadza, datagram jest bezwzględnie

niszczony przez jednostkę która stwierdzi błąd.

Protokół internetowy nie gwarantuje poprawnej komunikacji. Nie ma żadnych

potwierdzeń dla połączeń pomiędzy źródłem a przeznaczeniem, czy też od hopa

do hopa. Nie ma żadnej kontroli dla danych, tyko suma kontrolna nagłówka,

nie ma też retransmisji oraz kontroli przepływu danych.

Wykryte błędy mogą być raportowane przez Internet Control Message Protocol

(ICMP) który jest zaimplementowany w module protokołu internetowego.

5. Relacje z innymi protokołami

Poniższa ilustracja pokazuje pozycje protokołu internetowego

w hierarchii protokołów.

+------+ +-----+ +-----+ +-----+

|Telnet| | FTP | | TFTP| ... | ... |

+------+ +-----+ +-----+ +-----+

| | | |

+-----+ +-----+ +-----+

| TCP | | UDP | ... | ... |

+-----+ +-----+ +-----+

| | |

+--------------------------+----+

| Internet Protocol & ICMP |

+--------------------------+----+

|

+---------------------------+

| Local Network Protocol |

+---------------------------+

Relacje pomiędzy protokołami

Rysunek 1.

Protokół internetowy z jednej strony jest podpięty do warstwy wyższej,

protokoły typu host-do-host, a z drugiej strony do protokołu lokalnej

sieci. W takim kontekście "lokalna sieć" może być małą siecią w budynku,

albo dużą siecią jak ARPANET.

6. Ale jak to działa ?

Model działania podczas transmisji datagramów z jednej aplikacji do

drugiej można zilustrować na następującym przykładowym scenariuszu:

Zakładamy że transmisja będzie wymagać przejścia za pośrednictwem jednej

bramy (gateway).

Aplikacja wysyłająca przygotowuje swoje dane, po czym wywołuje lokalny moduł

internetowy w celu przesłania tych danych jako datagram, umieszcza również

adres docelowy oraz inne parametry wymagane podczas wywołania.

Moduł internetowy przygotowuje nagłówek datagramu i dodaje do niego dane.

Następnie wyszukuje lokalny adres sieciowy dla otrzymanego adresu, ale

tego adresu nie ma w sieci, więc wyśle datagram do bramy (gateway)

Wysyła ten datagram i lokalny adres do lokalnego interfejsu sieci.

Lokalny interfejs tworzy nagłówek lokalnej sieci i dodaje do niego

datagram, po czym przesyła tak przygotowany datagram przez siec lokalną.

Datagram dociera do bramy której adres został umieszczony w nagłówku

lokalnej sieci, lokalny interfejs usuwa nagłówek lokalnej sieci, zamieniając

w ten sposób datagram w datagram z modułu internetowego. Moduł internetowy

na podstawie adresu internetowego stwierdza że datagram musi zostać przesłany

dalej do innego hosta w kolejnej sieci.

Wywołuje on interfejs lokalnej sieci, w celu wysłania datagramu.

Ten lokalny interfejs sieciowy tworzy nagłówek lokalnej sieci i dołącza do

tego datagram i wysyła do hosta docelowego.

Host docelowy rozbiera datagram z nagłówka lokalnej sieci, przez

interfejs lokalnej sieci i dostarczone modułowi internetowemu.

Moduł internetowy stwierdza że datagram jest przeznaczony dla aplikacji na tym

hoscie. Przekazuje on dane do aplikacji w odpowiedzi na żądanie systemu,

przekazując adres źródłowy i parametry jako wynik żądania.

Application Application

Program Program

\ /

Internet Module Internet Module Internet Module

\ / \ /

LNI-1 LNI-1 LNI-2 LNI-2

\ / \ /

Local Network 1 Local Network 2

Ścieżka transmisji

Rysunek 2

7. Opis funkcji

Funkcją czy też celem protokołu internetowego jest przenoszenie

datagramów pomiędzy połączonymi sieciami. Jest to realizowane poprzez

przekazywanie datagramów od jednego modułu internetowego do drugiego,

aż zostanie osiągnięty cel datagramu.

W systemie internetowym moduł internetowy znajduje się na hostach i

bramach. Datagramy są routowane od jednego modułu internetowego do drugiego

poprzez indywidualne sieci oparte na interpretowaniu adresu internetowego.

Dlatego najważniejszym elementem protokołu internetowego jest adres

internetowy (Adres IP).

Podczas przemieszczania się datagramów od jednego modułu internetowego do

drugiego może się okazać że datagram musi zostać przetransportowany przez

sieć gdzie maksymalny rozmiar pakietu jest mniejszy niż rozmiar datagramu.

W celu obejścia tej niedogodności, protokół internetowy udostępnia

mechanizm fragmentacji.

Adresowanie

Adres docelowy jest wyznaczany na podstawie nazwy, adresu, i trasy

(Ang. routes). Nazwa określa czego szukamy. Adres - gdzie to jest,

trasa - jak się tam dostać.

Protokół internetowy w pierwszej kolejności obsługuje adres. Zadaniem

dla protokołów wyższego poziomu (np. host-to-host lub aplikacja) jest

odzwierciedlenie (zamapowanie) nazw w adresy.

Moduł internetowy odzwierciedla (mapuje) adres internetowy w adres

lokalnej sieci. Zadaniem protokołów niższych warstw (np. lokalnej sieci,

bramy) jest odzwierciedlenie lokalnego adresu sieciowego w trasy

(ang. routes)

Adres ma zawsze taki sam rozmiar, składa się z 4 oktetów bitów (32bity).

Adres rozpoczyna numer sieci, następnie adres lokalny (zwany "resztą").

Istnieją 3 formaty adresu zwane też klasami:

w klasie A, najstarszy bit ma wartość 0, następne 7 oznaczają siec,

pozostałe 24 są lokalnym adresem;

w klasie B, najstarsze bity to 1 i 0, kolejnych 14 bitów oznacza siec,

pozostałych 16 to adres lokalny;

w klasie C pierwsze 3 najstarsze bity mają wartość 110, kolejne 21 to siec,

ostatnie 8 to adres lokalny.

Fragmentacja

Fragmentacja datagramu internetowego jest konieczna jeśli rozpoczyna

on podróż w lokalnej sieci o dużym rozmiarze pakietów i musi przejść

przez lokalną siec o ograniczonym rozmiarze (mniejszym) aby dostać się

do celu.

Internetowy datagram może zostać oznaczony jako "nie fragmentuj".

Każdy datagram oznaczony w ten sposób nie zostanie nigdy sfragmentowany.

Jeśli tak oznaczony datagram nie może osiągnąć celu bez fragmentacji

w żaden inny sposób, zostanie on zniszczony.

Procedury fragmentacji i składania muszą być w stanie podzielić datagram,

na dowolną ilość kawałków, tak aby mogły być później złożone w całość.

Funkcja składająca używa pola identyfikacyjnego aby mieć pewność że

fragmenty innych datagramów nie zostaną wymieszane.

Pole pozycja fragmentacji (ang. fragment offset) informuje odbiorcę

o pozycji paczki w oryginalnym datagramie. Pozycja i długość określają

jaką część orginalnego datagramu pokrywa dany fragment.

Pola dostarczają wystarczającą ilość informacji aby poskładać pakiety

w datagramy.

==========

2.2 TCP by CZaR|Ny

==========

TCP - Transmission Control Protocol

Jest to protokół zorientowany połączeniowo, czyli umożliwia zestawienie połączenia w którym

efektywnie i niezawodnie przesyłane są dane. Połączenie to charakteryzuje się możliwością

sterowania przepływem, potwierdzania odbioru, zachowania kolejności danych, kontroli błędów

i przeprowadzania retransmisji.

TCP organizuje również dwukierunkową współpracę między warstwą IP, a warstwami wyższymi,

uwzględniając przy tym wszystkie aspekty priorytetów i bezpieczeństwa. Musi prawidłowo obsłużyć

niespodziewane zakończenie aplikacji, do której właśnie wędruje datagram, musi również bezpiecznie

izolować warstwy wyższe - w szczególności aplikacje użytkownika - od skutków awarii w warstwie

protokołu IP. Scentralizowanie wszystkich tych aspektów w jednej warstwie umożliwia znaczną

oszczędność nakładów na projektowanie oprogramowania.

Pomimo związku z protokołem IP - TCP jest protokołem w pełni niezależnym i może zostać zaadaptowany

do wykorzystania z innymi systemami dostarczania. Możliwe jest używanie go zarówno w pojedynczej

sieci takiej jak Ethernet, jak i w skomplikowanej intersieci.

TCP posiada wiele nowych możliwości w stosunku do protokołu IP. Oto niektóre z nich:

- STRUMIENIE - dane są formatowane i transportowane w postaci strumieni bitów zorganizowanych w bajty

lub 8-bitowe oktety. Gdy zostaną odebrane, mogą być przesyłane w ten sam sposób.

- BUFFER FLOW CONTROL - kontrola zajętości bufora. Pozwala zapobiec przepełnieniom buforów powiązanych

ze strumieniami danych. Jeśli jeden z procesów wysyła przez strumień więcej danych niż drugi jest w

stanie odebrać to wtedy jest zatrzymywany, aby wolniejszy proces mógł nadążyć z odbieraniem i

przetwarzaniem danych.

- DETEKCJA I KOREKCJA BŁĘDÓW TRANSMISJI - jeśli podczas transmisji wystąpi błąd obie strony połączenia

zostają o tym powiadomione, a następnie starają się zaradzić jakoś zaistniałej sytuacji, ponownie

wysyłając brakujące pakiety.

- POŁĄCZENIE FULL-DUPLEX - połączenie z możliwością jednoczesnej transmisji w obie strony w celu

zmniejszenia ograniczenia przepustowości sieci.

TCP organizuje i zlicza bajty strumienia danych za pomocą 32-bitowych numerów sekwencji. Każdy pakiet

zawiera początkowy numer sekwencji pakietu oraz numer sekwencji, którą nadawca powinien odebrać w

następnym pakiecie. Numer sekwencji pakietu to numer pierwszego bajtu danych w pakiecie w stosunku do

początku transmisji danych w strumieniu. Numer kolejnej sekwencji to numer pierwszego bajtu danych,

którego oczekuje nadawca pakietu. Okna są używane aby transmisje danych w strumieniach były

wydajniejsze. Wymiana danych w oknach pozwala na efektywniejsze wykorzystanie przepustowości, ponieważ

dopuszcza transmisję kilku pakietów, zanim zostanie zażądana odpowiedź.

W dowolnym momencie transmisji odbiorca może ustalić rozmiar okna równy zero, co oznacza, że nie

odbierze żadnych danych, dopóki rozmiar okna nie zostanie zwiększony. Powodem tego zachowania odbiorcy

może być np. przepełnienie bufora.

Budowa nagłówka TCP

-----------------------------------------------------------

| Port źródłowy | Port docelowy |

-----------------------------------------------------------

-----------------------------------------------------------

| Numer sekwencji |

-----------------------------------------------------------

-----------------------------------------------------------

| Numer kolejnej sekwencji |

-----------------------------------------------------------

-----------------------------------------------------------

| Przesunięcie|Zarezer-| Flagi| Rozmiar okna |

| danych | wowane | | |

-----------------------------------------------------------

-----------------------------------------------------------

| Suma kontrolna | Wskaźnik pilnych danych |

-----------------------------------------------------------

-----------------------------------------------------------

| Opcje |

-----------------------------------------------------------

-----------------------------------------------------------

| Dane |

-----------------------------------------------------------

- Port źródłowy - port TCP, którego używa nadawca pakietu,

- Port docelowy - port TCP, którego używa odbiorca pakietu,

- Numer sekwencji - zawiera numer pierwszego bajtu danych transportowanych za pomocą pakietu,

- Numer kolejnej sekwencji - zawiera numer poerwszego bajtu danych, których oczekuje nadawca,

- Przesunięcie danych - liczba 32-bitowych słów nagłówka,

- Zarezerwowane - do wykorzystania w przyszłości,

- Flagi - informacje sterujące (bity SYN, ACK, FIN) używane do rozpoczęcia, kontynuacji i zakończenia

połączenia,

- Rozmiar okna - wielkość okna transmisji lub rozmiar bufora danych odbieranych,

- Suma kontrolna - pozwala wykryć uszkodzenia nagłówka pakietu, występujące w wyniku błędów transmisji,

- Wskaźnik pilnych danych - opcjonalny, pierwszy bajt pilnych danych w pakiecie, który pokazuje gdzie

jest ich koniec,

- Opcje - opcje protokołu, tj. rozmiar największego segmentu TCP,

- Dane - dane protokołu wyższej warstwy.

TCP pozwala na utrzymanie wielu jednoczesnych połączeń między różnymi aplikacjami na jednym komputerze.

W celu rozróżnienia tych połączeń używa się numerów portów. Para końcówek określa jednoznacznie

połączenie między dwoma komputerami. Końcówki są zdefiniowane jako końce połączenia między dwoma

aplikacjami. Końcówka to para dwóch liczb: IP oraz numeru portu TCP komputera, czyli np.:

206.0.125.81:1026

(komputer) (port)

Technologia ta jest bardzo ważna, ponieważ pozwala na dokonanie wielu połączeń, przypisując im osobne

numery portów.

Nawiązanie połączenia TCP następuje w 3 krokach:

- wysłanie bitu SYN/ACK od strony próbującej nawiązać połączenie,

- odpowiedź w postaci SYN/ACK - nastąpiło połączenie

- gdy nie ma już danych do wysłania którakolwiek ze stron może zamknąć połączenie za pomocą pakietu FIN.

==========

2.3 TCP/IP by CZaR|Ny

==========

Do najistotniejszych zalet protokołów TCP/IP można zaliczyć:

- otwartość i niezależność od specyfikacji sprzętowo-programowej systemów komputerowych,

- możliwość integracji wielu różnych rodzajów sieci komputerowych,

- wspólny schemat adresacji pozwalający na jednoznaczne zaadresowanie każdego użytkownika,

- istnienie standardowych protokołów warstw wyższych.

Protokoły TCP/IP to dzisiaj cały zestaw protokołów przeznaczonych do:

- transferu danych: IP (Internet Protocol), TCP (Transmission Control Protocol), UDP (User Datagram Protocol),

- kontroli poprawności połączeń: ICMP (Internet Control Message Protocol),

- zarządzania siecią: SNMP (Simple Network Management Protocol),

- zdalnego włączania się do sieci: TELNET (Network Terminal Protocol),

- usług aplikacyjnych typu przesyłania plików: FTP (File Transfer Protocol).

Protokół tworzący Internet - TCP/IP możemy opisać za pomocą siedmiowarstwowego modelu ISO/OSI. Lepiej

jednak oddaje funkcje i właściwości protokołu TCP/IP uproszczony model czterowarstwowy. W modelu tym

najważniejsze są warstwy sieciowa i transportowa, pozostałe są połączone i tworzą dwie warstwy zwane

warstwą dostępu do sieci oraz warstwą aplikacji. Funkcje tych warstw pokrywają się z zadaniami odpowiadających

im warstw w modelu ISO/OSI.

ZESTAWIENIE WARSTW:

Warstwy TCP/IP Warstwy ISO/OSI

_________________________________

| TELNET FTP |_______APLIKACJI_________

| SMTP |______PREZENTACJI________

| TFTP |_________SESJI___________

+++++++++++++++++++++++++++++++++

| TCP | UDP |______TRANSPORTOWA_______

+++++++++++++++++++++++++++++++++

| IP |________SIECIOWA_________

+++++++++++++++++++++++++++++++++

| PODSIECI |______ŁĄCZA_DANYCH_______

| |________FIZYCZNA_________

+++++++++++++++++++++++++++++++++

Warstwa dostępu do sieci jest najniższą warstwą w hierarchii architektury protokołów TCP/IP. W warstwie

tej do datagramów IP dodaje się nagłówki oraz zakończenie i w ten sposób otrzymuje się ramki przesyłane

w sieci. Funkcje tej warstwy odpowiadają w przybliżeniu funkcjom dwóm najniższych warstw modelu ISO/OSI.

Do komunikacji w sieciach rozległych lub przez łącza szeregowe mogą być stosowane takie protokoły jak PPP

(Point-to-Point Protocol) lub SLIP (Serial Line IP). Te dwa protokoły zostały specjalnie opracowane do

przesyłania datagramów IP poprzez szeregowe łącza dwupunktowe. Protokół SLIP zazwyczaj jest stosowany do

łączenia pojedynczych komputerów poprzez łącza szeregowe. Natomiast w sieciach rozległych zalecane jest

stosowanie protokołu PPP.

Warstwa Internetu znajduje się powyżej warstwy dostępu do sieci. Podstawowym protokołem tej warstwy jest IP.

Protokół ten jest odpowiedzialny za przesyłanie pakietów zwanych datagramami między użytkownikami sieci. Jest

to protokół bezpołączeniowy, co oznacza, że datagramy są przesyłane przez sieć bez kontroli poprawności ich

dostarczenia. W efekcie datagram może zostać zgubiony w sieci, przekłamany lub zniekształcony. Protokół IP

jest przeznaczony do sieci o bardzo dobrej jakości i niezawodności łączy transmisyjnych. Drugim protokołem

tej warstwy jest ICMP, który jest ściśle związany z IP. Służy on do przesyłania komunikatów o nieprawidłowościach

w pracy sieci. Protokół pozwala na przesyłanie wiadomości sterujących między węzłami sieci. Wiadomości te

dotyczą sterowania przepływem, testowania połączeń, wskazania alternatywnych połączeń i wykrywania niedostępnych

użytkowników.

Warstwa transportowa zapewnia bezpośrednie połączenie między końcowymi użytkownikami (systemami) wymieniającymi

informacje. Do najważniejszych protokołów tej warstwy zaliczamy TCP oraz UDP. Protokół TCP jest protokołem

połączeniowym umożliwiającym wykrywanie błędów na obu końcach połączenia. Ma on możliwość ustanowienia i

utrzymania połączenia wirtualnego między dwoma użytkownikami w celu przesyłania danych, sterowania przepływem,

przesyłania potwierdzeń oraz kontroli i korekcji błędów. Protokół UDP jest protokołem bezpołączeniowym, nie

posiadających mechanizmów sprawdzania poprawności dostarczenia danych do miejsca przeznaczenia. Segmenty TCP

jak i pakiety UDP w celu ich dalszego przesłania są umieszczane wewnątrz datagramu IP.

Każda warstwa ma swoją terminologię określającą dane aktualnie przez nią obrabiane. Ponieważ protokół TCP/IP

składa się z dwóch głównych protokołów warstwy transportowej TCP i UDP, więc również w nazewnictwie wprowadzony

został podział.

===============================================

| WARSTWA | TCP | UDP |

-----------------------------------------------

| Aplikacji | Strumień | Wiadomość |

-----------------------------------------------

| Transportowa | Segment | Pakiet |

-----------------------------------------------

| Internetu | Datagram |

-----------------------------------------------

|Dostępu do sieci| Ramka |

===============================================

Warstwa aplikacji zawiera procesy wykorzystujące protokoły TCP lub UDP. Protokoły tej warstwy dostarczają

użytkownikom różnych usług. Do najbardziej znanych protokołów warstwy aplikacji korzystających z TCP należą:

- TELNET (Network Terminal Protocol) dla usług terminalowych. Pozwala na rozpoczęcie sesji poprzez sieć.

- FTP (File Transfer Protocol) dla transferu plików. Umożliwia interakcyjne przesyłanie plików.

- TFTP (Trivial File Transfer Protocol) dla prostych usług transferu plików. Jest to uproszczona wersja

protokołu FTP.

- SMTP (Simple Mail Transfer Protocol) dla wymiany poczty elektronicznej. Umożliwia pracę w trybie zapamiętaj

i prześlij (store-and-forward) pomiędzy systemami poczty korzystającymi z serwerów pocztowych.

- HTTP (Hyper Text Transfer Protocol) do udostępniania w sieci stron zapisanych na serwerach WWW (World Wide Web).

Natomiast do bardziej znanych protokołów warstwy aplikacji korzystających z UDP należą:

- DNS (Domain Name Service) do zamiany adresów IP na nazwy urządzeń sieciowych.

- RIP (Routing Information Protocol) do wymiany informacji związanych z aktualizacją reguły doboru tras w

węzłach sieci.

- NFS (Network File System) do współdzielenia plików przez wiele komputerów dołączonych do sieci. Jest to

rozproszony system plików działających według modelu klient-serwer.

==========

2.4 UDP by CZaR|Ny

==========

UDP - User Datagram Protocol

Protokół ten działa w sposób bezpołączeniowy. Czyli zapewnia tak samo zawodny sposób dostarczania pakietów

co protokół IP. W protokole tym nie uwzględniono jakiejkolwiek kontroli transmisji czy korekcji błędów, konsekwencją

czego pakiety UDP mogą zostać zagubione, zduplikowane albo też przybyć w nieprawidłowej kolejności. Dzięki

wykorzystaniu mniejszych nagłówków niż ma to miejsce w przypadku TCP pozwala na lepsze wykorzystanie przepustowości

łączy i dzięki temu na szybsze przetwarzanie pakietów.

UDP jest wykorzystywane głównie w przypadkach, gdy kontrola transmisji jest zapewniona przez protokoły wyższych

warstw. Usługi wykorzystujące UDP to międzi innymi: NFS, SNMP, TFTP oraz DNS.

Pakiety protokołu UDP są nazywane datagramami. Są one transportowane przez Internet za pomocą protokołu IP i zawierają

nagłówek UDP oraz dane - czyli: UDP dołącza nagłówek do danych wysyłanych przez użytkownika. Następnie przesyła je dalej

do IP, gdzie dodawany jest kolejny nagłówek, po czym całość jest umieszczana w ramce i wysyłana przez Internet.

Budowa datagramu UDP

-------------------------------------------------

| Port źródłowy | Port docelowy |

-------------------------------------------------

-------------------------------------------------

| Rozmiar datagramu | Suma kontrolna |

-------------------------------------------------

-------------------------------------------------

| Dane |

-------------------------------------------------

Porty źródła i przeznaczenia - 16-bitowe numery portów UDP używane do przetwarzania datagramów,

Rozmiar datagramu - rozmiar datagramu w bajtach,

Suma kontrolna - opcjonalna - pozwala wykryć ewentualne uszkodzenie zawartości datagramu,

Dane - dane protokołów wyższych warstw.

UDP stosuje tzw. multiplexing oraz demultiplexing pomiędzy warstwą protokołu i oprogramowaniem użytkowym. Pozwala to

na jednoczesne wykorzystywanie protokołu UDP przez wiele par aplikacji. Do multiplexingu oraz demultiplexingu

wykorzystywane są porty UDP.

Każda aplikacja chcąc wysłać jakikolwiek datagram UDP, musi poza adresem docelowym znać numer portu UDP. Po stronie

odbiorcy następuje sprawdzenie czy numer portu na który został wysłany datagram, jest przypisany nasłuchującej

aplikacji. Jeśli tak to zostanie jej niezwłocznie przekazany, w przeciwnym wypadku zwrócona zostanie na adres i port

nadawcy informacja o błędzie - ICMP error message.

==========

2.5 ICMP by CZaR|Ny

==========

ICMP - Internet Control Message Protocol

ICMP - protokół służący do przesyłania różnego rodzaju pakietów informujących o błędach i

innych ważnych sytuacjach oraz do kontrolowania kondycji połączenia.

Transportowanie pakietów ICMP jest procesem dwustopniowym. Komunikat ICMP jest dołączany

do pakietu IP jako dane, a następnie umieszczany i transportowany przez Internet w postaci

ramki. Komunikaty ICMP mogą zostać zagubione lub powielone, a to ze względu na to, że ICMP

używa takiego samego, zawodnego sposobu komunikowania się co datagramy UDP.

Budowa datagramu ICMP

----------------------------------------------------

| Typ komunikatu | Kod | Suma kontrolna |

----------------------------------------------------

Typ komunikatu - określa rodzaj sytuacji powodującej wysłanie datagramu,

Kod - zawiera dodatkowe informacje o typie komuniaktu,

Suma kontrolna - pozwala wykryć ewentualne uszkodzenia datagramu ICMP.

ICMP może także zawierać nagłówek i dane pakietu, który spowodował jego wysłanie. Pomaga to

ustalić aplikację oraz protokół, które stały się przyczyną błędu.

Najważniejsze komunikaty ICMP

--------------------------------------------------

| Typ komunikatu | Nazwa |

--------------------------------------------------

| 0 | Echo Reply |

--------------------------------------------------

| 3 | Destination Unreachable |

--------------------------------------------------

| 4 | Source Quench |

--------------------------------------------------

| 5 | Route Redirect |

--------------------------------------------------

| 8 | Echo Request |

--------------------------------------------------

| 11 | Datagram Time Exceeded |

--------------------------------------------------

| 12 | Datagram Parameter Problem |

--------------------------------------------------

| 13 | Timestamp Request |

--------------------------------------------------

| 14 | Timestamp Reply |

--------------------------------------------------

| 15 | Information Request |

--------------------------------------------------

| 16 | Information Reply |

--------------------------------------------------

| 17 | Address Mask Request |

--------------------------------------------------

| 18 | Address Mask Reply |

--------------------------------------------------

Poniżej opis najważniejszych komunikatów ICMP:

- Echo Reply (0) oraz Echo Request (8) - służą do testowania kanału komunikacyjnego pomiędzy

dwoma komputerami. Odbiorca datagramu ICMP Echo Request jest proszony o odpowiedź na tzw.

ping. Odpowiedź jest formułowana za pomocą datagramu ICMP Echo Reply. Dzięki temu nadawca

może stwierdzić czy jest możliwość nawiązania połączenia z odbiorcą, oraz sprawdzić bieżącą

kondycję połączenia z odbiorcą.

- Destination Unreachable (3) - tego typu komunikatu używa się w sytuacjach gdy: router lub

bramka nie potrafią ustalić kierunku w którym powinien być wysłąny pakiet, gdy parametr

TTL zostanie zmniejszony do 0, gdy pakiet musi zostać podzielony na fragmenty, ale ma

ustawioną flagę Don't Fragment, lub gdy określony protokół lub aplikacja w miejscu przeznaczenia

pakietu jest nieaktywna.

- Source Quench (4) - gdy bufor odebranych danych wypełni się, to pakiet, który się w nim

nie zmieści, zostanie porzucony. Dla każdego takiego pakietu wygenerowywany jest datagram

ICMP Source Quench, który dla nadawcy porzuconych pakietów jest sygnałem do zwolnienia

strumienia wysyłanych danych.

- Route Redirect (5) - informacje o bieżącej topologii sieci są co pewien czas odświeżane i

wysyłane do sąsiednich sieci, co pozwala na zachowanie aktualnych tablic routingu. Gdy

tylko router zidentyfikuje nadawcę używającego niewłaściwej trasy dla swoich pakietów, po

przetworzeniu pakietu wysyłą do nadawcy datagram ICMP Route Redirect informujący o

istnieniu lepszej trasy dla jego pakietów.

- Datagram Time Exceeded (11) - komunikat ten jest wysyłany przez router albo bramkę w sytuacji

gdy napotkają one datagram z parametrem TTL równym 0. Urządzenie napotykające datagram

TTL=0 ma obowiązek go porzucić, a następnie wysłać do nadawcy komunikat ICMP Datagram Time

Exceeded.

- Datagram Parameter Problem (12) - używany jest w wyniku napotkania datagramu, którego

nagłówek utrudnia, lub uniemożliwia jego dalsze przetwarzanie. W tym przypadku datagram

jest porzucany, a jego nadawcy zwracany jest komunikat ICMP Datagram Parameter Problem.

- Timestamp Request (13) i Timestamp Reply (14)- używa się ich do synchronizowania zegarów

komputeró w sieci.

- Information Request (15) oraz Information Reply (16) - za ich pomocą komputer może uzyskać

adres IP w sieci, w której się znajduje. W celu realizacji rozprzestrzeniany jest datagram

ICMP Inforamtion Request zawierający jedynie część adresu opisującą sieć do której należy

komputer, oczekując odpowiedzi w postaci ICMP Information Reply zawierającą pozostałą

część adresu IP tego komputera.

- Adress Mask Request (17) oraz Adress Mask Reply (18) - komunikaty te używane są do otrzymania

maski podsieci w której znajduje się komputer. ICMP Adress Mask Request może być wysyłany

bezpośrednio do urządzenia, które udzieli tej informacji (router, bramka) lub też jest

rozprzestrzeniany w całej sieci lokalnej.

==========

2.6 FTP by CZaR|Ny

==========

Protokół FTP

File Transfer Protocol

Jest to protokół działający na zasadzie klient-serwer. Jest jedną z usług sieciowych

zdefiniowanych w warstwowym modelu TCP/IP, opisującym funkcje sieci komputerowych. Protokół

ten określa sposób przesyłania plików pomiędzy dwoma komputerami. Dzięki niemu nie istnieje

konieczność uzyskiwania pełnego dostępu do zasobów komputera-odbiorcy. Połączenie z serwerem

FTP nie omija autoryzacji użytkownika na zdalnej maszynie. Dostęp do poszczególnych plików i

katalogów uzależniony jest od uprawnień posiadanych przez zalogowanego użytkownika. Serwery

FTP przeznaczone do użytku publicznego pozwalają przeważnie na uzyskanie anonimowego dostępu

do określonych zasobów osobom, które posługują się identyfikatorem 'anonymous'.

Działanie protokołu FTP jest bardzo proste - wykorzystuje on dwa porty TCP/IP jako niezależne kanały

informacyjne z czego jeden służy do sterowania sesją, a drugi do właściwego przesyłania plików.

Czyli prościej mówiąc protokół FTP umożliwia użytkownikowi sieci przesyłać pliki i zbiory, a także

i przede wszystkim kopiować zbiory z publicznych kont.

Zadania protokołu FTP,które określono w specyfikacji RFC 0765 to:

- Udostępnianie plików

- umożliwienie bezpośredniego korzystania z komputerów zdalnych (oczywiście przy użyciu programów),

- ujednolicenie sposobów korzystania z różnych nośników danych na zdalnym komputerze,

- niezawodne przesyłanie plików.

Parametry protokołu FTP:

-v - Wyłącza wyświetlanie odpowiedzi zdalnego serwera.

-n - Wyłącza auto-logowanie przy początkowym połączeniu.

-i - Wyłącza interaktywne monity w czasie przesyłania wielu plików.

-d - Włącza analizę programu, wyświetlając wszystkie polecenia ftp, które przechodzą między klientem a serwerem.

-g - Wyłącza możliwość używania symboli wieloznacznych w lokalnych nazwach plików i ścieżek. (Patrz polecenie glob w opisie poleceń).

-s:nazwapliku - Określa plik tekstowy zawierający polecenia ftp; polecenia te będą automatycznie wykonywane po uruchomieniu polecenia ftp. W tym parametrze nie są dozwolone spacje. Należy używać tej opcji zamiast readresatora (>).

-a - Używa lokalnego interfejsu przy wiązaniu połączeń danych.

-w:rozmiarokna - Zmienia domyślny rozmiar bufora przesyłania, wynoszący 4096.

Komputer - określa nazwę lub adres IP zdalnego komputera, z którym należy się połączyć

Do przesyłania plików można użyć dowolnego klienta FTP.

==========

2.7 HTTP by CZaR|Ny

==========

Protokół HTTP

Hypertext Transfer Protocol

Protokół HTTP stanowi najważniejszą część ogólnoświatowej sieci World Wide Web. Działanie

serwera opiera się na przyjmowaniu od klienta pojedyńczych rozkazów i wykonywaniu ich. Każdy

rozkaz wykonywany jest niezależnie od pozostałych. Właśnie dzięki protokołowi HTTP przesyła

się żądania udostępniania dokumentów WWW i informacje o kliknięciu odnośnika oraz informacje

z formularzy. Jak wiadomo zadaniem stron WWW jest publikowanie informacji a możliwe jest to

właśnie dzięki protokołowi HTTP.

Protokół ten jest dlatego tak uzyteczny, ponieważ udostępnia znormalizowany sposób komunikowania

się komputerów ze sobą. Określa formę żądań klienta dotyczących danych oraz formę odpowiedzi

serwera na żądania klienta. Jest on zaliczany do tzw. protokołów stateless, z tego powodu że

nie zachowuje żadnych informacji o poprzednich transakcjach serwera z klientem, czyli po

zakończeniu transakcji wszystkie dane przepadają. Stało się to właśnie powodem spopularyzowania

ciasteczek, czyli cookies.

Oficjalna specyfikacja protokołu HTTP jest zawarta w dokumencie RFC 2068.

Przykłady:

Ogólna postać nagłówka wysłanego przez klienta i odpowiedź serwera, oddzielone pojedyńczą

pustą linią. Polecenie OPTIONS pozwala uzyskać informację o tym jakie metody można stosować

do danego zasobu (* oznacza dowolny zasób, więc w tym przykładzie służy raczej jako

sprawdzenie, czy serwer działa).

OPTIONS * HTTP/1.0

HTTP/1.1 200 OK

Date: Fri, 18 Feb 2000 08:07:24 GMT

Server: Apache/1.3.1 (Unix) PHP/3.0.4

Content-Length: 0

Allow: GET, HEAD, OPTIONS, TRACE

Connection: close

Informowanie serwera o preferencjach klienta za pomocą dodatkowych pól: Accept-Language, Accept, Accept-Encoding

HEAD http://www.jakis_host.pl/~user/ HTTP/1.0

accept-language: pl

HTTP/1.1 200 OK

Date: Fri, 18 Feb 2000 08:14:28 GMT

Server: Apache/1.3.1 (Unix) PHP/3.0.4

Vary: accept-language

Connection: close

Content-Type: text/html

Content-Language: pl

Expires: Fri, 18 Feb 2000 08:14:28 GMT

Typowy błąd polegający na niezakończeniu URLa wskazującego na katalog znakiem /. Po otrzymaniu kodu błędu 301 od serwera większość przeglądarek automatycznie wysyła powtórne żadanie do serwera - tym razem z poprawnym URLem umieszczonym przez serwer w polu Location.

GET /~user HTTP/1.0

accept-language: pl

HTTP/1.1 301 Moved Permanently

Date: Fri, 18 Feb 2000 08:15:54 GMT

Server: Apache/1.3.1 (Unix) PHP/3.0.4

Location: http://www.jakis_host.pl/~user/

Connection: close

Content-Type: text/html

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<HTML><HEAD>

<TITLE>301 Moved Permanently</TITLE>

</HEAD><BODY>

<H1>Moved Permanently</H1>

The document has moved <A HREF="http://www.jakis_host.pl/~user/">here</A>

</BODY></HTML>

==========

2.8 POP, POP2, POP3 by CZaR|Ny

==========

Protokoły POP, POP2 i POP3

Protokół POP (Post Office Protocol) służy do przenoszenia poczty elektronicznej z serwera

pocztowego na komputer użytkownika. W pewnym momencie powstały dwie wersje protokołu POP:

POP2 i PO3. Podstawową różnicą pomiędzy nimi polega na tym, że korzystanie z protokołu POP2

wymaga uruchomionego serwera SMTP w przeiwieństwie do POP3, który może samodzielnie odbierać

poczte.

Protokół POP opart jest na architekturze klient-serwer, w której poczte odbiera serwer pocztowy

a następnie przechowuje ją do momentu, aż użytkownik się zaloguje na serwerze i pobierze ją.

Większość przeglądarek posida wbudowaną obsługę protokołu POP3 (można tutaj wymienić przeglądarki

Netscape, Opera, IE). Niedociągnięcia w protokole pozwalają na zdalne zalogowanie się na

serwerze w przypadku gdy zostało zmienione hasło dostępowe do skrzynki pocztowej.

Port usługi POP3 również jest narażony na atak bezpośredniego połączenia telnetowego. W takim

przypadku możliwe jest uzyskanie niektórych istotnych informacji z punktu widzenia bezpieczeństwa

systemu.

==========

2.9 IGRP by CZaR|Ny

==========

Protokół EIGRP i IGRP

Protokół IGRP (Interior Gateway Routing Protocol), czyli protokół bram wewnętrznych został

opracowany przez firmę CISCO, jako protokół wektorowo - odległościowy, wykorzystywany w

routingu wewnątrz systemu autonomicznego. Późniejsze połączenie technologii wektorowo -

odległościowej i stanów przyłączy spowodowało powstaniem rozszerzonej wersji protokołu

EIGRP (Enhanced Interior Gateway Routing Protocol). Poniżej przedstawione są formaty

pakietów.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Numer + Kod + Niewykorzystywane + AS + AS - sieci + Suma +

+ wersji + operacji + + + + kontrolna +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Rys 1. Format pakietu IGRP

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Numer + Kod + Suma kontrolna + AS - podsieci + AS - sieci + AS +

+ wersji + operacji + + + + +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Rys 2. Format pakietu EIGRP

Znaczenie poszczególnych pól jest nastepujące:

- Numer wersji (Version Number) - stosowana wersja protokołu.

- Kod operacji (Operation Code) - określa czy pakiet jest żądaniem czy aktualizacją.

- AS (Autonomous System) - numer systemu autonomicznego.

- AS podsieci (AS Subnets) - informacja o podsieciach na zewnątrz danego systemu autonomicznego.

- AS sieci (AS Nets) - informacja o liczbie i sieciach na zewnątrz danego systemu autonomicznego.

- Suma kontrolna (Checksum) - obliczna jest według standardowego algorytmu UDP.

==========

2.10 UUCP by CZaR|Ny

==========

Protokół UUCP

Protokół UUCP czyli inaczej UNIX-to-UNIX Cpou Protocol wymaga zestawu programów do transmisji

plików między różnymi systemami uniksowymi, a także do wykonywania poleceń na zdalnych systemach.

Mimo, że protokół ten został wyparty przez inne protokoły tj. FTP i SMTP, które są bardziej

poręczne i uniwersalne to na wielu systemach dalej można spotkać aktywną usługę UUCP, którą

używa się w celach administracyjnych. W zależności od systemu i wersji serwera istnieje wiele

sztuczek, które pozwalają użytkownikom kont UUCP na powiększenie swoich uprawnień w systemie.

==========

2.11 IPX by CZaR|Ny

==========

Protokół IPX

Internetwork Packet Exchange

Jest to protokół bezpołączeniowy i właśnie z tego powodu jest podobny do zawodnego sposobu

dostarczania datagramów oferowanego przez protokół IP. IPX wymaga również aby każde urządzenie

komunikujące się za jego pomocą posiadało unikalny adres składający się z 2 części: numeru

sieci oraz numeru komponentu. Numer sieci IPX jest przydzielonym 32-bitowym adresem, a numer

węzła 48-bitowym adresem MAC interfejsu sieciowego.

Przykładowy adres IPX może wyglądać tak: 45D20148.02A03BC436F

IPX korzysta z kilku schematów transportu w celu przetworzenia w ramki informacji i danych

protokołów wyższych warstw. Najbardziej popularne wsród nich to: 802.3 Raw, 802.3, Ethernet II,

Ethernet SNAP.

Sieciowe numery IPX odgrywają głowna rolę podczas wymiany pakietów między róznymi segmentami

sieci. Każdy segment ma przydzielony unikalny adres sieciowy, dzięki któremu pakiety IPX

mogą być transportowane do odpowiednicj komputerów w różnych sieciach. Uzupełnieniem adresu jest

tzw. numer socketu, który służy do identyfikacji procesu docelowego na maszynie odbiorcy.

Poniżej przedstawiona jest budowa pakietu IPX.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Suma + Długość + TC + Typ + Segment +

+ kontrolna + pakietu + (czas życia) + pakietu + docelowy +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Komponent + Socket + Segment + Komponent+ Socket +

+ docelowy + docelowy + źródłowy + źródłowy + źródłowy +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ DANE +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Dobra a teraz po kolei:

Suma kontrolna - w tym polu domyślnie znajdują się zera, ale może się w nim znajdować także

suma kontrolna obliczona na podstawie części IPX pakietu.

Dlugość pakietu - całkowiya długość pakietu IPX.

TC (czas życia) - podczas przetwarzania pakietu przez routery pole to zwiększane jest o 1. Największą

wartość jaką może wynosić to 15. Gdy któryś z routerów powiększy tą wartośc do

16 to wtedy pakiet jest porzucany.

Typ pakietu - może oznaczać:

+ (typ 0) - nieznany typ pakietu,

+ (typ 1) - pakiet inforamcji o topologii sieci,

+ (typ 4) - pakiet używany przez protokół SAP,

+ (typ 5) - pakiet SPX,

+ (typ 20) - rozprzestrzenialny pakiet IPX NetBIOS

Segment docelowy - adres sieci do której nalezy odbiorca pakietu. Jeśli odbiorca znajduje się w sieci

lokalnej to segment przyjmuje wartość 0.

Komponent docelowy - adres sprzętowy docelowego interfejsu sieciowego.

Socket docelowy - numer socketu uzywanego przez proces docelowy.

Segment źródłowy - adres sieci do której należy należy nadawca pakietu.

Komponent źródłowy - adres sprzętowy interfejsu sieciowego nadawcy.

Socket źródłowy - numer socketu używanego przez proces będący nadawcą pakietu.

Dane - dane pakietu IPX, które często zawierają nagłówek protokołu wyższej warstwy.

==========

2.12 SPX by CZaR|Ny

==========

Protokół SPX

Sequenced Packet Exchange

Protokół SPX jest głównym protokołem transportowym używanym w technologii NetWare. jest to

protokół nadrzędny w stosunku do protokołu IPX. Protokół ten zapewnia niezawodny sposób dostarczania

danych, wykorzystując w tym celu protokół IPX. SPX jest protokołem używającym okna o rozmiarze

jednego pakietu, zorientowanym na transmisje w pakietach.

Nagłówek pakietu SPX wygląda następująco:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Sterowanie połączeniem + Typ strumienia danych + Identyfikator połączenia (nadawcy) +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Identyfikator połączenia + Numer sekwencji + Numer kolejnej + Rozmiar alokacji +

+ (odbiorcy) + + sekwencji + +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

No i po kolei:

Sterowanie połączeniem - w tym polu znajdują się informacje służące do kontroli przepływu danych.

Typ strumienia danych - rodzaj danych przenoszonych za pomocą pakietu, czyli np.:

+ 0xFE - zawiadomienie o zakończeniu połączenia,

+ OxFF - potwierdzenie odbiory zawiadomienia o zakończeniu połączenia,

+ 0x00 - do wykorzystania przez użytkownika.

Identyfikator połączenia (nadawcy) - przydzielony numer połączenia IPX. Używany do demultiplexingu.

Identyfikator połączenia (odbiorcy) - przydzielony przez odbiorcę numer połączenia IPX. Używany do

demultiplexingu.

Numer sekwencji - numer ostatnio wysłanego pakietu. Pakiety są zliczane osobno w obu kierunkach.

Numer kolejnej sekwencji - numer sekwencji oczekiwanego pakietu.

Rozmiar alokacji - najwyższy numer sekwencji, jaki może zostac wysłany. Służy do bieżącego eliminowania

pakietów bez potwierdzenia odbioru.

==========

2.13 SAP by CZaR|Ny

==========

Protokół SAP

Service Advertisemenet Protocol

SAP jest protokołem, za pomocą którego różnego rodzaju demony serwerów sieciowych mogą rozprzestrzeniać

informację o swojej obecności i rodzaju świadczonych usług. Zazwyczaj informacje tego typu są rozsyłane

w odstępach 60-sekundowych. Identyfikator SAP określa rodzaj świadczonej usługi.

Pakiety SAP zawierają informacje o maksymalnie 7 usługach. Jeśli istnieje konieczność przekazania

wiadomości o większej liczbie usług wtedy wysyła się więcej pakietów.

Poniżej przedstawiam schemat budowy pakietu SAP.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Operacja + Typ usługi + Nazwa usługi +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Adres segmentu + Adres komponentu + Numer soketu + Czas życia +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Operacja - pole określające, czy dany pakiet jest zapytaniem czy odpowiedzią.

Typ usługi - identyfikator typu usługi np.:

+ 0x0004 - Serwer plików,

+ 0x0005 - Serwer zadań,

+ 0x0007 - serwer drukowania,

+ 0x0009 - archiwum,

+ 0x000A - kolejka zadań,

+ 0x0021 - SNA Gateway,

+ 0x002D - serwer czasu,

+ 0x002E - Dynamic SAP,

+ 0x0047 - Adversting Print Server,

+ 0x004B - Btrieve VAP,

+ 0x004C - SQL VA,

+ 0x0077 - nieznana usługa,

+ 0x007A - NetWare VMS,

+ 0x0098 - serwer dostępowy NetWare,

+ 0x009A - Named Pipes Server,

+ 0x009E - NetWare-Unix,

+ 0x0107 - NetWare 386,

+ 0x0111 - Test Server,

+ 0x0166 - NetWare Management,

+ 0x026A - NetWare Managemant.

Nazwa usługi - zawiera unikalny ciąg znaków będący nazwą serwera.

Adres segmentu - adres sieciowy serwera.

Adres komponentu - adres sieciowy komponentu.

Adres soketu - numer soketu dla żądań i odpowiedzi serwera.

Czas życia - liczba routerów i bramek na drodze pomiędzy klientem a serwerem.

Żeby zaoszczędzić na przepustowości sieci a także zabezpieczyć się przed przeciążeniami spowodowanymi

pakietami SAP, routery oraz bramki wyposażone są w odpowiednie filtry odrzucające niechciane pakiety

SAP. W dużych i średnich sieciach jest to konieczność. Zaleca się wtedy skonfigurowanie komunikatów

SAP tak, żeby odrzucały te z nich, które nie są konieczne dla działania sieci. Przykład: sieci fizyczne

oddalone od siebie z reguły nie potrzebują udostępniać sobie drukarek.

Jeśli uda zaatakować się router czy bramkę to wtesy można spowodować silne obciążenie lub nawet

załamanie duzych sieci, usuwając lub też modyfikując filtry pakietów SAP. Przeciążenie pakietami SAP

jest dość częstym powodem degradacji przepustowości sieci opartych na technologii Novell.

==========

2.14 RIP by CZaR|Ny

==========

Protokół RIP

Routing Information Protocol

W podstawowej wersji protokół ten jest protokołem, którego funkcjonowanie oparte jest na klasach

sieci. W kolejnej wersji tego protokołu wprowadzona została możliwość pracy bezklasowej. Formaty

obu wersji pakietu RIP przedstawione są poniżej:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Pole + Numer + Niewykorzy + AFI + Niewykorzy + Adres + Niewykorzy + Niewykorzy + Miernik +

+ cenie + wersji + stywane + + stywane + wpisu + stywane + stywane + +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

rys.1. Format pakietu RIP

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Pole + Numer + Niewykorzy + AFI + Znacznik + Adres + Maska + Następny + Miernik +

+ cenie + wersji + stywane + + trasy + wpisu + podsieci + przeskok + +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

rys.2. Format pakietu RIP v.2

A teraz zajmijmy się znaczeniem pól:

Polecenie - określa czy pakiet jest żądaniem czy odpowiedzią.

Numer wersji - stosowana wersja protokołu.

AFI (Identyfikator Rodziny Adresów) - sygnalizuje typ stosowanego adresu:

+ IP (IPv4)

+ IP6 (IPv6)

+ NSAP

+ HDLC

+ BBN 1822

+ 802

+ E.163

+ E.164

+ F.69

+ X.121

+ IPX

+ Appletalk

+ Decent IV

+ Banyan Vines.

Znacznik trasy - określa czy trasa jest trasą wewnętrzną czy zewnętrzną.

Adres wpisu - adres IP wpisu.

Maska podsieci - maska podsieci IP wpisu.

Następny przeskok - adres IP routera kolejnego przeskoku.

Miernik - liczba przeskoków do sieci docelowej.

==========

2.15 RTMP by CZaR|Ny

==========

Protokół RTMP

Routing Table Maintenance Protocol

Jest stosowany jako protokół warstwy transportu w sieciach Appletalk. Został opracowany jako

protokół wektorowo - odległościowy zapewniający informowanie routerów lokalnych o dostępności

sieci. Format pakietu RTMP:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Sieć + Długość ID + ID węzła + Niewykorzystywane + Początek + Odległość + Koniec +

+ routera + + + + zakresu 1 + + zakresu 1 +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Opis:

Sieć routera - określa sieć, w której pracuje router.

Długość ID - określa długość identyfikatora węzła.

ID węzła - identyfikator węzła.

Początek zakresu 1 - początek zakresu sieci 1.

Odległość - odległość sieci.

Koniec zakresu 1 - koniec zakresu sieci 1.

==========

2.16 OSPF by CZaR|Ny

==========

Protokół OSPF

Open Shortest Path First

OSPF - protokół wybierania najkrótszej ścieżki. Protokół stanów przyłączy OSPF jest normą

przemysłową i zalicza się do grupy bogatych w funkcej zaawansowane protokołów bram wewnętrznych.

Oto jak wygląda format pakietu:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Maska + Interwał + Opcje + Priorytet + Interwał + DR + BDR + Sąsiad +

+ + + + + nieaktywności + + + +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Opis:

Maska - maska sieci przyłącza.

Interwał - odstęp czasowy pomiędzy kolejnymi pakietami Hello, w sekundach.

Opcje - opcjonalne funkcje routera.

Priorytet - priorytet routera. Wartość 0 uniemożliwia wybranie routera jako wyróżnionego.

Interwał nieaktywności - limit czasowy nieaktywności routera w sekundach.

DR - informacja o wyróżnionym routerze w sieci.

BDR - informacja o zastępcy wyróznionego routera sieci.

Sąsiad - identyfikatory routerów mających brać udział w transmisjach pakietów Hello.

==========

2.17 SMTP by CZaR|Ny

==========

Protokół SMTP

Simple Mail Transfer Protocol

Protokół ten jest głównie używany do przenoszenia poczty elektronicznej. Standardowo serwery SMTP

oczekują na przychodzącą pocztę na porcie 25, a odebraną pocztę kopiują do odpowiednich skrzynek

pocztowych. eśli wiadomość nie może zostać dostarczona, nadawcy zostaje zwrócony komunikat błędu

zawierający początkowy fragment wiadomości. Po uzyskaniu połączenia przy użyciu protokołu TCP

komputer wysyłający pocztę czeka na komputer odbierający pocztę, po to aby wysłać wiersz tekstu

identyfikujący klienta oraz informujący, że klient jest gotowy do wysłania poczty. W systemie

tym sumy kontrolne nie są wymagane do nawiązania kontaktu z powodu wewnętrznych mechanizmów

kontrolujących przepływ danych w protokole TCP. W momencie gdy poczta zostanie odebrana przez

serwer w całości, połączenie zostaje zwolnione.

Podstawowe problemy dotyczące wymiany poczty to m.in. mail bombing czy mail spamming, ale nie

brakuje też innych ataków typu DoS.

Teraz wyjaśniam co to jest atak DoS (denial of Service) - celem ataku tego typu jest zablokowanie

możliwości korzystania z określonych lub wszystkoch usług atakowanego serwera, lub też doprowadzenie

serwera do stanu, w którym atrakujący może poszerzyć swoje uprawniena do korzystania z serwera,

włącznie z przejęciem konta root'a.

A teraz w skrócie:

"mail bombing" - jest to atak typu DoS wykonywany przez wysyłanie na pojedyńczą skrzynkę pocztową

lub serwer dużej ilości poczty w celu ograniczenia dostępności serwera lub przepełnienia skrzynki

pocztowej.

"mail spamming" - nie jest to atak sam w sobie, ale przy wysyłaniu dużej ilości zbędnej poczty tj.

reklama na skrzynki pocztowe wielu użytkowników serwery zostają przeciążone i w gruncie rzeczy powoduje

to przepełnianie skrzynek pocztowych... blaaah, ale teraz namieszałem, ale mam nadzieję, że

zrozumieliście o co mi chodzi ;]

No to by było na tyle...

==========

2.18 ARP by CZaR|Ny

==========

Protokół ARP

Protokół ARP nie jest protokołem internetowym, nie pouszcza sieci lokalnej i nie musi byc routowany

z tego powodu. Jest rozsyłany do wszystkich interfejsów w sieci lokalnej za pomocą pakietów.

Jego budowa wygląda tak:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Typ sprzętu + Typ protokołu +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Długość adresu + Długość adresu + Pole operacji +

+ sprzętowego + protokołu + +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ ARP - adres sprzętowy nadawcy (bajty 0 - 3) +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ ARP - adres sprzętowy nadawcy + ARP - adres IP nadawcy pakietu +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ ARP - adres IP nadawcy + RARP - adres sprzętowy odbiorcy +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ RARP - adres sprzętowy odbiorcy +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ RARP - adres IP odbiorcy +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

No dobra a teraz wyjaśniam:

Typ sprzętu - identyfikator typu fizycznego interfejsu hosta docelowego.

Typ protokołu - czyli typ protokołu używanego przez nadawcę.

Pole operacji - zawiera informację czy pakiet jest zapytaniem czy odpowiedzią protokołu

ARP czy protokołu RARP.

Reszta jest chyba jasna ;]

==========

2.19 RARP by CZaR|Ny

==========

Protokół RARP

Jest on w pewnym sensie odwrotnością protokołu ARP. Pozwala on komputerom rozprzestrzenić ich

adres sprzętowy, oczekując aż demon serwera zarządzający adresami w sieci lokalnej odpowie,

podając wolny adres IP. Dzięki temu protokołowi komputery bezdyskowe oraz inne urządzenia

sieciowe mogą otrzymywać własne adresy IP.

Ramka protokołu RARP wygląda następująco:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ ARP - adres IP nadawcy + RARP - adres sprzętowy nadawcy +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ RARP - adres sprzętowy odbiorcy +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ RARP - adres IP odbiorcy +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Tutaj chyba też nie musze nic tłumaczyć bo łatwo się domyślić co jak z czym do czego ;]

==========

2.20 Model OSI by CZaR|Ny

==========

OSI czyli Open Systems Interconnection Model został opracowany przez ISO (International Organization for

Standardization) do opisania procedur wykonywanych podczas komunikacji. Model OSI zawiera siedem

warstw. Trzeba umieć rozpoznawać te warstwy jako osobne elementy, których współpraca jest

konieczna do skutecznej komunikacji. OSI pozwala na specjalizowanie się producentów w wypuszczaniu

nowych produktów, które są przeznaczone dla określonej warstwy modelu. Pozwala także usystematyzować

wiedzę.

Warstwy modelu OSI:

++++++++++++++++++++++++++++++++

+ APLIKACYJNA +

++++++++++++++++++++++++++++++++

+ MULTIMEDIALNA +

++++++++++++++++++++++++++++++++

+ SESYJNA +

++++++++++++++++++++++++++++++++

+ TRANSPORTOWA +

++++++++++++++++++++++++++++++++

+ SIECIOWA +

++++++++++++++++++++++++++++++++

+ PRZESYŁOWA +

++++++++++++++++++++++++++++++++

+ FIZYCZNA +

++++++++++++++++++++++++++++++++

No i teraz zabierzemy się za omawianie poszczególnych warstw od fizycznej aż do aplikacyjnej.

1. WARSTWA FIZYCZNA

Warstwa ta odpowiedzialna jest za przesyłanie sygnałów w sposób elektryczny, elektromagnetyczny,

mechaniczny, optyczny i każdy inny sposób, wykorzystując do tego fizyczne medium komunikacyjne.

Elementami tej warstwy są np. kart sieciowe, okablowanie, czy też topologie budowy sieci takich

jak Ethernet i Token Ring.

2. WARSTWA PRZESYŁOWA

Zapewnia ona wiarygodną transmisję bitów za pomocą sieci zbudowanej na warstwie fizycznej. Warstwe

tą możemy podzielić na dwie podwarstwy:

- MAC - podwarstwa ta jest odpowiedzialna za formatowanie ramek, definiowanie fizycznej toologii

sieci a także za detekcję błędów,

- LLC - zapewnia jednolity sposób komunikowania się warstwy przesyłowej z elementami wyższych warstw

przy wykorzystaniu jednakowego interfejsu niezależnie od różnic w fizycznej budowie sieci.

3. WARSTWA SIECIOWA

Na tym poziomie modelu OSI pracują protokoły adresowe oraz te których zadaniem jest wyznaczanie trasy

pakietów w sieci.

4. WARSTWA TRANSPORTOWA

Ta warstwa jest odpowiedzialna za przesyłanie danych w postaci ciągów bajtów niezaleznie od tego

czy są przesyłane w postaci strumieni (TCP), czy też w postaci osobnych datagramów (UDP). Ogólnie

rzecz biorąc zadaniem tej warstwy jest udostępnianie sposobu nawiązania połączenia (TCP), detekcja i

korekcja błędów przesyłanych pakietów oraz multiplexing i demultiplexing przesyłanych danych.

5. WARSTWA SESYJNA

Wastwa ta dokonuje, niezbędnej do poprawnego działania warstwy multimedialnej, koordynacji wymiany

danych pomiędzy komputerami. Przykładem protokołu używanego w tej warstwie jest protokół NetBEUI.

6. WARSTWA MULTIMEDIALNA

W tej warstwie operacje są wykonywane nie tylko na pojedyńczych bajtach, czy strumieniach danych, ale

także na nośnikach informacyjnych, wymagających kompresowania, dekompresowania, szyfrowania, deszyfrowania

itd. przy użyciu różnych systemów kodowania tj. ASCII, JPEG, MPEG, MP3 itd. Warstwa ta jest także

odpowiedzialna za przekazywanie danych do warstwy aplikacyjnej.

7. WARSTWA APLIKACYJNA

Jest ostatnią i najwyższą warstwą modelu OSI. Jej zadaniem jest bezpośrednie komunikowanie się z

użytkownikiem, umożliwienie aplikacjom dostępu do sieci, dokonywanie synchronizacji pracy różnych

aplikacji itd. Typowe usługi występujące w tej warstwie to FTP, WWW oraz SMTP.

No i tak w skrócie wygląda model OSI.

---------------------------------------------------------------------------------------------

---------------------------

3. Linux

---------------------------

==========

3.1 Polecenia w Linuksie by qrack

==========

Wszystkie polecenia mają składnie polecenie1 argument1 argument2 argumentn

Dzięki średnikowi (;) można pisać kilka poleceń w jednej linijce

oddzielając je tym znakiem od siebie.

spis poleceń

ls - to samo co dir w dosie, wyświetla pliki i katalogi

ls -a - wyświetla wszytskie pliki

ls -l - wyświetla wykaz szczegółowy

gdy chcemy mieć np, wykaz szczegółowy wszytskich plików piszemy ls -la

man komenda - manual do komendy, np

man ls - wypróbój sam

cd - zmiania katalogu. przykłady

cd /usr - przejście do katalogu usr

cd .. - przejście do wcześniejszego katalogu

cd / - przejście do głownego katalogu

cp - kopiowanie

cp plik /kat1/kat2 - kopiuje plik do /kat1/kat2

cp plik1 plik2 - kopiuje zawartość plik1 do plik 2

rm - usuwanie

rm plik1 - usuwa plik 1

rm -r kat1 - usuwanie katalogu kat1

rm -f - usuwanie bez potwierdzenia

rmdir - usuwanie pustych katalogów

rmdir kat1 kat2 kat3 - usuwa katalogi kat1 kat2 kat3

mv - przenoszenie i zmiania nazwy

mv plik1 plik2 - zmiania nazwy z plik1 na plik2

mv plik /kat - przenosi plik do kat

mkdir - tworzenie katalogu

mkdir kat - tworzy katalog kat

mkdir kat1 kat2 kat3 - tworzy katalog kat1 kat2 kat3

mkdir /kat1/kat2/kat3 - tworzy strukturę katalogową /kat1/kat2/kat3

chmod - udostępnianie

chmod 777 plik/katalog - udostepnianie pliku/katalogu na pelnych prawach

chmod 666 - prawo odczytu i zapisu dla wszytskich uzytkownikow

chmod -R - uzyj aby dodac prawa dostepu wszytskim plikom w katalogach

wiecej w manualu

cat - wyswietla zawartosc pliku n

cat plik1 - wyswietla zawartosc plik1 na ekranie

cat plik1|more wyswietla zawartość stronami

cat > plik1 - mozemy dopisac tekst do pliku1 gdy nacisniemy Ctrl+D

cmp - (compare) porownywanie zawartosci plikow

cmp plik1 plik2

df - wolne miejsce na wszytskich dyskach

df - disk free ilosc wolnego miejsca na dyskach

diff - pokazuje roznice miedyz dwoma plikami np.

diff plik1 plik2

dmesg - komunikaty startu systemu

du katalog - podaje wielkosc katalogu

finger - informacje o danym uzytkowniku np.

finger michal

ftp - obsłyga ftp, wpisujemy ftp a potem:

open - łączymy sie z jakimś serwerem, np open buraki.org.pl

get - pobieranie pliku

send - wysylanie pliku

bye - koniec sesji.

help - pomoc

grep katalog (lub plik) lancuch - przeszukiwanie plikow za danym lancuchem

last - sprawdzanie logow np.

last root - sprawdza kiedy logowal sie root

lastcomm - sprawdza co porabial ostanio dany uzytkownik np.

lastcomm jasio

less plik - lepsze od more mozna przegladac plik

logout - wylogowanie sie

man - super pomoc np.

man ls - wszystko o ls

mail - odbieranie poczty troche niewygodne napisz list otrzymasz liste

komend

more plik - dzieki temu poleceniu przejzych plik

mount - mountowanie dysków

jeśli chcemy zamountować np windowski dysk hda1 robimy tak:

1. tworzymy katalog np C w /mnt

2.piszemy

mount -t vfat /dev/hda1 /mnt/C

jeśli mountujemy cd-rom:

1. tworzymy katalog np. CD w /mnt

2. piszemy

mount -t iso9660 /dev/hdd /mnt/CD

taks amo dla partycji dosowskiej:

mount -t msdos /dev/hdc1 /mnt/D

i dla stacji FDD:

mount -t ext2 /dev/fd0h1440 /mnt/fd

passwd - zmiana hasla

jesli jestes zalogowany jako root, wpisujesz:

passwd user i podajesz nowe haslo

w innym wypadku najpierw wpisuejsz stare, potem nowe haslo

ps - pokazuje co porabiasz w pamieci

ps -aux - wszytskie procesy

set - ustawia zmienne

shutdown - wyłaczenie lub reboot kompa

shutdown -h now - wyłączenie kompa

shutdown -r now - reboot

tar - pakowanie/rozpakowywanie plików

tar -zxvf plik1.tar - rozpakowanie pliku

tar -cvf plik1 - pakowanie pliku

who - wypisuje informacje o zalogowanych uzytkownikach

whoami - podaje jako kto jestesmy zalogowani w systemie

==========

3.2 Odinstalowywanie Linuksa by CZaR|Ny

==========

Każdy kto od dłuższego czasu pracuje na Linuxie wie jakie zalety, a również jakie wady ma

system. Podstawa to opanować tylko środowisko i można naprawde dużo. Jest jednak pewien

problem dla początkujących użytkowników - instalacja, pierwsze kroki, czasem coś się

sypnie w systemie jak to na początku bywa i wtedy pojawiają się schody. Czasami trzeba

po prostu postawić system od nowa i żeby to zrobić czasami jesteśmy zmuszeni do

sformatowania dysku. I tutaj nasuwa się pytanie 'Jak to zrobić?'. Odpowiedź jest bardzo

prosta.

Istnieją dwa sposoby na odinstalowanie Linuxa.

+++++

3.2.1 Sposób pierwszy

+++++

Przejdź do pracy w trybie użytkownika root. Wywołaj program cfdisk i następnie wskaż

partycje Linuxa po czym usuń ją przyciskiem delete. Wskaz na partycję Windosową i aktywuj

ją przyciskiem bootable. Następnie zapisz zmiany stanu partycji przyciskiem write. Następnie

wyjdź z programu cfdisk klikając przycisk quit. Teraz trzeba się zając usunięciem z dysku

zawartości sektora ładującego czyli MBR z zapisanym tam LILO. Używa się do tego celu

polecenia /sbin/lilo -u. Ostatnią rzeczą, którą trzeba zrobić to zamknąć system Linux

poleceniem logout z poziomu środowiska graficznego lub poleceniem halt.

+++++

3.2.2 Sposób drugi

+++++

Można też usunąć Linuxa z poziomu ładowalnej dyskietki DOS-owej poleceniem fdisk. Istnieje

duże prawdopodobieństwo, że zamiast partycji Linuxowych zobaczysz jedną partycję typu

extendet. Usuwasz ją i teraz pozostaje już tylko usunięcie programu LILO z zeroewgo sektora

ładującego. Można to zrobić poleceniem fdisk /mbr.

Można teraz pomyśleć nad nową organizacją partycji.

==========

3.3 SDI dla Mandrake 8.2 by CZaR|Ny

==========

Każdy kto ma tą dystrybucje i SDI wie, że potrafi robić nam pewne złoślistwa i czasami nie

udaje się połączyć z netem za pierwszym razem. Czasami do plików nadpisują się głupoty takie,

że szok. Za pierwszym razem bawiłem się z tym jakieś trzy razy zanim połączył się z netem.

Więc do rzeczy. Pierwszą sprawą, którą trzeba się zająć to zainstalowaniem pakietu pppd. Ważne

jest też aby wsparcie dla PPP było włączone w konfiguracji jądra. Zazwyczaj przy standardowej

instalacji ta zależność jest spełniona.

Pierwszym plikiem który trzeba edytować to plik pap-secrets. Tam znajduje się miejsce dla loginu

oraz hasła, które zostało przydzielone przez TPSA. W umowie o SDI jest zawarty Login oraz passełko.

No to edytujemy plik /etc/ppp/pap-secrets i tam podajemy login * hasło Twoje_IP. Powinno to

mniej więcej wygladać tak:

begginer * haslobegginera 217.78.249.122

Po wpisaniu danych należy po podaniu adresu IP (czyli tutaj 217.78.249.122) entera.

Następnie należy edytować plik /etc/ppp/options. W tym pliku umieszcza się parametry wywołania

programu pppd. Dzięki temu nie trzeba będzie każdorazowo wpisywać tych opcji podczas usuchamiania

pppd.

W pliku options wpisujesz (za chwilke wytlumacze co oznaczają poszczególne wpisy):

115200

modem

defaultroute

noauth

lock

crtscts

persist

mru 1500

mtu 1500

user begginer <------------ tutaj zamiast begginer wpisujesz swój login tj. w pap-secrets

lcp-echo-interval 20

lcp-echo-failure 5

No i po ostatnim wpisie znowu enter.

A teraz co oznaczają wpisy:

115200 - szybkość połączenia,

modem - używanie modemu,

defaultroute - ustawianie routingu,

noauth - wyłączenie identyfikacji,

lock - ustawia plik lock dla danego portu,

crtscts - kontrola sprzętowa RTC/CTS,

persist - kiedy nastąpi przerwanie połączenia, pppd wznowi przerwane połączenie,

user login - nazwa użytkownika, która została przydzielona przez TPSA w umowie,

lcp-echo-interval 20 - wykrywa zerwanie połączenia,

lcp-echo-failure - odnawia połączenie w przypadku gdyby SDI się zwiesiło.

Ostatni plik, który należy edytować to resolv.conf. Ścieżka do liku to /etc/resolv.conf

W pliku tym wpisujemy:

search tpnet.pl

nameserver 194.204.159.1

nameserver 194.204.152.34

I tutaj tez po ostatnim nameserwerze należy dać enter.

I zrobione.

Połączenie wywołuje się poleceniem

pppd /dev/ttyS0

jeśli oczywiście modem masz podłączony do portu COM1. Jeśli do innego COMa to poniżej podaje

jakie wartości należy wpisać:

ttyS0 - COM1

ttyS1 - COM2

ttyS2 - COM3

ttyS3 - COM4

Teraz, żeby za każdym razem automatycznie przy starcie Linux automatycznie łączył się z

Internetem wystarczy edytować plik /etc/rc.d/rc.local i tam na samym końcu pliku dodać dwie

linijki:

echo "Starting HIS..."

pppd /dev/ttyS0

jeśli oczywiście masz na innym COMie podpięty modem to musisz zmienić wartość.

Teraz wystarczy albo uruchomić SDI poleceniem pppd /dev/ttyS0, albo zrebootować system i już

Linux jest podpięty do Internetu.

==========

3.4 Serwer DHCP by CZaR|Ny

==========

Dynamic Host Configuration Protocol czyli w skrócie DHCP jest protokołem umożliwiającym

zdalną konfigurację protokołu TCP/IP. Dzięki serwerowi DHCP będzie można przydzielać

automatycznie adresy IP w sieci lokalnej.

Zaraz przedstawie cały skrypt, który działa pod Mandrake 8.2 - tylko trzeba wpisac w

nim odpowiednie wartości, ale o tym zaraz.

A więc przechodząc do rzeczy - edytujemy plik /etc/dhcpd.conf i zabieramy sie za wpisywanie.

Ogólnie rzecz biorąc plik wygląda mniej więcej tak:

option domain-name "Jakas_Nazwa";

default-lease-time 86400;

ddns-update-style none;

max-lease-time 86400;

subnet 192.168.1.0 netmask 255.255.255.0 {

range 192.168.1.2 192.168.1.200;

option subnet-mask 255.255.255.0;

option broadcast-address 192.168.1.255;

option routers 192.168.1.1;

option domain-name-servers 192.168.1.1;

}

Host Twoj_Host {

fixed-address 192.168.1.10;

hardware ethernet 00:00:00:00:00:00;

}

No dobra - teraz sie pewnie zastanawiacie co to wszystko jest? Już tłumacze. Więc:

option domain-name - opcja ta informuje w jakiej domenie pracują komputery w naszej sieci.

Może to być np.: option domain-name "begginer.com"

default-lease-time - jest to okres na jaki zostaje wydzierżawiony adres IP loczony w sekundach.

Jeśli np. jest to dzierżawa na jeden dzień to wpisujesz default-lease-time 86400.

max-lease-time - to jest maksymalny czas dzierżawy adresu IP w sieci lokalnej.

subnet - adres sieci.

netmask - maska sieci.

range <adres startowy IP> <adres końcowy IP> - tutaj definiuje się początkowy i końcowy adres IP jaki

może przydzielać serwer DHCP. W naszym przypadku serwer DHCP przydziela adresy

z puli od 192.168.1.2 do 192.168.1.200.

option subnet-mask - czyli maska jaką musi sobie ustawić komputer kliencki w naszej sieci.

option broadcast-address - jest to adres rozgłoszeniowy sieci.

option routers - adres domyślnej bramy w podsieci, czyli inaczej gateway'a.

option domain-name-servers - w tym miejscu definiuje się adres IP serwerów DNS jakie mają używać

komputery w naszej sieci lokalnej.

W ten oto sposób mamy już skonfigurowaną sieć.

No pewnie myślicie OK, ale co z tym fragmentem??:

}

Host Twoj_Host {

fixed-address 192.168.1.10;

hardware ethernet 00:00:00:00:00:00;

}

W tym miejscu definiujecie wpisy dla konkretnych kart sieciowych.

W tym przypadku dla jednej. Więc tak:

Host - nazwa kompa w sieci któremu przydzielacie konkretny numer IP.

fixed-address - adres który dostanie ten komputer,

hardware ethernet - tutaj wpisujecie adres MAC karty sieciowej kompa, któremu przydzielacie na stałe IP.

Jak się dowiedzieć jaki adres MAC ma karta sieciowa? Otóż w windzie jest coś takiego jak winipcfg.

Uruchamia się go Start-->Uruchom-->winipcfg-->OK. Jak się pojawi okienko to wystarczy włączyć opcje

'Więcej Informacji' i tam już jest podany adres karty sieciowej. W linuxie komenda arp wyświetli wszystkie

karty, które słyszy (ale to z root'a), lub wystarczy komenda ifconfig.

No dobra - a jak to będzie wyglądało np. dla kilku komputerów w sieci?

Wtedy wystarczy tylko zmienić troszkę wpis:

}

Host Twoj_Host {

fixed-address 192.168.1.10;

hardware ethernet 00:00:00:00:00:00;

}

na troche inny:

}

Host ranger {

hardware ethernet 00:00:00:00:00:00;

fixed-address 192.168.1.10;

}

no i tak dalej i tak dalej :]

No dobra a teraz ostatnia sprawa - masz już plik i chcesz żeby wszystko sie ładnie uruchamiało

przy starcie Linucha. No to edytujesz plik /etc/rc.d/rc.local i na samym końcu dopisujesz coś

takiego:

echo "Starting DHCPd server"

dhcpd eth0

i wszystko powinno ruszyć bez większych problemów ;]

==========

3.5 Iptables dla Mandrake 8.2 by CZaR|Ny

==========

No jakby na to nie spojrzeć tego bym nigdy sam nie wymyślił. Ale to co wydaje się z początku trudne

zawsze jest prostsze niż się początkowo wydawało. Myślałem nad tym i myslałem, aż w końcu kolega

poratował mnie linkiem - nie pamiętam już go dokładnie, ale co tam. Wiem, że artykuł o tym jest na

stronie http://www.slackware.com.pl i ta konfiguracja działa także na Mandrake 8.2

To zaczynamy:

Najpierw należy utworzyć plik /etc/rc.d/rc.masq. W tym celu używamy polecenia touch rc.masq i zmieniamy

jego prawa poleceniem chmod +x rc.masq, co pozwoli na wykonanie pliku. Edytujemy pliczek rc.masq pod

edytorkiem np. pico i wpisujemy jego zawartość:

#!/bin/sh

# Uruchomienie przekazywania pakietow

echo "1" > /proc/sys/net/ipv4/ip_forward

# Czyszczenie tablic iptables (NAT i Filtrowanie)

/sbin/iptables -F -t nat

/sbin/iptables -X -t nat

/sbin/iptables -F -t filter

/sbin/iptables -X -t filter

# Odrzucenie i brak zezwolenia na forwardowanie pakietow

/sbin/iptables -t filter -P FORWARD DROP

# Przepuszczanie pakietow z sieci lub przeznaczone dla sieci

/sbin/iptables -t filter -A FORWARD -s 192.168.1.0/255.255.255.0 -d 0/0 -j ACCEPT

/sbin/iptables -t filter -A FORWARD -s 0/0 -d 192.168.1.0/255.255.255.0 -j ACCEPT

# Udostepanianie Internetu przez Maskarade

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.2 -d 0/0 -j MASQUERADE

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.3 -d 0/0 -j MASQUERADE

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.4 -d 0/0 -j MASQUERADE

# Moduly do FTP i IRCa

/sbin/modprobe ip_nat_ftp

/sbin/modprobe ip_nat_irc

I zapisujemy plik rc.masq - juz mamy maskaradke na iptables ;]

I tak:

192.168.1.0 - to adres sieci

255.255.255.0 - maska sieci

Kolejną rzeczą jest utworzenie odwołania do pliku rc.masq w pliku /etc/rc.d/rc.local.

Edytujemy plik rc.local i dopisujemy na samym końcu pliku:

echo "Starting Masquerade..."

if [ -x /etc/rc.d/rc.masq ]; then

/etc/rc.d/rc.masq

fi

Jeśli mamy również zainstalowany i skonfigurowany serwer DHCP i jest on również dopisany

do pliku rc.local to wtedy odwołanie do rc.masq musi być przed regółką uruchamiającą serwer

DHCP - w przeciwnym wypadku będą się sypać same błędy przy każdym starcie Linuksa, a będzie

to spowodowane wcześniejszym uruchomieniem serwera DHCP.

No a teraz wystarczy zrobić reboot systemu albo odpalić plik rc.local i gotowe.

==========

3.6 Konfiguracja serwera WWW pod Mandrake 8.2 by CZaR|Ny

==========

Więc jak już się postawiło serwer na Linuksie i jest już podłączony do netu, to czasami ma się

ochote na zrobienie własnej strony i wrzucenie jej na własny serwer. Jednak dystrybucja Mandrake

8.2 ma to do siebie, że ma troche inne nazwy plików niż w pozostałych dystrybucjach i czasami

trzeba się troche namęczyć, żeby te pliki znaleźć. Więc teraz opisze krok po kroku co i jak trzeba

zrobić, żeby mieć własny serwer WWW.

Zaczynamy....

Logujemy się na roota i zaczynamy.

Więc na samym początku należy zainstalować serwer Apache. W Mandarynce jest to plik

apache-1.3.23-4mdk.i586.rpm. Instalujemy go poleceniem rpm -i apache-1.3.23-4mdk.i586.rpm i mamy już

serwer Apache zainstalowany. Potem możemy doinstalować moduły obsługujące PHP, MySQL, XML itd :] - ale

to już według własnego uznania.

Co robimy dalej? Szukamy pliku commonhttpd.conf i edytujemy go - zapisujemy gdzieś jego oryginał, żeby

w razie jakiegoś błędu nie było problemów z uruchomieniem serwera WWW.

Na samym początku nadajemy prawa dla pliku /etc/rc.d/init.d/httpd

chmod 755 /etc/rc.d/init.d/httpd

Następnie wykonujemy polecenie:

/etc/rc.d/init.d/httpd start

i w ten oto sposób uruchamiamy serwer Apache.

Potem jeśli trzeba to konfigurujemy automatyczne uruchamianie serwera Apache poleceniem:

ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc3.d/S85httpd

i konfigurujemy automatyczne zatrzymywanie serwera Apache:

-s /etc/rc.d/init.d/httpd /etc/rc.d/rc0.d/K15httpd

Jeśli te pliki są już w tych katalogach (czyli rc3.d i rc0.d) to ten krok można pominąć.

Kolejną rzeczą jest utworzenie konta administratora serwera www:

useradd -d /usr/local/www -p '********' -g users www

chown -R www /usr/local/www

gdzie -p '********' to własne hasło, które musisz ustawić, dla administratora serwera www.

No dobra - teraz sie można zabrać za kolejną część konfiguracji.

Edytujemy w końcu ten nieszczęsny plik commonhttpd.conf i zabieramy się za wpisywanie pewnych

rzeczy, które się przydadzą przy tworzeniu katalogów udostępnijących strony internetowe w necie

albo w sieci lokalnej.

No to otwieramy plik commonhttpd.conf w jakimś edytorze i modyfikujemy :]

Zaraz pod linią Alias /icons/ "/usr/local/www/icons" wpisujemy

Alias /Apache/ "/usr/local/www/htdocs/manual/"

zapisujemy plik commonhttpd.conf i restartujemy serwer Apache poleceniem:

/etc/rc.d/init.d/httpd restart

Teraz zajmiemy się dodawaniem nowego pliku indeksu. Edytujemy znowu plik commonhttpd.conf i

szukamy w nim linii DirectoryIndex. Powinna wyglądać tak:

DirectoryIndex index.html index.htm

i możemy tam dopisać jakie pliki indeksu ma obsługiwać nasz serwer www jwszcze, np. chcemy,

żeby obsługiwał pliki index.cgi, index.php3 i index.php, wtedy dopisujemy je do DirectoryIndex

i po wpisaniu ta linia w pliku commonhttpd.conf powinna wyglądać tak:

DirectoryIndex index.html index.htm index.cgi index.php3 index.php

Zapisz zmiany w pliku i znowu restart serwera WWW

/etc/rc.d/init.d/httpd restart

Kolejnym krokiem jest zmiana nazwy katalogu zawierającego strony użytkowników. Znowu trzeba

edytować plik commonhttpd.conf i znalezc linie UserDir i wpisanie do niej nazwy katalogu np.

public_html

UserDir public_html

Zapisujesz zmiany i znowu restartujesz serwer Apache poleceniem:

/etc/rc.d/init.d/httpd restart

No i dochodzimy prawie do końca.

Teraz tworzymy strony www poszczególnych uzytkowników Linuksa.

Zmieniamy uprawnienia dla katalogu osobistego np.:

chmod 755 /home/jakis_user

Gdzie 'jakis_user' to nazwa twojego konta domowego. Czyli np. jeśli masz konto w katalogu home o

nazwie dajmy na to marek to robimy coś takiego:

chmod 755 /home/marek

Wylogowujemy się z konta roota i logujemy się na własne konto np. marek i teraz tworzymy na swoim

koncie katalog public_html:

mkdir public_html

No i już mamy prawie wszystko :]

Ostatni krok to zalogowanie się znowu na konto root i edycja pliku commonhttpd.conf w celu

dopisania liniii przekierywujących określone adresy URL.

Szukamy linii Redirect i wpisujemy tam (tutaj dla konta marek):

Redirect /marek/ http://www.twoj_host.com.pl/~marek/

gdzie twoj_host to albo twoj numer IP albo domena jaką ustaliłeś przy konfiguracji serwera.

Na sam koniec pozostaje jeszcze tylko restart serwera Apache po raz kolejny:

/etc/rc.d/init.d/httpd restart

I to już koniec. Już jest zainstalowany serwer Apache. Możesz już wrzucać swoje strony WWW na serwer

i pokazywać je światu.

Widać, że troche zakręcony jest Mandrake, ale nie ma to jak Linuks ;)

Czyli jednym słowem mówiąc - No Windows, No Gates, Apache Inside :]

---------------------------------------------------------------------------------------------

---------------------------

4. Sieci

---------------------------

==========

4.1 Anonimowość w sieci by krasztest

==========

+++++

4.1.1 Wstęp

+++++

Ten dokument jak zreszta caly projekt jest skierowany do osob poczatkujacych, ktore chca

zapoznac sie z tematem internetu i hacku. Ten dokument traktuje o rozleglym temacie anonimowosci w

internecie.

+++++

4.1.2 Proxy

+++++

a) Anonimowe Proxy

Serwery proxy zwane takze w3cache sa to serwery dzieki ktorym nasza przegladarka nie musi laczyc sie z

bezposrednio ze strona, tylko laczy sie z serwerem proxy i stamtad sciaga odpowiednie dane. Oczywiscie

przedtem ktos musi laczyc sie z dana strona przez dane proxy. Proxy moze byc postrzegane jak pamiec cache

dla komputera. Tam znajduja sie najbardziej potrzebne dane i wlasnie stamtad sa one pobierane. Pamiec cache

jest szybsza od pamieci operacyjnej. I wlasnie tak ma pracowac serwer proxy. Ma przyspieszac pobieranie

danych z sieci. Polaczenie wyglada tak:

*********** ******* ************

*Nasz komp* ----------> *proxy* -----------> *strona www*

*********** ******* ************

Nalezy pamietac ze nie zawsze serwer proxy przyspieszy laczenie sie z dana witryna. Jesli nikt wczesniej sie z

nia nie laczyl bedzie to trwalo dluze, bo przeciez "przechodzimy" przez dodatkowy serwer. Jesli "kopia" strony

znajduje sie na serwerze proxy jest ona z tamtad przesylana wprost do naszego komputera.

Serwery proxy maja jeszcze jedna wlasciwosc.Dzieki nim mozemy zachowac anonimowosc w sieci. Laczac sie przez

serwer proxy ze strona internetowa jestemy postrzegani przez ta strone nie jako My lecz jako serwer proxy.

Jak to wyglada?

************* **************

*Nasz komp * *Proxy * ************

*IP: * ----------> *IP: * ----------> *Strona www*

*217.111.111* *195.111.111 * ************

************* **************

Proxy "maskuje" nasz adres IP dzieki temu strona www nie "postrzega" nas (217.111.111) lecz proxy (195.111.111).

Jest jedno ale...

b) Jak sprawdzic anonimowosc Proxy?

Nie kazdy sewrer proxy "maskuje" nasz IP (czyli jest anonimowy). Niektore serwery przepuszczaja nasz IP. Jak

znalesc anonimowe proxy? Istnieje wiele stron ktore udostepniaja listy serwerow proxy. Anonimowych i nie

anonimowych ( na koncu rozdzialu podam linki ). Nalezy jednak pamietac ze mimo iz twierdza oni ze dane proxy

jest anonimowe, nalezy zawsze to sprawdzic. Jak? Istnieje kilka sposobow. Mozna wchodzic na strony na ktorych

pokazany jest nasze IP i host. To najprostrza metoda. Istnieje takze strona http://www.all-nettools.com/tools1.htm

( na dole jest button "Proxy Test" ) dzieki ktorej mozna to sprawdzic. Jesli uzyjemy anonimowego proxy to

skrypt zwroci nam IP tylko serwera proxy. Kiedy wsrod danych znajdziecie swoje wlasne IP oznacza to ze uzyty

serwer nie jest anonimowy.

Jak ustawic laczenie sie przez proxy?

Kazda przegladarka internetowa ma taka opcje (chyba). W Operze wybieramy menu Plik->Ustawienia->Siec->serwer proxy.

Mozna ustawic takze dla innych polaczen (FTP, HTTPS).

W IE : Narzedzia->opcje internetowe->polaczenia->ustawienia sieci LAN->uzyj serwera proxy.

Istnieje jeszcze serwis http://anonimizer.com/ ktory umozliwia anonimowe polaczenie, lecz jest to usluga platna.

c) Skad wytrzasnac Proxy?

Linki do baz z serwerami proxy:

http://www.multiproxy.org/env_check.htm

http://www.proxy.prv.pl/

http://soldierproxy.s5.com/CurrentList.htm

http://www.novelsoft.com/dark/proxy/index.html

+++++

4.1.3 Konta shellowe

+++++

Konto shellowe sa to udostepnione zasoby innego komputera w sieci.Komputera postawionego na *nixie (Linux,Unix)

co laczy sie ze znajomoscia podstaw tych systemow operacyjnych. Dzieki temu laczac sie Lynxem (przegladarka

internetowa) jestesmy postrzegani jako serwer na ktorym mamy konto shellowe (mamy IP serwera a nie nasze).

Oczywiscie konto shellowe sluzy takze do mnostwa innych celow ( np. przechowywanie danych, stawiania botow

ircowych ) a nie tylko do surfowania po sieci. Jak znalesc takie konto?

Wpisz np. w googlach "konto shell" a znajdziesz. Wiekszosc ( o ile nie wszystkie ) sa to konta platne wiec

nalezy sie zastanowic gdzie i jak.

+++++

4.1.4 Java Script

+++++

Dbajac o nasze bezpieczenstwo proponuje wylaczyc w przegladarce internetowej obsluge Java Script. Niektore

skrypty moga byc bardzo niemile i np. zainstalowac na naszym koputerze niepotrzebne programy, lub wyciagnac

od nas jakies pliki. Oczywiscie nie wszystkie skrypty sa takie. Niektore strony nie beda sie otwierac dopoki

nie bedziesz mial wlaczonej obslugi Java Script, wiec jesli masz zamiar wejsc na jakas nieznana i szemrana

strone - po prostu wczesnej wylacz obsluge Java Script.

+++++

4.1.5 Cookies

+++++

Cookies ( czyli ciasteczka ) sa to informacje umieszczone na naszym dysku twardym zamieszczone przez serwer na

ktorym przegladalismy strone internetowa. Zawarte sa tam dane takie jak skad przywedrowalismy na dana strone,

jakie podstrony odwiedzilismy. Cookies umozliwiaja takze dostowsowanie strony do upodoban usera. Jesli uzytkownik

zawsze wchodzil na np. do dzialu download to przy kolejnym otwarciu strony serwer autoamtycznie przeniesie nas

do tego dzialu.

Niektorzy nie lubia aby zbierac o nim informacje. Mozna wiec wylaczyc przyjmowanie cookies. Zabezpieczy nas to

przede wszystkim od duzej ilosci czasami niechcianych plikow na dysku twardym. Dobrym wyjsciem jest ustawienie

akceptacji cookies dla danych serwisow. Nasza przegladarka bedzie akceptowala ciasteczka tylko od nich. Nalezy

pamietac ze niektore serwisy oparte sa na cookies, a co za tym idzie wylaczenie ich obslugi spowoduje niemoznosc

zaladowania strony lub wystapienie bledow.

+++++

4.1.6 Fake mail i mailbombing

+++++

Fake mail jest to list elektroniczny ktory nie ujawnia prawdziwego adresu nadawcy. Co potrzebuje?

Klienta telnetu i adresu serwera udostepniajacego mozliwosc wysylania maili. Chyba najlepszym klientem telnetu

jest program o nazwie CRT, wiec polecam go.

Nalezy polaczyc sie telnetem na port 25 serwera.

Serwer zareguje np :

220 adres.serwera.smtp ESMTP

Serwer czasami poda tez wersje programu.

piszemy :

helo cos_tam - przywitamy sie z serwerem, a on przywita si z nami. To co tu wpiszemy pojawi sie pozniej w naglowku poczty

mail from : ja@ty.pl - fakeowy adres spod ktorego wysylamy maila, moze byc dowolny

rcpt to : ktos@gdzies.cos - adres pod ktory wysylamy maila

data - zaczynamy pisac tresc maila

subject : jakis temat - temat listu.

tresc listu

np.:

Date: [tu data z godziną wedlug np. wzoru: 30 Mar 02 22:22:22]

From: [jeszcze raz adres nadawcy]

To: [analogicznie odbiorcy]

Subject: [wiadomo chyba;-).......]

[tresc wiadomosci np. "Cos tam cos tam";]]

. [piszemy kropke i wciskamy enter]

chcac zakonczyc wpisywanie tresci listu musimy napisac kropke (".") w oddzielnej lini.

Serwer poinformuje nas o skolejkowaniu maila do wyslania.

Pomimo tego ze ofiara otrzyma list od np: OsamaBinLadem@afganistan.org nie oznacza to od razu ze list jest

anonimowy. Nalezy wtedy zajrzec do naglowka i tam najczesciej w lini "Recived from:" bedzie sie znajdowal host

i adres IP wysylajacego. Niektore serwery nie przepuszcaja danych o nadawcy, ale trzeba takich poszukac. Sa to

najczesciej starsze wersje sendmaila. Niektore serwisy umozliwiaja wyslanie takich anonimowych maili. Odplatnie lub nie.

Nalezy tez pamietac ze niektore serwery SMTP nie wysla maila jesli nie bedzie pasowal im adres nadawcy lub odbiorcy.

Najczesciej chodzi o adres nadawcy i niektore serwery uniemozliwiaja wyslanie maila z innego adresu niz ich wlasny

( np: serwer smtp.costam.pl bedzie umozliwial wyslanie maila tylko z adresu gienek@costam.pl). Jesli trafimy na taki

serwer a nie zalezy nam na bardzo urozmaiconym adresie nadawcy wystarczy wpisac cokolwiek przed znakiem

malpy ( aaa@costam.pl, qwewqr@costam.pl)

Mailbombing jest to po prostu zalanie skrzynki internetowej olbrzymia iloscia maili. Jesli ofiara laczy sie poprzez

modem moze to zablokowac taka skrzynke bo sciaganie wszystkich maili potrwa bardzo dlugo. Jesli ktos ma stale

lacze ( np:SDI ) to nie bedzie to trwalo tak dlugo. Istnieje bardzo duzo programow sluzacych do wysylania takich

bomb np:Anubis. Wystarczy tylko wpisac kilka informacji i juz. Wazna rzecza jest to ze anonimowe bombery ( czy

tez e-mail sendery) same z siebie nie sa anonimowe. W opcjach umozliwiajace wyslanie fake maila oprocz danych

nadawcy i odbiorcy, tematu i tresci listu jest tez opcja uzycia danego serwera SMTP. Czy bedzie on anonimowy

zalezy od tego czy znajdziemy takowego.

+++++

4.1.7 Bezpieczenstwo danych osobowych

+++++

Wedlug mnie bardzo waznym sposobem zachowania anonimowosci w internecie jest zasada nie podawania prawdziwych

danych osobowych. Wymagane jest to min. przy zakladaniu kont poczty elektronicznej. Oczywiscie firma zobowiazuje

sie do nieudostepniania innym twoich danych, ale zawsze istnieje mozliwosc np.ich wykradzenia. Podczas procesu

tworzenia konta po prostu zmyslaj wszystkie dane. Nikt nigdy nie sprawdzi ich autentycznosci!!! Nie podawaj prawdziwego

adresu, nr telefonu, imienia i nazwiska.

==========

4.2 Obliczanie adresu sieci na podstawie adresu IP by CZaR|Ny

==========

Kiedy szukasz adresu sieci danego komputera a znasz jedynie jego adres IP oraz maskę

podsieci, zastanawiasz się co zrobić i nie wiesz jak to zrobić to jest na to sposób.

Dajmy na to, że adres IP sieci wynosi 205.0.125.81 a maska podsieci wynosi 255.255.255.224.

Aby obliczyć adres sieci danego komputera wystarczy wypisać ostatnie oktety adresu IP oraz

maski podsieci, a potem wystarczy dokonać logicznej operacji AND na każdej parze ich bitów.

No to zabieramy się za liczenie:

Najpierw liczymy wartość dla IP:

(.81)

Bity: 0 1 0 1 0 0 0 1

Wartość: 128 64 32 16 8 4 2 1

---------------------------------------------

64 +16 +1 = 81

~~

A potem zabieramy się za liczenie za liczenie wartości dla maski:

(.224)

Bity: 1 1 1 0 0 0 0 0

Wartość: 128 64 32 16 8 4 2 1

---------------------------------------------

128 +64 +32 = 224

~~~

Zgadza się? Pewnie, że sie zgadza...

Teraz zabieramy się za ostatnią operację czyli dokonujemy logicznej operacji AND:

(81 AND 224)

Bity(81): 0 1 0 1 0 0 0 1

Bity(224): 1 1 1 0 0 0 0 0

Bity(81 AND 224): 0 1 0 0 0 0 0 0

Wartość: 128 64 32 16 8 4 2 1

----------------------------------------------

64 = 64

~~

No i z tego widać, że adres sieci tego komputera, którego szukaliśmy wynosi 205.0.125.64

No dobra a teraz jakiś inny przykład, żeby sobie jeszcze udoskonalić liczenie.

IP sieci: 217.96.245.67

Maska sieci: 255.255.255.163

Zaczynamy liczyć:

(.67)

Bity: 0 1 0 0 0 0 1 1

Wartość: 128 64 32 16 8 4 2 1

-----------------------------------------------

64 +2 +1 = 67

(.163)

Bity: 1 0 1 0 0 0 1 1

Wartość: 128 64 32 16 8 4 2 1

-----------------------------------------------

128 +32 +2 +1 = 163

(67 AND 163)

Bity(67): 0 1 0 0 0 0 1 1

Bity(163): 1 0 1 0 0 0 1 1

Bity(67 AND 163): 0 0 0 0 0 0 1 1

Wartość: 128 64 32 16 8 4 2 1

-------------------------------------------

2 +1 = 3

I w ten oto sposób wiesz już, że adres wynosi 217.96.245.3

Myśle, że z innymi obliczeniami dacie sobie już rade, a jeśli dalej nie wiecie jak się to

liczy to prześledźcie jeszcze raz oba przykłady a na pewno zrozumiecie - to WCALE NIE JEST

TRUDNE!!!

==========

4.3 Sniffing by krasztest

==========

Sniffig jest to metoda podsluchiwania (przechwytywania) danych w sieci lokalnych. Kazdy komputer w sieci lokalnej musi

miec "cos" co polaczy go z ta siecia. Tym czyms jest karta sieciowa. W sieciach opartych o huby, sniffing jest bardzo

prosty. Huby dzialaja jak wzmacniacze. Odbieraja informacje, wzmacniaja je i rozsylaja je po wszystkich swoich portach,

niewiedzac do kogo jest adresowana ramka. Karta sieciowa sprawdza naglowek otrzymanej ramki i jesli byla ona adresowana

do niej, przyjmuje ja, jesli nie to po prostu ja ignoruje. Sniffery przestawiaja tryb pracy karty sieciowej w tryb

mieszany, co oznacza ze taka karta sieciowa bedzie przyjowala wszystkie ramki, takze te do niej nie adresowane. Przyjmijmy

ze ktos logowal sie na swoje konto pocztowe. Wiadome jest ze musi on wyslac swoj login i haslo. Z komputera te dane trafia

do huba, ktory rozesle je po calej sieci. Te dane dotra takze do naszego komputera i jesli dziala u nas sniffer przejmiemy je.

Siec moze byc takze oparta o switche. Switch jest bardziej inteligentnym uzadzeniem i juz nie rozsyla bezmyslnie jak hub

ramek po calej sieci. Dokonuje on analizy naglowka ramki (szuka adresu karty sieciowej odbiorcy). Switch posiada w swojej

pamieci tablice w ktorej zawarte sa adresy kart sieciowych i nr portow do ktorych sa dane karty podlaczone. Informacja w

rezultacie wysylana jest tylko do okreslonego komputera. Switch moze jednoczesnie dokonywac transmisji miedzy kilkoma

komputerami twozac w ten sposob kilka kanalow informacyjnych.

Czy mozna sniffowac w sieciach opartych na switchach? Mozna ale jest to o wiele bardziej trudne niz w sieciach opartych

na hubach. Mozna tak przeprogramowac tablice switcha, ze ramka skierowana do danego komputera zostanie wyslana takze na

nasz komputer. Mozna zasypac switcha falszywymi adresami MAC co w rezultacie doprowadzi do zawieszenia sie switcha i

przejscia w tryb pracy huba.

Sniffery to nie tylko programy do podsluchiwania. Sluza one przede wszystkim do analizowania ruchu w sieci, jako nazedzie

administracyjne. Podsluchujac duza siec moze sie zdarzyc ze przechwycimy duza ilosc danych, ktore sa nam niepotrzebne i

tylko zasmieca nam dysk. Nalezy wtedy nalozyc filtr. Sniffer odfiltruje informacje nam niepotrzebne.

Sniffera mozna takze uzyc na swoim wlasnym komputerze do podpatrzenia jakie dane sa od nas wysylane. Czasem zdaza sie ze

uzywany programow Peer-2-Peer (np. Kaaza) i nie wiemy czy programy te czasem nie zbieraja jakis danych o nas. Obserwujemy

wowczas to co wychodzi z portow naszego komputera. Oczywiscie zeby cos znalesc nalezy wiedziec czego sie szuka.

Jak wykryc sniffera w sieci?

Po pierwsze mozemy zainstalowac antysniffera, ktory bedzie sprawdzal tryby kart sieciowych. Jesli znajdzie taka w trybie

mieszanym, mozna podejzewac ze dzaiala tam sniffer. Mozna tez analizowac ruch w sieci. Mozna pingowac komputer podejrzany

o podsluchiwanie, wtedy czas odpowiedzi takiego komputera bedzie dluzszy niz w przypadku nie-sniffujacego komputera.

Jak ustrzec sie sniffingu?

Najwazniejsze wydaje sie byc szyfrowanie danych. Nie ustrzeze nas to przed przechwyceniem danych, ale skutecznie utrudni to

odczytanie np. hasel. Nalezy takze kozystac z szyfrowanych polaczen (SSH,SSL,PGP,HTTPS), mozna takze zastosowac tunelowanie.

po wiecej informacji : google.com

==========

4.4 Warchalking i Wireless LAN by krasztest

==========

Warchalking zalewa swiat. Nowa "technika" staje sie coraz bardziej popularna, tak jak bezprzewodowe sieci lokalne. Co

to jest Warchalking? Warchalking to po prostu rysunki kreda na scianach pokazujace min. jak daleko od wezla sie znajdujemy,

jaka jest jego przepustowosc (bandwidth), nazwa sieci. Co daje Warchalking? Daje mozliwosc darmowego dostepu do internetu

poprzez slabo zabezpieczone sieci. Wystarczy laptop, odpowiednia karta sieciowa i NetStumbler (program przeczesujacy

czestotliwosci w poszukiwaniu fal sieci, po namierzeniu sieci zwraca adres MAC Acces Pointow, nazwe sieci, SSID,czy uzyto

szyfrowania WEP i wiele innych ciekawych danych) i mozna zaczynac.

Slowo Warchalking ewoluowalo z WarDialing i przeksztalcilo sie w Wardriving czyli jezdzenie samochodem po miescie z

odpalonym Stumblerem i szukanie WLAN-ow. W uzyciu jest takze inne slowo opisujace podobna czynnosc lecz odbywajaca sie

pieszo :) Obecnie trwaja prace nad ujednoliceniem znakow uzywanych do mazania kreda po scianach ("Walchalkerzy" pisza

kreda, mimo iz napis kreda zniknie po pierwszym deszczu, a nie np. sprayem bo to juz podchodzi pod wandalizm i jest karalne.

W krajach na zachodzie writerzy sa scigani z o wiele wieksza zaciekloscia przez prawo niz u nas. To ma podobno zmusic do

czestych update-ow znanych wezlow). Niestety w Polsce ta metoda nie jest tak bardzo popularna jak w innych krajach,

szczegolnie na zachodzie Europy i USA.

Czestym bledem umozliwiajacym laczenie sie z WLAN-ami jest pozostawienie przez adminow dostepu do takiej sieci bez potrzeby

logowania.

IEEE 802.11b to najbardziej rozpowszechniony protokol sieci bezprzewodowych. Standard 802.11b jest zdefiniowany w pasmie

2.4GH. Sieci bezprzewodowe wykorzystuja dwie topologie : gwizdy i kraty. Topologia gwiazdy wykozystuje do komunikacji

Acces Poit (punkt dostepu) czyli stacje bazowa. Moze byc ona takze mostem do przewodowej czesci sieci. W topologii kraty

brak jest centralnego Acces Pointa, kazdy wezel moze swobodnie komunikowac sie z sasiednim wezlem.

Innym rozwiazaniem jest specyfikacja Bluetooth, dajaca mozliwosc przesylania danych na odleglosc 10m i 100m z

przepustowoscia 1Mbps w pasmie 2.4 GH. Dzieki niemu weszlo nowe okreslenie sieci komputerowej - PAN (Personal Area Network).

Jest to idealne rozwiazanie dla malych firm gdzie odleglosc nie przekracza 10m.

Siec bezprzewodowa moze skladac sie z dwoch komputerow jak rowniez z kilkudziesieciu stacji i wielu Acces Pointow. Komputer

musi posiadac odpowiednia karte sieciowa, dzieki ktorej poprzez Acces Pointy bedzie przesylal dane. Siec bezprzewodowa moze

istniec sama jak rowniez moze byc czescia (podsiecia) wiekszego LAN-a.

Sygnal sieci bezprzewodowych rozchodzi sie w powietrzu, nie tylko w okreslonym zasiegu, ale takze duzo dalej, lecz nie

jest on juz tak mocny aby karty sieciowe mogly go wykryc. Mozna wtedy uzyc specjalnych duzych anten, ktore wylapia ten

sygnal.

W standardzie zaimplementowano protokol WEP (Wired Equivalency Protocol) aby chronic prywatnosc sieci bezprzewodowych

(WLAN jest o wiele bardziej narazony na podsluch niz normalny przewodowy LAN z tego powodu iz nie istnieje potrzebna

fizycznego podlaczenia do sieci). WEP mam za zadanie zapobiec nieautoryzowanemu dostepowi do sieci.

Administratorzy WLAN-ow zaczynaja stosowac techniki bezpieczenstwa znane z przewodowych sieci. Dobrym sposobem jest

stworzenie honey pota, ktory ma za zadanie zwabic potencjalnego napastnika. Komputer taki ma sprawiac wrazenie waznego

serwera z waznymi danymi a przy okazji troche slabiej zabezpieczonego, jednoczesnie z zainstalowanym systemem monitoringu.

System analizuje ruchy hakera i ma go caly czas na oku. Podczas gdy ten buszuje na serwerze, loguje sie jego dzialania i

tworzy jego profil. Honey pot moze byc laptopem bedacym w zasiegu WLANa.

==========

4.5 WAN ROUTING by Remarks

==========

Jak sama nazwa wskazuje document ten nie jest szczegółowym opisem zagadnienia routingu. Jego celem jest, owszem,

dostarczenie pewnej wiedzy ale nie bedzie ona wiedzą specjalistyczną, wiec nie dziwcie sie jeżeli niektóre zagadnienia

ze względu na pewne ograniczenia (czasowe i objętosciowe) bedą podane w sposób uproszczony, łopatologiczny :P

Jednoczesnie zakładam iż czytelnik posiada pewna wiedzę (wie mniej więcej co to jest TCP/IP,model OSI etc) i ma

minimum IQ 110 :P

PS: Prosze o wyrozumiałość ...to mój pierwszy faq

A teraz konkrety...........

ROUTER w LANie

1.LAN, cechy charakterystyczne sieci lokalnych(rozważania teoretyczne);

2.Segmentacja

1.

Chyba kazdy z nas potkał się z LAN (Local Area Network). Jest to dosłownie sieć o zasięgu lokalnym. Do zapewnienia

możliwości w nich wymiany informacji nie są potrzebne routery, gdyż kazdy host ma bezposredni dostep do tego samego

medium transmisyjnego(kabel koncentryczny, skrętka,światłowód) co obiekt docelowy. Poza tym takie sieci mają

z racji lokalnego zasięgu, jednolitą zazwyczaj budowe fizyczną (rozwiązania, sposób pracy i paramentry elektryczne)

oraz topologie (magistrali, pierscienia, gwiazdy).Nie potrzebne są więc tam żadne urządzenia aktywnie pośredniczące w

wymiane danych, z wyjatkiem tych, które pozwalają retransmitowac(wzmacniać) sygnały elektrycznie i go nie

zmieniaja(huby, switche). Mowiąc uczenie LAN jest narzedziem do komunikacji, ktore działa na wastwie fizycznej i

łącza modelu OSI, zapewniając dwie krytyczne 'usługi'- dostępu do nośnika (to że mozesz fizycznie się podpiąć) oraz

zdolnosć do zaadresowania(adresy MAC 48-bitowe) i przesyłanian ramek(funkcjonalnie jest to warstwa łącza - link leyer)

danych do innych lokalnie podłączonych maszyn. Lokalnośc zasięgu należy wiązać z fizycznymi mozliwosciami transmisji

i jej ograniczeniami konstrukcyjnymi (topologia sieci tez wpływa na wydajność sieci, liczba hostów) oraz zastosowaniem

jednolitej technologii z którą musi być zgodny sprzęt użytownika.

To co wyróżnia LAN od WAN (sieci rozległych, o których wkrótce powiem) to posiadanie tzw. domeny dostepu do nośnika.

Słowo domena ma tu znaczenie zblizone do "zasobu"(maksymalnej przepustowości dostępnej w sieci). Domena jest tu

"obszarem" w sensie sieci z ktorego możemy uzyskać dostep(fizyczny) do "uslug" (tu transmisji danych) gwarantowanych

przez LAN. Ow dostęp jest różnie ograniczany aby moc zapewnić korzystanie z możliwości łączności przez jak największą

liczbe hostów jednoczesnie.

W sieciach na bazie standardu Ethernet ma to charakter rywalizacji (domena rywalizacji). W sieci takiej dsotep

opiera się na wspołzawodnictwie (dość chaotycznym) o mozliwośc transmisji w danej chwili danych. Każde urządzenie

podłączone do domeny rywalizacji moze rozpoczać transmisje dopiero w momencie wykrycia , ze aktualnie żaden inny ruch

nie odbywa się w nosniku (fizycznym). W rzeczywistości, poniewaz transmisje nie sa natychmiastowe, cisza ze strony

LAN może oznaczać,ze urzadzenia w dalszym ciagu moga emitowac sygnały ale transmisja nie dotrła do nasluchujacego hosta.

W takim wypadku rozpoczęcie nowej transmisji spowoduje elektryczne nałozenie sie impulsów i powstanie przekłamań,

ponieważ w każdej chwili wszystkie urządzenia w sieci maja elektryczny dostęp do medium (i wszystkie przechwytuja

nawet te ramki, które nie sa bezposrednio do nich adresowane!).

Określa się to mianem domeny kolizji czyli obszaru sieciowego w której możliwe jest zakłucenie transmisji poszczególnych

hostów przez siebie na wzajem. Dlatego też wazne jest aby sieci nie składały się ze zbyt duzej ilosci kompów walczacych

o łacze( norma IEEE to 1024 hosty) oraz aby odległosci skrajnych konców sieci były na tyle blisko by mozna bylo wykryc

kolizje(ok 200-300 w zalezności od medium i uzywanego standardu ethernet. Wiecej info na ten temat: www.net.pagina.pl).

Oczywiście istnieją tez inne metody sterowania dostepem do nośnika np. przesyłanie znacznika jak w pierścieniu FDDI

(światłowód) i Token Ring ale nie będe tu ich teraz opisywał gdyż nie jest to celem tego faqu a wymienione technologie

zadko uzywane (FDDI zazwyczaj jest wykorzystywane do konstruowania łączy miedzysieciowych MAN,łączenia switchy w duzych

lanach, zas token ring to w zasadzie juz stary grzmot i nadaje się do muzeum :P ).

Kolejny waznym zagadnieniem jest domena rozgłaszania MAC. W "skład" owej domeny wchodzą wszystkie urządzenia, które w

wyniku rozgłoszenia jednej maszyny do wszystkich pozostałych (transmisja pod adres broadcast FF:FF:FF:FF:FF) są w stanie

bezpośrednio odebrac nadawane dane bez wykorzystania protokolow warstw wyższych.....

2. Segmentacja

....Zawsze mozna rozszerzyc (lub modelowac) domene podłączając kolejny segment LAN np. poprzez hub/switch lub most

(brigde) czy tez wykorzystanie technologii VLAN. Jednak wymienione przeze mnie rozwiazania róznia sie.

O ile hub tworzy z dwóch domen kolizji jedną, o tyle switch(w takiej sytuacji pełni funkcje brigde'a) zachowuje

ich rozdzial pozytywnie wpływajac na wydajnosc sieci( mniej kolizji = mniejsze opóźnienia, szybszy transfer).Tak czy

siak otrzymujemy jedną domene MAC.....i własnie na tym polega segmentacja. Nalezy ponadto zauważyć że jesli do switcha

podłączymy same hosty końcowe (a nie segment lan np. na hubie) to w zasadzie w takiej sieci nie istnieje domena kolizji.

A to dlatego iż switch przypisuje adresy MAC komputerów do portów fizycznych do których podłączone sa poszczególne

kompy.Tak więc pakiety skierowane do konkretnego kompa nie sa rozgłaszane w całej sieci (script kiddie ze sniferem

nic tu nie zdziała :P ).

BRIDGE.

...czyli most jest sprzętowym (lub softwarowym - choc z takim się jeszcze nie spotkałem) urządzeniem, które dziala na

warstwie łącza i fizycznej i segmentuje domene dostepu do nośnika a jednocześnie scalajac domeny rozgłoszenia. Wszystkie

mosty trzymają tablice (agregują ze sobą port(y) fizyczny i adres(y) MAC).

Jak działa wiec mostkowanie?

Gdzy most otrzyma pakiet(z nieswitchowanej sieci) sprawdza w tablicy czy pakiet ten jest przeznaczony do innej sieci

którą bridge łączy czy też docelowy komp znajduje sie w tym samym LANie z którego przyszedła ramka? Jeśli dojdzie do

2 sytuacji to nie podejmuje żadnych działań gdyż na pewno juz go odebrał adresat. Jesli zaś ramka jest przeznaczona do

innej sieci przekazuje ją.

Tak działa most przeźroczysty (transparent) i jest on wbudowany w wiele switchy i hubów (obsługujących rózne topologie

- nie mylić z rodzajami LAN !!!) i routerów.

TRANSLATING BRIDGE.

...czyli most tłumaczący, pozwala na łączenie routerów o róznych topologiach i architekturach(np. token ring, ethernet,

FDDI) uzupełniając funkcje mostu przeźroczystego mozliwościa konwersji ramek i sygnału elektrycznego. Jednak te

udogodnienie moze być stosowane tylko dla architektur o tych samych długościach adresu i zgodnych z zaleceniami

IEEE na adresowanie MAC.

SPEED-BUFFERING BRIGDE.

...czyli most z buforowaniem prędkości łączy sieci o podobnej architekturze ale róznej prędkości transmisji.

SWITCH(przełącznik)

to urządzenie wieloportowe w przeciwieństwie do bridge'a, często integrujace w sobie jego funkcje(np. funkcje translacji).

Tak jak mosty "uczy się" adresów MAC(przypisuje je do port(ów)) i tworzy czasowe logiczne scieżki dla połączeń z ich

własną specyficzna szybkoscia trasnmisji. Innymi słowy jesli do switcha np. 5 kompów z kartami 10Mb/s to nie współdziela

oni ze sobą tego pasma (10/5 = 2 Mb/s) lecz każdy z nich ma do dyspozycji pełne pasmo 10MB (przez switch przepływ wtedy

5*10Mb/s)

HUB(koncentrator)

prosty "łącznik" zestawiający jedną domene dostepu i MAC. W takiej stworzonej domenie wszystkie kompy dzielą sie pasmem.

---------------------------------------------------------------------------------------------

---------------------------

5. Systemy Operacyjne

---------------------------

==========

5.1 Systemy Operacyjne by krasztest

==========

+++++

5.1.1 Wstep

+++++

Nie bedzie tu opisany zaden system , lecz tylko nakresle z jakich czesci skladaja sie systemy operacyjne i jak wyglada ich

budowa. Nie bedzie to wielka rozprawa na ten temat bo przeciez mozna by kilka ksiazek napisac, postaram sie zawrzec kilka

najwazniejszych informacji.

+++++

5.1.2 Nizszy poziom zarzadzania procesorem (procesami)

+++++

W tej warstwie procesom przydziela sie procesor lub procesory, a kazdy z procesow ma wlasna przestrzen adresowa (proces

to - w skrocie - uruchominy program). Procesy moga dzielic sie na watki, ktore dzialaja na wspolnej przestrzeni adresowej.

Im takze przydziela sie procesor. Na nizszym poziomie zarzadzania procesorem nastepuje takze synchronizacja procesow (poprzez

semafory). Procesy sa reprezentowane za pomaca Bloku Kontrolnego Procesu. Jeden Blok to jeden proces. Blok taki zawiera

min. informacje :

- stan procesu

- licznik rozkazow tego procesu

- rejestry procesora dotyczace procesu

- informacje zwiazane z przydzielaniem pamieci operacyjnej

- informacje o stanie przydzielonych urzadzen I/O

Skoro w tej warstwie przydziela sie procesom procesory, musi istniec jakis sposob (algorytm) aby rozwiazac ten problem.

Algorytm karuzelowy - Procesy w stanie gotowosci sa umieszczane na liscie cyklicznej. Procesor zostaje przydzielony jednemu

z nich a po uplywie pewnego czasu, przydziela sie procesor kolejnemu procesowi.

Algorytm z uwzglednieniem priorytetu - Niektore procesy w systemi sa wazniejsze, wiec daje sie im wiekszy priorytet. Procesor

przydziela sie temu procesowi, ktory jest w stanie gotowosci i posiada najwiekszy priorytet. Proces moze utrzymywac procesr

tak dlugo jak potrzebuje, lub proces o wyzszym priorytecie moze trzymac procesor dluzej od procesow z nizszym priorytetem.

Algorytm uwzgledniajacy odwrotnosc kwanta czasu - Gdy proces wykozysta caly czas jemu przydzielony, umieszczany jest na koncu

kolejki, lecz gdy proces wykozysta np. polowe czasu, umieszcany jest w polowie kolejki procesow.

+++++

5.1.3 Zarzadzanie pamiecia

+++++

a)Jeden spojny obszar

Ta metoda wykozystwywana jest w systemach w ktorych nie ma wieloprocesowosci. W danym momencie w pamieci moze istniec tylko

jeden proces, ktory musi byc mniejszy od dostepnej ilosci pamieci operacyjnej.

b)Strefy

W pamieci moze istniec na raz wiele procesow. Kazdy proces otrzymuje jeden spojny obszar w pamieci. Gdy proces jest usuwany

nastepuje zwolnienie nastepuje zwolnienie strefy. W przypadku gdy tuz za lub tuz przed zwalniana strefa istnial wolny fragment

pamieci, to tworzony jest z nich jeden wolny obszar pamieci. Wada tej metody jest tzw. fragmentacja pamieci czyli duza liczba

bardzo malych wolnych obszarow pamieci. W sytemie przechowuje sie tablice obszarow wolnych oraz tablice stref procesow.

c)Strefy przemieszczalne

Metoda ta jest bardzo podobna do metody Stref lecz w przypadku gdy trzeba utworzyc strefe wieksza od najwiekszego wolnego

obszaru dokonuje sie przesuniecia istniejacych stref do przodu albo do tylu. Umozliwilo to wyeliminowanie fragmentacji

pamieci.

d)Stronnicownie

Pamiec operacyjna jest podzielona na bloki o tej samiej wielkosci, a przestrzen adresowa procesu jest podzielona na stronnice

o takiej samej wielkosci jak bloki. Stronnice sa umieszczane w blokach. Kazdy proces posiada tablice odwzorowan stron w bloki

(Pege Map Table) czyli przypozadkowanie blokow do stron.

e)Stronnicownie na zadanie

dzieki tej metodzie mozna sztucznie zwiekszyc pamiec operacyjna poprzez wykozystanie pamieci dyskowej. Mniej potrzebne stronnice

przechowywane sa na dysku twradym. Jesli stronnica przechowywana na dysku jest potzrebna sciaga ja sie do pamieci oeracyjnej.

PMT posiada dodatkowa kolumne, ktore okresla czy stronnica znajduje sie na dysku czy w pamieci operacyjnej.

f)Segmentacja

Program dzielony jest na logiczne jednostki odzwierciedlajace jego budowe. Segmentami moga byc wiec funkcje nistandardowe,

procedury itp. Istnieje tutaj tablica odwzorowan segmentow, zawierajaca takie informacje jak:

- rozmiar segmentu

- stan segmentu

- miejsce umieszczenia segmentu w pamieci

- operacje

Wiele procesow moze kozystac z tych samych segmentow, wiec pamietane sa one tylko w jednej kopii.

g)Segmentacja ze stronnicowniem na zadanie

Segmenty skaladaja sie ze stronnic o tej samej wielkosci, a wiec nie wszystkie stronice segmentu musza sie znajdowac naraz w

pamieci.

+++++

5.1.4 Wyzszy poziom zarzadznia procesorem.

+++++

W tej warstwie procesy tworzy sie, usuwa, zatrzymuje i wznawia.Tutaj znajduja sie tez mechanizmy wykozystywane do komunikacji

miedzy procesami.

Tutaj wybiera sie sposrod procesow przedlozonych, te ktore przejda do stanu wprowadzenia (zostanie utworzony dla nich Blok

Kontrolny Procesu). Jesli w stanie wprowadzenia otrzymaja potrzebne im zasoby to przejda one do stanu gotowosci.

Procesy moga komunikowac sie ze soba poprzes wysylanie komunikatow. Moze sie to odbywac na drodze:

a)proces A wysyla komunikat procesowi B i czeka na potwierdzenie odebrania

b)proces A wysyla komunikat procesowi B i kontynuuje swe dzialanie nie czekajac na potwierdzenie

c)proces A wysyla komunikat do skrzynki S i ten proces ktory zajrzy tam jako pierwszy odbiera komunikat

Komunikat to obszar pamieci ktory zawiera min. takie informacje jak wskaznik do nadawcy, wielkosc komunikatu, tresc, wskaznik

do nastepnego komunikatu.

+++++

5.1.5 Warstwa zarzadzania urzadzeniami I/O

+++++

Ta warstwa zajmuje sie min.:

- planowaniem operacji I/O

- buforowaniem

- spoolingiem

- rezerwacja uzadzen

- obsluga bledow urzadzen

+++++

5.1.6 Poziom zarzadzania informacja

+++++

Sklada sie z modulow:

- modul symbolicznego systemu plikow (zamienia nazwy plikow i katalogow na unikalny identyfikator)

- modul podstawowego systemu plikow (sprawdza czy dany plik jest juz otwarty. Jesli tak to dane o tym pliku przechowywane sa

w tablicy aktywnych plikow. Jesli nie to przeglada sie podstawowy katalog plikow aby pobrac odpowiednie dane)

- modul sprawdzania mozliwosci dostepu (maciez kontroli dostepu, listy kontroli dostepu, hasla, szyfrowanie)

- modul logicznego systemu plikow

- modul fizycznego systemu plokow (przelicza nr bajtu na nr bloku ktory trzeba wczytac z dysku i przekazuje do poziomu

zarzadzajacego urzadzeniami I/O wlasciwa operacje I/O)

- poziom zarzadzajacy I/O (transmituje dane do wlasnego bufora. Po zakonczeniu transmisji przenosi dane do wlasciwego miejsca

w pamieci operacyjnej)

---------------------------------------------------------------------------------------------

---------------------------

6. Programowanie

---------------------------

==========

6.1 BASH programowanie by CZaR|Ny

==========

BASH jest najbardziej popularną powłoką używaną na systemach *nixowych, a także skryptowym

językiem programowania, która umożliwia efektywnie zarządzać systemem.

Zajmiemy się zaraz prostymi przykładami i omówimy ich działanie.

No to zaloguj się na swoje konto domowe na Linuxie.

Pierwszą rzeczą jaką musisz zrobić to w linni komend wpisać polecenie:

touch skrypt

i masz juz utworzony skrypt, ale jest on pusty. Edytuj plik pod jakimkolwiek edytorem - może

to być edytor pod Midnight Commanderem lub pod pico lub jakimkolwiek innym i teraz zabierasz

się za tworzenir swojego pierwszego skryptu. Pierwsza linia skryptu wygląda zawsze tak samo:

#!/bin/bash

Ta linia ma największe znaczenie - wskazuje ona na rodzaj shella w którym ma być wykonany

skrypt. Tutaj jak widać skrypt będzie wykonany przez interpreter poleceń /bin/bash. Jest to

niezależne od tego jaki rodzaj powłoki w danym momencie używasz.

Najprostszym skryptem jest wyświetlenie na ekranie napisu: "Witaj świecie!".

Zaczynamy więc zabawę. Wpisz do skryptu taka oto zawartość:

#!/bin/bash

#To jest moj pierwszy skrypt

echo "Witaj swiecie!"

Linia '#To jest moj pierwszy skrypt' jest komentarzem i nie będzie ona wyświetlana podczas

uruchamiania skryptu. W bashu każdy komentarz zaczyna się właśnie od Hasha, czyli tego

znaku ---> #

Zapisz skrypt. Teraz już masz gotowy swój pierwszy skrypt. Wystarczy nadać mu jeszczetylko

prawa wykonywalności:

chmod +x skrypt

Teraz ostatnią rzeczą jaką musisz zrobić to uruchomić skrypt. W linii poleceń wpisujesz:

./skrypt

Wciskasz enter i co pokazuje się na ekranie? No właśnie - na ekranie pokazuje się napis:

Witaj swiecie!

W ten oto sposób napisałeś i uruchomiłeś swój pierwszy skrypt BASHowy.

Jak już wiesz jak pisać skrypty dla powłoki oraz jak je uruchamiać możesz się wziąść za

dalszą edukację. Jednym z lepszych kursów w internecie jest kurs diefa.

Kurs ten znajduje się na stronie http://republika.pl/dief/main.html

Link do jego strony podany jest również w Linkach ;]

==========

6.2 Wstep do programowania w C by CZaR|Ny

==========

No dobra czas się wziąść za programowanie w C. Jeśli dalej sie zastanawiasz czy warto programować

to przeczytaj sobie text Estora na ten temat. Text ten znajdziesz na jego stronie, czyli dokładnie

pod tym adresem: http://www.estor.terramail.pl/bycprogramista.html

Programowanie nie jest trudne, ale trzeba sie przyłożyć i chcieć programować i poszerzać swoją wiedzę.

W tym tekście tylko chce przybliżyć jak powstają proste programy, z czego się składają i dlaczego

warto pogłębiać tą wiedzę.

No to startujemy.

Pierwszą rzeczą jaka jest potrzebna to oczywiście środowisko w którym będziemy tworzyć i kompilować

programy napisane przez nas. Jakie są dobre programy do pisania własnych aplikacji w języku C? Jest

ich wiele i każdy znajdzie coś dla siebie. Na sam początek polecam: Miracle C, Borland C - w sumie

proste i dość przyjemne w obsłudze jeśli chodzi o Windows. Pod systemami operacyjnymi z rodziny

*nixów wykorzystuje się kompilatory cc i gcc, a programy pisze się w notatnikach np. pico. Gcc i cc

służą tylko do komilacji napisanego już programu.

Jak już masz kompilatory to czas zacząć naukę. Zabieramy się za pisanie pierwszego programu.

Otwórz sobie nowy projekt i tam wpisz:

#include <stdlib.h>

int main(void)

{

/* Program wyswietla napis */

printf("Witaj. Jestem Twoim pierwszym programem!\n");

return 0;

}

Po skończeniu należy tylko zapisać program np. moj1.c, potem skompilować i powinien uruchomić się

program, który wyświetli jedną linię. Będzie to wygladało tak:

Witaj. Jestem Twoim pierwszym programem!

No dobra uruchomić się uruchomił, ale co ten cały kod oznacza?

Więc od początku:

#include <stdio.h>

Dodanie tego wiersza daje taki sam efekt jak dołączenie do programu całej zawartości pliku 'stdio.h' w

miejscu, gdzie znajduje się słowo 'include'. Include to inaczej pliki dołączane. Są one wygodnym

sposobem na wieleokrotne wykorzystanie tekstu, który jest wspólny dla wielu programów.

Plik 'stdio.h' zawiera dane o funkcjach wejścia/wyjścia, tj. 'printf()'. Plik ten poza tym jest częścią

wszystkich pakietów języka C.

int main(void)

Program w języku C rozpoczyna działanie od funkcji main(). Funkca ta musi istnieć aby program mógł działać.

Słowo 'int' określa typ wartości zwracanej przez funkcję main(). Wartości te są zwracane do systemu

operacyjnego.

/* Program wyswietla napis */

Jest to komentarz, który ma na celu ułatwienie zrozumienia programu napianego przez Ciebie. Komentarze w C

mogą byc umieszczane w dowolnym miejscu, nawet w tym samym wierszu, co materiał, który objaśniają. Dłuższy

komentarz może zawierać nawet kilka wierszy. Cały text zawarty w komentarzu musi być zawarty pomiedzy

otwierającym /* a zamykającym */ i jest on ignorowany przez kompilator.

{

...

}

Klamry oznaczają początek i koniec głównej części funkcji. Ich stosowanie jest obowiązkowe.

printf("Witaj. Jestem Twoim pierwszym programem!\n");

Funkcja printf() powoduje, że wyświetlane są znaki, które są w jej środku. W tym przypadku wyświetli nam text

'Witaj. Jestem twoim pierwszym programem!'. Znak '\n' jest znakiem przejścia do kolejnej linii. Wszystkie funkcje

powinny się kończyć średnikiem ';'. Bez tego program przy kompilacji będzie wywalał same errory.

return 0;

W języku C do zwracania wartości przez funkcje służy instrukcja zwrotu, która składa sie ze słowa kluczowego

'return', po którym następuje zwracana wartość zakończona średnikiem.

No i to tyle filozofii, jeżli chodzi o budowę programu.

Kolejny program, którym się zajmiemy będzie pobierał dane. Nowością będzie tylko instrukcja 'scanf()'.

#include <stdio.h>

int main(void)

{

char imie[20];

int wiek;

printf("Podaj imie i wiek \n");

scanf("%20s%d", imie, &wiek);

printf("\nMasz na imie: %s i masz %d lat", imie, wiek);

return 0;

}

Nowością w tym programie są char, int, scanf(), %s i %d. Teraz wyjaśnie co one oznaczają.

scanf() - służy do pobieranaia danych z klawiatury.

char - pobiera dane znakowe.

int - pobiera dane typu całkowitego czyli integer.

%s - pobiera dane typu znakowego.

%d - pobiera dane typu całkowitego.

No i to tyle filozofii w tym przykładzie. Teraz możecie sobie go wypróbować.

Na sam koniec jeszcze jeden przykład, który będzie prostą pętelką.

Najprostszą pętelką jest pętla for. Poniżej przykład a potem wyjaśnienia.

#include <stdio.h>

int main(void)

{

int num;

printf(" n n do szescianu\n");

for(num = 1; num<=10; num++)

printf("%5d %5d\n", num, num*num*num);

return 0;

}

Więc tak: w programie deklarujemy zmienną num typi integer. W pętli for wszystko wygląda

następująco: num = 1 czyli inicjalizacja, num<=10 czyli wyrażenie warunkowe, num++ czyli

instrukcja zmiany kroku. Może to też wyglądać tak:

for(num = 1; num<=10; num = num +1);

Reszta myśle, że jest zrozumiała. Jeśli chcecie się dalej wziąść za programowanie w języku C

to najlepszymi źródłami są książki np. Język C Szkoła programowania autorstwa Stephena Prata'a,

wydawnictwa ROBOMATIC. Jest też wiele kursów w necie - niektóe dobre inne średnie, a inne takie,

że szkoda czasu - wystarczy tylko poszukać.

No więc jak na razie to wszystko, jeśli chodzi o język C. Więcej następnym razem.

==========

6.3 Pisanie programow Internetowych pod Linuxem - podstawy by ASSmodeus

==========

Wstep

Do zrozumienia tego co zostanie omówione dalej w tym dokumencie trzeba znac:

podstawy jezyka C ·

podstawy uzytkowania systemu Linux ·

podstawy protokolów ·

Jesli bedzie cos w tym dokumencie nie zrozumiałe, polecam zapoznac sie z dokumentami zawartymi na

stronie HackerWannaBeFAQ.

Wspomne jeszcze, ze piszac ten dokumencik wspierałem sie ksiazka:

"Pisanie programów internetowych" Andrzeja Sopali, wydana przez Wydawnictwo "MIKOM"

Wprowadzenie

Jako, ze ten dokument ma nauczyc podstaw pisania programów internetowych w Linuxie, zaczniemy od

podstaw :-)

Opisze teraz po kolei rzeczy, które beda na potrzebne do stworzenia prostych klientów róznych usług. Na

koncu napiszemy pobieracza stron internetowych, ktory bedzie dzialal jak "lynx --source".

(powiem Wam w tajemnicy, ze taki pobieracz bardzo sie przydaje... Ja uzywam go do pobierania hurtowo

"róznych" obrazków z "ciekawych" serwisow :-) Oczywiscie do takich celow przydaje sie wkomponowanie

go w jakis skrypcik shellowy)

Podstawy

Adresy i porty

No cóz... Kazdy chyba sie orientuje co to takiego adres internetowy. Dla przypomnienia powiem tylko, ze

adres internetowy to numer komputera jednoznacznie identyfikujacy go w sieci (tzw. numer IP). Bardziej

jestesmy jednak przyzwyczajeni do nazw serwerów. Dlatego potocznie adresem internetowym przyjeło sie

nazywac nazwy domen przypisane do danego IP. Kazdy komputer, jesli chcemy móc sie do niego dostac z

zewnatrz, musi posiadac adres IP. Powiem wiecej... Kazdy komputer w Internecie musi posiadac numer IP,

ale wcale nie musi posiadac nazwy tzn. miec przypisanej domeny.

Ale to juz chyba wiecie, wiec nie ma sensu sie nad tym rozwodzic.

Tych, ktorzy chcieli by sie czegos wiecej dowiedziec o adresowaniu w Internecie odsyłam do odpowiednich

publikacji.

Przejdzmy teraz do portów.

Tak sie składa, ze czesto na jednym serwerze działa wiecej niz jedna aplikacja serwerowa. No i teraz skad taki

"biedny" serwer ma wiedziec, z która z tych aplikacji chce skorzystac klient wywołujacy adres serwera?

Cóz... do tego własnie słuza porty. Porty sa nierozerwalnie zwiazane z adresowaniem. I tak jak numer IP

jednoznacznie okresla maszyne w sieci, tak port jednoznacznie okresla usługe z jakiej chce skorzystac klient

na tej maszynie.

To dlaczego ja nigdy nie spotkalem sie z portami?

Tak sie składa, ze poszczególne aplikacje klienckie obsługuja konkretna usługe, do której domyslnie

przypisany jest jakis port. Dlatego aplikacje te nie pytaja sie uzytkownika o numer portu, bo maja ten numer

juz wpisany w sobie. Wiekszosc aplikacji pozwala na zmiane numeru portu w opcjach w przypadku połaczen

z nietypowym serwerem.

Gniazda (sockets)

Co to sa gniazda? ONUS WANE MINK FELT WHEE APS

Gniazda to interfejs programistyczny posredniczacy pomiedzy oprogramowaniem a protokołami. No cóz nie

umiem tego chyba prosciej wytłumaczyc. Jesli chcemy cokolwiek odbierac lub wysyłac jakims protokołem

sieciowym na jakims porcie, musimy w programie stworzyc gniazdo przypisane do tego protokołu i portu.

Nastepnie wszelkie operacje wykonujemy na takim gniezdzie (obsługa zblizona do obsługi plików), a

zaimplementowane w standardowych bibliotekach funkcje robia za nas brudna robote na niskim poziomie :-)

Struktury danych

Teraz poznamy cos bardziej konkretnego, a mianowicie struktury danych potrzebne do operowania na

adresach i portach.

Ogólna struktura do obsługi adresów w systemach Unixowych jest sockaddr.

Nie bedziemy sie do niej bezposrednio odwolywac, gdyz zaraz poznamy ciekawsza strukture obsługujaca

adresy internetowe. Bedziemy jednak w naszych programach rzutowac dane struktury "internetowej" na

strukture ogólna sockaddr, dlatego warto byłoby sie z nia blizej zapoznac:

struct sockaddr

{

u_short sa_family;

char sa_data[14];

}

Co znacza poszczególne pola?

sa_family - okresla jakiego typu jest adres. Mozemy podawac do tego pola wartosci ukryte w stałych

AF_XXX (zdefiniowanych w sys/socket.h). Gdzie XXX to nazwa interesujacej nas sieci. W

przypadku programów internetowych bedziemy uzywac stałej AF_INET.

·

sa_data - zawiera adres, ktorego format podany jest w sa_family ·

Nas jednak bardziej zainteresuje struktura przeznaczona do obsługi adresów internetowych, czyli sockaddr_in

struct sockaddr_in

{

short sin_family;

u_short sin_port;

struct in_addr sin_addr;

char sin_zero[8];

}

Co znacza poszczególne pola?

sin_family - powinno zawsze zawierac AF_INET ·

sin_port - okresla numer portu w porzadku sieciowym (wazne: NIE WPISUJEMY TU NUMERU

PORTU NA ZYWCA!)

·

sin_addr - okresla adres IP (struktury in_addr nie bede opisywał na tym etapie nauki) ·

sin_zero - pole nie wykorzystane, zawiera zera. ·

Jak juz wspomniałem wczesniej, mozna obie te struktury rzutowac na siebie. I tak tez bedziemy robili :-)

Nastepna struktura, która nas interesuje jest hostent. Ta struktura podaje dane o wyszukiwanym hoscie.

struct hostent

{

char *h_name;

char **h_aliases;

int h_addrtype;

int h_length;

char **h_addr_list;

#define h_addr h_addr_list[0];

}

Co znacza poszczególne pola?

h_name - oficjalna nazwa domenowa ·

h_aliases - lista nazw zastepczych ·

h_addrtype - okresla typ adresu. Opisuja go stałe PF_XXX. My spotkamy sie tylko z PF_INET. ·

h_length - Rozmiar adresu w bajtach. W naszym przypadku 4. ·

h_addr_list - lista adresów IP. ·

h_addr - wskaznik na tablice adresów. ·

Ostatnia struktura jaka nam sie przyda jest servent. Struktura ta przechowuje informacje o interesujacej nas

usłudze.

struct servent

{

char *s_name;

char **s_aliases;

int s_port;

char *s_proto;

}

Co znacza poszczególne pola?

s_name - oficjalna nazwa usługi. ·

s_aliases - lista nazw zastepczych. ·

s_port - numer portu w sieciowym porzadku bajtów (przekonwertowany z postaci dziesietnej). ·

s_proto - nazwa protokołu, którego nalezy uzyc. ·

Konwersja adresów

Postac adresów w funkcjach obsługujacych gniazda odbiega od postaci uzywanej zwykle. Tzn. ze musimy

numer IP w postaci dziesietnej z kropkami, lub nazwe domenowa przekonwertowac tak, zeby rozumiały je

funkcje gniazd.

Do szukania hosta po nazwie domenowej słuzy funkcja:

struct hostent *gethostbyname(const char *name);

zdefiniowana w bibliotece netdb.h.

Argumenty:

name - nazwa szukanego hosta ·

Zwracane wartosci:

Jesli wywołanie funkcji sie powiedzie, funkcja zwraca adres struktury hostent opisujacej hosta. W

przeciwnym przypadku zwracany jest NULL. Kod błedu zapisywany jest wtedy do zmiennej h_errno.

Kody błedów:

HOST_NOT_FOUND - host nie został znaleziony (ostateczna odpowiedz). ·

TRY_AGAIN - host nie został znaleziony (nieostateczna odpowiedz). ·

NO_RECOVERY - nierozpoznawalny bład. ·

NO_DATA - poprawna nazwa, ale brak danych. ·

NO_ADDRESS - brak danych. ·

Konwersja nazw usług na numery portów

Jak juz wspomniałem wczesniej, do połaczen oprócz adresu maszyny potrzebujemy jeszcze portu, na którym

pracuje aplikacja serwerowa, z która chcemy sie połaczyc. Mozemy podac numer portu recznie (przydatne,

gdy port usługi jest niestandardowy), ale czasem zdarza sie, ze nie pamietamy numeru przypisanego do danej

usługi. Wtedy mozemy sobie pomóc funkcja:

struct servent *getservbyname(const char *name, const char *proto);

Argumenty:

name - nazwa usługi, np.: "http", "ftp", "finger" ·

proto - nazwa zastosowanego protokołu np.: "tcp", "udp" ·

Zwracane wartosci:

Jesli wszystko poszło OK, funkcja zwraca adres struktury typu servent. W przypadku błedu funkcja zwraca

NULL. Kody błedów tak jak poprzednio umieszczane sa w zmiennej h_errno.

Kody błedów:

NO_DATA - poprawna nazwa, ale brak danych. ·

NO_RECOVERY - nierozpoznawalny bład. ·

Tworzymy gniazdo :-)

Dotarlismy do bardzo waznej czesci naszej edukacji :-) Stworzymy teraz własne gniazdo. Jak juz wiemy,

gniazda to interfejs programistyczny posredniczacy pomiedzy oprogramowaniem i siecia. Dzieki gniazda

wszelkie operacje na protokole TCP sa tak proste jak obsługa pliku.

Zatem do dzieła :-)

Gniazdo tworzymy przy pomocy funkcji int socket(int af, int type, int protocol);

Argumenty:

af - okresla rodzaj adresów przy pomocy stałych typu PF_XXX. W naszym przypadku PF_INET. ·

type - okresla typ gniazda. W przypadku połaczen internetowych sa to najczesciej:

SOCK_STREAM - tryb połaczeniowy, strumieniowy (TCP) ¨

SOCK_DGRAM - tryb bezpołaczeniowy, datagramowy (UDP) ¨

·

protocol - okresla szczególny protokół wykorzystywany przez gniazdo. My bedziemy wpisywac tu 0

(zero).

·

Zwracane wartosci:

Jesli wszystko pójdzie OK, funkcja zwraca wartosc nowego deskryptora (uchwytu) do gniazda. Jezeli wystapi

bład funkcja zwraca wartosc -1. Kod błedu mozna odczytac ze zmiennej errno zdefiniowanej w bibliotece

errno.h.

Kody błedów:

EACCES - odmowa dostepu. ·

EMFILE - brak deskryptorów plików. ·

ENOMEM - brak pamieci. ·

ENOSR - brak zasobów. ·

EPROTONOSUPPORT - nieobsługiwany protokół ·

Nawiazywanie połaczenia i komunikacja

Ufff... to juz ostatni etap nudnej czesci teoretycznej. Po przełknieciu tego działu bedziemy juz mogli pobawic

sie w pisanie naszego pierwszego klienta usługi internetowej :-) Jednak zanim wezmiemy sie za wysyłanie i

odbieranie danych, musimy wiedziec jak to sie robi. W tej czesci BAAARDZO przyda nam sie gniazdo, które

stworzylismy wczesniej.

Najpierw musimy sie połaczyc. Uzyjemy do tego funkcji:

int connect(int s, const struct sockaddr* name, int namelen);

Argumenty:

s - deskryptor (uchwyt) gniazda. ·

name - struktura okreslajaca adres i port hosta, do którego chcemy sie połaczyc. ·

namelen - rozmiar w bajtach struktury name. ·

Zwracane wartosci:

Jesli połaczenie przebiegnie prawidłowo, funkcja zwraca 0 (zero). Gdy wystapi bład zwracana jest wartosc

-1. W przypadku wystapienia błedu, jego wartosc mozna odczytac ze zmiennej errno.

Kody błedów:

EACCES - odmowa dostepu. ·

EADDRINUSE - adres w uzyciu. ·

EADDRNOTAVAIL - adres nie dostepny. ·

EAFNOSUPPORT - nie obsługiwana rodzina adresów. ·

EALREADY - poprzednie zadanie nie zostało do konca obsłuzone. ·

EBADF - nieprawidłowy deskryptor. ·

ECONNREFUSED - zadanie połaczenia odrzucone. ·

EINPROGRESS - operacja połaczenia trwa. ·

EINTR - operacja przerwana. ·

EINVAL - niepoprawny rozmiar adresu. ·

EIO - bład wejscia/wyjscia. ·

EISCONN - gniazdo jest juz połaczone. ·

ENETUNREACH - siec okreslona w adresie jest niedostepna. ·

ENOSR - brak zasobów. ·

ENXIO - bład spowodowany przez serwer. ·

ETIMEDOUT - przekroczony czas połaczenia. ·

No to sie połaczylismy... Teraz przydało by sie cos wysłac i odebrac. Mozna to robic przy pomocy róznych

funkcji, ale my skupimy sie na dwóch najprostszych.

Do wysyłania danych posłuzymy sie funkcja:

ssize_t write(int s, const void *buf, size_t len);

Argumenty:

s - deskryptor (uchwyt) gniazda. ·

buf - bufor z danymi do przesłania. ·

len - rozmiar bufora. ·

Zwracane wartosci:

Gdy przesyłanie przebiegło poprawnie, funkcja zwraca ilosc wysłanych danych w bajtach. Jesli cos sie

skiepsciło, zwracana jest wartosc -1, a kod błedu przesyłany do dobrze juz nam znanej zmiennej errno.

Kody błedów:

EAGAIN - operacja w tej chwili nie moze byc zrealizowana. ·

EBADF - nieprawidłowy deskryptor. ·

EFAULT - niepoprawna wartosc wskaznika do bufora danych. ·

EINTR - operacja przerwana. ·

ENOSR - brak zasobów. ·

ERANGE - niepoprawny rozmiar bufora. ·

Do odbierania danych z gniazda posłuzymy sie funkcja:

ssize_t read(int s, char void *buf, size_t len);

Argumenty:

Chyba kazdy sie domysla :-) Sa takie same jak w poprzedniej funkcji tylko, ze bufor słuzy do odczytu.

Zwracane wartosci:

Funkcja zwraca ilosc odebranych danych, która moze byc rózna od rozmiaru bufora (jesli juz to mniejsza :-)).

Jesli funkcja zwróci wartosc 0 (zero), znaczy, ze połaczenie zostało zamkniete. Gdy podczas próby odebrania

danych wystapił bład, zwracana jest wartosc -1, a kod błedu umieszczany jest... hmmm chyba kazdy juz wie

;-) w zmiennej errno.

Kody błedów:

Mozliwe kody błedów sa takie same jak pierwsze 4 z popredniej listy, wiec nie bede sie juz powtarzał.

Ehhh... nie wiem jak Wy, ale ja juz sie troche zmeczyłem ta teoria... Na szczescie zostało nam juz tylko

zamkniecie połaczenia, a robimy to funkcja:

int close(int s);

Argumenty:

s - deskryptor zamykanego gniazda. ·

Zwracane wartosci:

Jesli wrzystko jest w porzadku, to funkcja zwraca 0. W przeciwnym przypadku zwraca wartosc -1. Kody

błedów jak zwykle sa w errno.

Kody błedów:

EBADF - nieprawidłowy deskryptor. ·

EINTR - operacja przerwana. ·

EIO - bład wejscia/wyjscia. ·

HURRRAAA!!!!!! Koniec teorii :-) Zaczynamy pisac program...

Piszemy program

(prosty klient usługi WWW - wyswietla kod zadanej strony).

#include <stdio.h> //podpinanie odpowiednich bibliotek

#include <errno.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

int main(int argc, char** argv)

{

struct hostent *host; //tworzymy zmienna z danymi o hoscie

struct servent *serv; //tworzymy zmienna z danymi o usłudze

struct sockaddr_in adres; //tworzymy zmienna z danymi o adresie

int gnz,i; //tworzymy zmienna na deskryptor gniazda i pomocnicza

char buf[1024]; //tworzymy bufor na dane

if (argc<2) //czy podano nazwe hosta przy wywołaniu programu

{

printf("Uzycie: %s nazwa_hosta\n",argv[0]);

return 1;

}

bzero((char *)es)); //zerowanie zmiennej adres

adres.sin_family=AF_INET; //podajemy z jakiej rodziny adresów mamy zamiar korzystac

host=gethostbyname(argv[1]); //sprawdzamy nazwe hosta

if (host!=NULL) //Jesli sprawdzanie sie udało

bcopy(host->h_addr, (char *)host->h_length); //kopiuj adres do naszej zmiennej adresowej

else

{

perror("Blad: Nie moge znalesc hosta");

return 1;

}

serv=getservbyname("http","tcp"); //pobierz dane usługi

if (serv!=NULL)

adres.sin_port=serv->s_port;

else

{

perror("Blad funkcji getservbyname!");

return 1;

}

gnz=socket(PF_INET,SOCK_STREAM,0); //tworzymy gniazdo

if (gnz==-1)

{

perror("Blad funkcji socket!");

return 1;

}

if (connect(gnz,(struct sockaddr *)sizeof(adres))<0) //jesli nie uda sie połaczyc

{

close(gnz); //zamknij gniazdo

switch(errno)

{

case ECONNREFUSED : perror("Polaczenie odrzucone!"); return 1;

case ENETUNREACH : perror("Siec nie dostepna!"); return 1;

case ETIMEDOUT : perror("Przekroczony czas polaczenia!"); return 1;

default : perror("Nie moge polaczyc!"); return 1;

}

}

write(gnz,"GET / HTTP/1.0\r\n\r\n",18); //patrz "protokol HTTP" :-)

while ((i=read(gnz,buf,sizeof(buf)))>0) //dopoki cos odbiera

write(0,buf,i); //niech wywala to na ekran

close(gnz); //zamknij gniazdo

return 0;

}

Podsumowanie

W ten sposób zakonczylismy zmudna nauke podstaw pisania programów internetowych. Na razie umiemy

stworzyc prostego klienta róznego rodzaju usług internetowych. Niby niewiele, ale jak bedziemy (w ramach

bezpieczenstwa oczywiscie ;->) analizowali kod robaków czy remote eksploitów, to troszke nam sie rozjasni.

Nastepnym etapem bedzie nauka pisania prostych aplikacji serwerowych.

Niecerpliwych odsyłam do publikacji, która wymieniłem na poczatku dokumentu oraz do innych publikacji

zwiazanych z programowaniem w sieci i róznymi protokołami.

==========

6.4 Czym się różnią C/C++, Pascal, Assembler, Basic, Java itp.. by Estor i CZaR|Ny

==========

Postaram się krótko i zwięźle odpowiedzieć na tak postawione pytanie...

Gdybym chciał napisać czym się różnią, potrzebował bym kilku MB na sam

wstęp 8) a nie o to chodzi, dlatego napisze co mają wspólnego.

Wspólną cechą wszystkich tych języków jest to i tylko to że służą do pisania

programów, oczywiście są pewne podobieństwa, np. deklarowanie zmiennych,

czy składania instrukcji IF lub operatory logiczne (może z wyjątkiem

Assemblera, do którego nic nie jest podobne 8);

Wyjątek też stanowi tutaj język o nazwie Basic, QBasic i każdy inny język

który zawiera w swojej nazwie słowo BASIC.

Otóż te języki programowania są wykonywane w dość odmienny sposób, ponieważ

nie są zamieniane w kod maszynowy, tylko interpretowane, tzn. jest program

o nazwie interpretator i on na bieżąco krok po kroku wykonuje instrukcje

Basica, czyli tak naprawdę Basic jest bardziej skryptem programowania niż

językiem programowana.

Czyli niezależnie od tego który język wybiorę będę wstanie napisać, bazę

danych, kalkulator, rozwiązać zadanie z matematyki no i napisać grę !

TAK... oczywiście, ale nie potrzeba wróżki ani magicznej kuli, aby się

dowiedzieć jak by wyglądał Quake napisany np. Basicu. Oczywiście możesz

napisać, bo jest nawet DirectX dla Basica, ale P4 i GeForce 4 mogą się

okazać niewystarczające.

Może mały przegląd jeżyków ! 8)

Java:

Aplety na stronach WWW, ale czy tylko ???, przecież Novell w

swoim NetWare, Consol One napisał w 100% w Javie !, dzięki temu ten sam

program działa na Windowsie, NetWare, Os/2 itd.

Spowodowane jest to tym że na komputerze jest instalowana JAVA Virtual

Machine, cały kod JAVY jest zamieniany w specjalny kod i interpretowany

przez JAVA Virtual Machine, na stronie http://java.sun.com/ można znaleźć

bardzo dużo na temat JAVY, między innymi zobaczyć dla ilu już systemów

została napisana wirtualna maszyna javy. Java jest za darmo !!!, niestety

z tego też powodu nie można sprzedawać programów które się napisze, z tej

strony można też zassać maszynę javy, oraz kompilator i instrukcje obsługi.

Są wielbiciele JAVY którzy twierdzą że JAVA jest równie szybka jak C.

No cóż, problem jest chyba w tym jak zostaliśmy zaprogramowani, otóż od

prehistorii ludzie odczuwali potrzebę wierzenia w coś, dziś jedni wieżą w

Boga inni w pieniądze, a są tacy co wieżą że interpretacja kodu javy może

być szybsza lub równie szybka co C.

Java z założenia nie miała być szybkim językiem, ale za to miał to

być język dla wielu systemów, a nawet komputerów, jak widać załodze SUN'a

się udało.

Jakie są wiec możliwości JAVY ? No dość spore, przeglądając JDK (JAVA

Development Kit) złapałem się za głowę !!! Na pewno nie napiszesz tym

aplikacji w stylu boot-menager, czy sterownika drukarki, wynika to z

tego że każdy program działający w Javie dostaje swoją własną piaskownice

do zabawy i dostęp do wielu funkcji systemowych jest po prostu niemożliwy.

Podobno Microsoft ma coś podobnego do Javy i bez ograniczeń, tylko

niestety, zgodnie z polityką MicroSoft'u system Windows, jest jedynym,

słusznym i ideologicznie właściwym systemem na którym ma działać ten język,

więc szlak trafił idę przenośnego programu.

Nie wiem jak się nazywa ten produkt, chyba C#, ale nie jestem pewien,

jeśli ktoś wie niech da znać, musze wiedzieć czego unikać.

Język C:

Język o wiele starszy niż system Windows!, powstał na pierwszych

Unixa'ch, jego autorem był Dennis Ritchie i napisał go właśnie dla Unixa,

wszystkie programy usługowe owego unixa były napisane w C, nawet ten unix !

Jest to język prosty, praktycznie pozbawiony ograniczeń, pisze się w nim

wszystko, i szybka, i dzięki standardowi ANSII w przenośny.

Mało tego, pomimo że C powstał dla Unixa, nie jest ograniczony do niego,

można z niego korzystać na wszystkim Unix, Linux, Dos, wszystkie Windows'y.

Więc mogę przenosić kod jak w Javie pomiędzy systemami ? Niestety nie...

w JAVIE można przenosić gotowy skompilowany kod, w języku C można przenosić

tylko kod źródłowy, czyli program XXX będzie działał dla DOS'a i WINDOWS'a

wtedy i tylko wtedy gdy zostanie użyty kompilator dla określonego systemu.

Według mnie jest to w pełni wystarczająca elastyczność.

Niestety MicroSoft znowu wszystko popsuł 8( jeśli masz aplikacje okienkową

dla systemu windows napisaną pod GUI to nie skompilujesz jej przy użyciu GCC

na linuxie, wynika to z tego że podczas pisania aplikacji dla windows

MUSZISZ korzystać z bibliotek które dostarcza microsoft, niestety.

Jednak nie zmienia to faktu że, no właśnie został w tym języku napisany

Unix, Linux, DOS !!!, Quake, Tomb Rider, 3D Studio MAX i jeszcze miliony

innych aplikacji na całym świecie.

C pozwala na dołączenie do kodu wynikowego obiekty z różnych języków

programowania (Assembler, Pascal) co czyni go jeszcze bardziej uniwersalnym.

Narzędzia: No tak za Visual C zapłacisz, za Borland C też zapłacisz,

tylko GNU C jest za free ale niestety na tej samej zasadzie co Java. Chcesz

to pisz, ale żadnej komerchy. Jednak jest to doskonałe rozwiązanie dla

początkujących. Zainstalować dowolnego linucha z GNU C, Midnight Commander

i do klawiatury...

Assembler:

Taaa... to jest jazdeczka bez trzymanki, proponuje odwiedzić

wypożyczalnie wideo i pożyczyć kultowy jak dla mnie film pt. "TRON", czy

możesz sobie wyobrazić, władze ABSOLUTNĄ !!! ograniczoną tylko do wyobraźni,

jest to zamieniony na zrozumiały dla człowieka język maszyny !, gdzie każdy

znaczek ma odpowiednik w kodzie maszynowym, MOV, ADD, SUB, XOR, OR, AND,

LEA, INT itd. każda z tych instrukcji ma swój odpowiednik w procesorze,

czy może być coś potężniejszego niż programowane samego procesora !

Możesz zapytać magistrale co jest do niej podpięte, zapytać procesor o jego

wersje i numer fabryczny, zagrać hymn narodowy na drukarce...

Ok a teraz minusy 8(

To co w C zajmuje 1 linijkę kodu, w Assemblerze skończysz w

okolicach o krok od zaklepania się na śmierć 8).

Na dodatek ja poświęciłem mu już 8 lat mojego życia, około 2 lat zajęło mi

nauczenie się go, po kolejnych 6 mogę powiedzieć że mam w tym wprawę.

Poza tym występują różnice pomiędzy implementacjami, tzn. inną składnie

proponuje Borland, jeszcze inną Microsoft, a już całkiem od normy assembler

na dla Linuxa, no chyba że w grę wchodzi Nasm.

Zastosowanie praktyczne ? Ma tylko jedno ograniczenie, jest nim zdrowy

rozsądek ! W dzisiejszych czasach w Assemblerze pisze się pewne krytyczne

dla działania programu sekcje, szczególnie tam gdzie jest wymagana szybkość

lub bliski kontakt z sprzętem, ale całość oprawia się w C.

Naprawdę piękny język i bardzo potężny, nie żałuje ani minuty z 8 lat które

poświęciłem temu językowi.

Zalecany do pisania boot-menagerów, wirusów itp. rzeczy. Podstawowe

narzędzie pracy dla każdego crackera.

Pascal:

Hmmm.. tu dożo nie napisze, wiem tylko że jest to kolejny język

podobny do C. Z tego co się orientuje to jest on polecany do celów

dydaktycznych dlatego też na studiach pierwszą rzeczą jaką się

Informatycy uczą jest Pascal.

Jest to jeden z pierwszych języków programowania, które poznaje sie na

studiach dlatego, że uczy on myślenia programistycznego. Jest on oparty

na języku Algol. Na samym początku służył do nauki programowania strukturalnego.

Język Pascal jest bardzo prostym językiem i łatwo dzięki niemu nauczyć się

dobrego programowania. Jest dobrym wstępem do programowania w Delphi i C.

Co dalej - dzięki temu językowi można sobie w prostszy sposób pisać algorytmy

niż w języku C/C++, które są bardziej złożone.

Niestety na temat tego języka nic więcej nie jestem w stanie napisać.

Basic:

Tak jak już pisałem, jest to język bardzo prosty, bardzo powolny,

i bardzo prosty ? Język jest tak nieskomplikowany że jego podstawy zrozumie

10 letnie dziecko, więc do czego może się on przydać, ja go stosuje do

testów !

Mam pomysł na algorytm, to najpierw go sprawdzam w Basicu. Jestem w stanie

szybko i przejrzyście go zaimplementować i sprawdzić ewentualne błędy

zanim napisze go w C lub Assemblerze.

Jego hybryda jest też stosowana w Access Database, do oprogramowania bazy

danych. W połączeniu z SQL daje naprawdę fajny efekt.

Jak widać Basic wcale nie jest taki niepotrzebny, może pomóc, a jako

ciekawostkę napisze że można w nim pisać skrypty dla Visual C/C++ które

mają ułatwić prace programiście.

Visual Basic w wersji 6.0 daje mozliwosc kompilacji do Pseudo Code i Native

Code czyli do maszynowego. A propo jego szybkosci to używa on troszke

zmienionego kompilatora z VC++ wiec szybkosc programu też nie jest

najgorsza.

Jest jeszcze wiele języków programowania, zanim coś wybierzesz sprawdź

czego nie można w nim napisać, A NIE ! co można.

Dlaczego tak??? to jest jak z ceną 9.99 niby to jest 10 zł, ale człowiek

w pierwszej chwili widzi tylko że to za 9.99 zł jest tańsze.

Jeśli spytasz co można w danym języku napisać wyda Ci się że jego możliwości

są nieograniczone, jeśli spytasz czego w nim napisać nie można dostaniesz

szybko opowiedz co w nim napisać można.

Moja misja:

Chciałem aby w jednym dokumencie raz na zawsze wyjaśnić że język

programowania to nie kanapka z serem, że pisanie programów to nie tylko

znajomość składni języka, trzeba jeszcze wiedzieć z którego skorzystać aby

się nie narobić, tylko zrobić.

Mam nadzieje że każdy dopisze tu coś od siebie lub doda jakiś język

programowania i troszkę go opisze.

No to jeszcze pare słów ode mnie :]

SQL:

Dobrym językiem jest na pewno język SQL (Structured Query Language). Język ten

jest wykorzystywany do tworzenia baz danych i operowania na nich. Język SQL można

łączyć z innymi językami programowania jak np. C/C++, PHP czy PERL. Nie jest językiem

trudnym - opiera się na zapytaniach i kiedy się je tylko pozna to wtedy droga

otwarta do dalszej nauki i pracy z bazami danych. Język ten jest wykorzystywany

w wielu aplikacjach internetowych jak np. księgi gości, fora dyskusyjne itd. Ma bardzo

duże zastosowanie w poważnych aplikacjach bazodanowych wielkich , średnich i mniejszych

firm. Więc jak widać ma szerokie zastosowanie. Jeśli pozna się przy okazji język C/C++,

PHP lub inny który wykorzystuje aplikacje bazodanowe to wtedy można zrobić naprawde

ciekawe i bardzo przydatne w życiu codziennym aplikacje.

PHP:

Hypertext Preprpcesor jest językiem przeznaczonym do tworzenia dynamicznych,

interaktywnych witryn WWW. Język ten jest przenośny, czyli można go uruchomić na komputerach

działających w różnych systemach operacyjnych. Jest wbudowany w HTML. A co najważniejsze

jest językiem programowania skryptów serwera WWW - czyli skrypty w PHP są uruchamiane przez

przeglądarkę WWW - wszystkie skrypty są wykonywane na serwerze.

BASH:

Bourne Again SHell to język skryptowy powłoki *nixowej, który umożliwia efektywne zarządzanie

systemem. Skrypt jest nieskomlikowanym wykonywalnym plikiem tekstowym, w którym zawarte są

jakies polecenia systemowe oraz polecenia sterujące jego wykonaniem. Wykonywany jest przez

interpreter, który tłumaczy polecenia zawarte w skrypcie na język zrozumiały dla procesora.

Aby móc programować w tymjęzyku należy tylko znać podstawowe polecenia *nixa.

No to tyle co chciałem w tym tekście dodać od siebie.

==========

6.5 Z czego składa się język programowania by Estor

==========

No właśnie... z znaków? bajtów? komend? taaaa.. a czym w takim razie się

różni komenda od bajtu, a bajt od znaku, no i wreszcie komenda od znaku ?

Ten artykuł to prawdziwe wyzwanie, zamierzam pisać o językach programowania

nie opierając się na żadnym z nich.... to chyba będzie bolało 8(

Odpowiedz:

Języki programowania można podzielić na obiektowe i strukturalne,

w tym art. zajmę się tylko strukturalnymi.

Każdy język programowania składa się z tych elementów bo komenda składa

się z znaków, znaki są zapisywane jako bajty, i tak w kółko, ale to nie do końca

jest język programowania, o wiele istotniejsze w każdym języku są:

- Zmienne, Stałe

- Funkcje, Procedury

- Pętle

- Instrukcje warunkowe

- Operacje arytmetyczno logiczne

Niezależnie od tego jaki język programowania wybierzesz zawsze spotkasz

te elementy, są one podstawą każdego języka programowania.

Jeśli uczysz się programowania zacznij właśnie od tych 5 elementów.

Sprawdź w jaki sposób są realizowane wszystkie te elementy.

Kolejnym elementem jest oprogramowanie:

- Interpretator

- Kompilator

- Linker (Konsolidator)

Co do czego służy ?

[interpretator]

Większość języków skryptowych np. Basic są wykonywane przez specjalne programy,

które nazywa się interpretatorami, a to dlatego że wykonują one instrukcje

danego języka skryptowego kroczek po kroczku, dosłownie je interpretując.

Z natury są one bardzo powolne.

[Kompilator]

Narzędzie to można spotkać z językami niższego rzędu, on również interpretuje

instrukcje, ale wynikiem jego interpretacji nie jest wykonanie tak napisanego programu,

lecz zapisanie informacji o tym programie, czyli jakie są funkcje w programie, w którym

miejscu są te funkcje wywoływane, a w którym deklarowane, jakie są zmienne, jakie mają

nazwy, itd.

Wynikiem jest plik przejściowy dopiero kolejne narzędzie ...

[Linker / Konsolidator]

Wynik pracy kompilatora jest klejony przez linker w jeden kawałek, w wyniku zwracając

rządny plik najczęściej exe. W polskich książkach technicznych na linker mówi się konsolidator,

nie wiem kto to wymyślił, ale mogło być gorzej, osobiście wole pozostać przy linku.

No dobrze a teraz pozostała, bardzo istotna piątka:

[Zmienne, Stałe]

Czym jest zmienna? Tak naprawdę to jest to komórka pamięci, której można nadać

wartość oraz nadać jej nazwę zrozumiałą dla człowieka. Kompilator później zamieni naszą nazwę na

adres i komputer zmienną będzie identyfikował po adresie a nie po nazwie.

Wartości zmiennych mogą być zmieniane w czasie pracy, co pozwala na wykonywanie obliczeń

itp. W większości języków programowania zanim użyje się zmiennej lub stałej trzeba ją koniecznie

zadeklarować, dzięki temu kompilator będzie wiedział że musi zarezerwować miejsce na naszą

zmienną.

Mały przykład:

DWA = 2

CZTERY = DWA + DWA

DWA = CZTERY

Jeśli w określonym języku zadeklaruje się zmienną DWA i nada wartość 2 to od tej pory zmienna DWA

reprezentuje pewną komórkę w pamięci w której zapisano liczbę 2.

Następnie zmiennej CZTERY zostaje przypisana wartość DWA+DWA, ale kompilator wie że DWA to jest

zmienna i pobiera liczbę 2 następnie dodaje 2, a wynik umieszcza pod adresem gdzie została zadeklarowana

zmienna 4.

Na koniec kompilator widzi zmienną CZTERY i DWA, więc wartość zmiennej CZTERY zapisuje w zmiennej

DWA. W wyniku zmienna DWA = 4 8)

Stałe od zmiennych jak zapewne można się domyślić są stałe (co za genialne stwierdzenie), kompilator nie

pozwoli zmienić ich wartości.

[Funkcje, Procedury]

Jedna i druga nazwa jest jak najbardziej poprawna, i chyba do dziś już nikt nie pamięta

co było powodem powstania dwóch nazw. Co to jest procedura (funkcja), jest to wisienka na torcie,

weźmy taki komputer: ma monitor, klawiaturę, procesor, kartę graficzną, myszkę, czasem drukarkę

każde z tych urządzeń spełnia pewną funkcje. Na monitorze i drukarce informacje są wyświetlane to jest

ich funkcja, funkcją klawiatury jest wprowadzanie danych itd. Wszyto razem daje komputer.

Funkcje czy też procedury to ma cząsteczki wielkiej całości które mają spełniać pojedyncze zadanie.

W większości języków programowania kompilatorowi należy pokazać w którym miejscu

funkcja się zaczyna a w którym kończy.

We wnętrzu funkcji znajduje się normalny kod programu, należy tylko pamiętać aby sprawdzić sposób

deklarowania zmiennych. Wszystkie języki które znam lub kiedyś znałem zmienne zadeklarowane

wewnątrz funkcji są lokalne, tzn. że zmienna istnieje tak długo jak jest wykonywany program funkcji,

po wyjściu z niej zmienna jest zabijana.

[Pętle]

Pętla, bardzo fajna nazwa dla czegoś co potrafi powiesić komputer jeśli jest źle napisana. 8)

Pętlą nazywa się pewien fragment programu który jest wykonywany aż do spełnienia pewnego warunku.

Każdy język programowania ma określone zasady jak należy deklarować pętle, jeśli jakiś

język programowania nie ma pętli to nic nie przeszkadza, bo pętla tak naprawdę jest odpowiednio

wykonaną instrukcją warunkową.

początek pętli

...

jakiś kod

jakiś kod

jakiś kod

...

koniec pętli

Gdzie jest sprawdzany warunek, może on być sprawdzany w 3 miejscach ! ale powinno się to robić

jednak tylko w 2, czyli na początku LUB końcu pętli. Jeśli warunek jest prawdziwy to pętla

jest wykonywana, warunek może być zdefiniowany takim stwierdzeniem.

"... Dopóki zmienna x jest różna od zera to wykonuj pętle ..."

Bardzo ważne: Nie bez znaczenia jest to czy warunek postawimy na końcu, czy też początku pętli.

Jeśli warunek jest postawiony na początku to nie zostanie on wykonany ani razu jeśli warunek nie

będzie spełniony. Jeśli postawi się go na końcu, pętla wykona choć jeden przebieg. Czasem potrzeba

aby był ten jeden przebieg czasem jest to niedopuszczalne, dlatego jest to bardzo istotne.

Skonstruowanie złego warunku spowoduje że komputer nigdy nie opuści pętli, co spowoduje jego zawieszenie.

[Instrukcje warunkowe]

Bardzo podobne do pętli, jednak kod wewnątrz instrukcji jest wykonywany tylko raz, jeśli warunek

jest prawdziwy.

[jeśli a jest prawdą]

wykonaj kod dla a

[koniec jeśli]

a tu kod wykonywany zawsze

instrukcje warunkowe mogą się znacząco różnić w zależności od języka.

Model powyżej jest modelem podstawowym, może on być zbudowany też tak

[jeśli a jest prawdą]

wykonaj kod dla a

[jeśli nie]

wykonaj inny kod

[koniec jeśli]

a tu kod wykonywany zawsze

Każdy inny warunek jest sprowadzany na końcu do modelu podstawowego, choć tego nie

widać. Po prostu komputer potrafi tylko wykonać tylko model podstawowy instrukcji warunkowej

jednak kompilator tak zapisuje kod dzięki czemu każdy, dowolnie skomplikowana

konstrukcja warunkowa jest sprowadzana do modelu podstawowego.

[Operacje arytmetyczno logiczne]

Na koniec, ciekawostka. Każdy język programowania musi mieć możliwość

wykonywania takich operacji jak mnożenie, dzielenie, dodawanie, odejmowanie

Oraz operacje logiczne takie jak AND, OR, XOR, NOT.

Jednak każdy z języków może używać innych znaków lub funkcji do wykonywania

tych operacji.

To by było na tyle, sam z siebie jestem dumny, że udało mi się napisać coś na temat wszystkich

języków nie opierając się na żadnym z nich.

---------------------------------------------------------------------------------------------

---------------------------

7. Algorytmy

---------------------------

==========

7.1 FIFO by Estor

==========

Wstęp

Co to jest stos to każdy chyba wie, oczywiście jest to miejsce gdzie

się pali czarownice 8), ale co to ma wspólnego z komputerami.

Właśnie to i nie tylko postaram się opisać w tym artykule. Na pewno

spotkałeś się z takimi pojęciami jak FIFO, LIFO zwane też FILO oraz

STOSEM, ale masz o nich mierne, a możne nawet jeszcze mniejsze pojęcie,

i sądzisz że to jest coś skomplikowanego oraz zbędnego... nic podobnego,

jak już wkrótce się okaże jest to bardzo proste, a wiadomości zdobyte o

tych "badziewiach" są bardzo istotne. FIFO i LIFO są podstawą struktur

danych. Prawie każda struktura jest typu FIFO lub LIFO, ale nie każda

tylko prawie 8)

Co to jest FIFO:

Nie... to nie jest imię psa, ani kota ani innego futrzaka 8) te 4

magiczne literki określają sposób dostępu do danych, to jest

(F)irst (I)n (F)irst (O)ut, czyli Pierwszy Wchodzi jako Pierwszy Wychodzi.

Z taką sytuacją możemy się spotkać np. w sklepie gdzie klienci ustawiają

się ładnie w kolejce, im wcześniej ktoś przyszedł tym wcześniej zostanie

obsłużony.

Dzięki takiemu sposobowi dostępu do danych zachowuje się porządek

nadchodzących danych, dzięki temu np. możliwe jest pisanie na klawiaturze.

Znaki które się naciska trafiają do bufora, a tam ustawiają się w kolejce.

Dzięki temu jeśli piszesz szybciej niż komputer wyświetla znaki to one

i tak się pojawią w odpowiedniej kolejności.

==========

7.2 LIFO by Estor

==========

W takim razie co to jest LIFO:

LIFO zwane też FILO jest to również sposób dostępu do danych. LIFO to

jest (L)ast (I)n (F)irst (O)ut czyli Ostatni wchodzi, a jako pierwszy wychodzi.

Z taką sytuacją można się spotkać na klasówce kiedy wszystkie dzieciaki

oddają swoje prace układają je u nauczycielki na biurku, jedna na drugiej.

Kiedy nauczycielka zacznie poprawiać zadania to zabierze pierwszą z

wierzchu, a przecież ona została oddana jako ostatnia 8)

to jest LIFO... ale czy ten stos kartek na biurku Ci czegoś nie przypomina...

Upsss.... 8)

==========

7.3 Stos by Estor

==========

STOS Kartek:

Dokładnie stos kartek, a stos w komputerze niczym się nie różni. STOS jest

to określenie na pewną strukturę danych. Stos tak naprawdę tworzy się sam

poprzez dostęp do niego metodą LIFO. Do czego może się przydać STOS...

ok... wyobraź sobie że jesteś w labiryncie w którym na skrzyżowaniach

możesz iść w lewo lub w prawo, i dostajesz sporo luźnych kartek. Masz

znaleźć wyjście z labiryntu (zabrano Ci nici, sznurówki, i nie masz nawet

gumki od majtek tak że z "Nici Ariadny" nici 8) )

Dochodzisz do skrzyżowania i idziesz w lewo - zaznaczasz to na kartce,

i przykrywasz ją nową kartką, na następnym skrzyżowaniu idziesz w prawo,

też zaznaczasz to na kartce (tej która przykryła poprzednia), na kolejnym

skrzyżowaniu idziesz w lewo, znowu to zaznaczasz i kładziez kolejną (czystą)

kartke i odkładasz ją NA dwie pozostałe.

Okazuje się że to była ślepa uliczka, więc idziesz rakiem do tyłu i wracasz

do skrzyżowania, tam wyrzucasz pierwszą kartkę z wierzchu, ukazuje Ci się

poprzednia, skreślasz stary rysunek, rysujesz gdzie skręcisz teraz itd.

W ten sposób możesz przejść cały labirynt nie gubiąc drogi. Komputer też

stosuje coś takiego dzięki temu jest możliwość korzystania z procedur.

Za każdym razem kiedy komputer wykonuje procedurę/funkcje zapisuje jej

adres na stosie. Jak skończy działanie w danej funkcji. następnie ściąga

ze stosu adres spod którego się dostał do funkcji i zaczyna wykonywanie

programu od tego adresu.

To dzięki stosowi jest możliwe wykonywanie funkcji w funkcjach, a aby było

jeszcze śmieszniej wywoływanie tej samej funkcji z funkcji która ją wywołuje

(wywołanie samej siebie) zwane rekurencją. Stos można też wykorzystać

do odwrócenia kolejności. Jak to zrobić... pomyśl, a jak nie kumasz to kup

sobie zeszyt 100 kartkowy i pobaw się karteczkami.

Na stosie można wykonywać tylko 2 operacje:

1. Odkładać na stos (PUSH)

2. Ściągać ze stosu (POP)

Koniec:

Kurcze sam nie wiem co ten artek jest wart, bo bardzo chce napisać coś więcej,

ale ile można napisać o STOS'ie, mógł bym napisać jeszcze 20 przykładów,

ale po co.

Wydaje mi się że to co napisałem powinno wystarczyć aby zrozumieć działanie

stosu. Jeśli nie to wyślij do mnie pytanko, a ja rozwinę ten temat.

==========

7.4 Algorytmy by CZaR|Ny

==========

Co to takiego ten algorytm? Czym to sie je? Jak wyglądają algorytmy? I sto tysięcy innych

pytań, na które znajdą się odpowiedzi. Więc (podobno zdania nie zaczyna się od A więc i więc,

ale w szkole nie jesteśmy :]) Algorytm jest pewnym zespołem reguł charakterystycznych dla

pewnych obliczeń lub czynności informatycznych. Proste, nie? No a jeżeli nie to zaraz się

wszystko wyjaśni - kilka prostych przykładów i wszystko będzie jasne.

Na sam początek rekurencja na prostym przykładzie. Wyobraź sobie, że właśnie skończyła się

impreza u Ciebie w domu - wszyscy już poszli do domów, a Ty masz oczywiście w mieszkaniu

niezły bałagan. Nie jesteś w stanie tego wszystkiego posprzątać za jednym zamachem. Idziesz

po kubeł i zaczynasz sprzątać śmieci - najpierw wrzucasz do kosza jednego śmiecia, potem

kolejnego i tak dalej i powoli obserwujesz jak strefa porządku wokół Ciebie się powiększa.

Jak tylko zostanie zakończone sprzątanie i nie będzie na ziemi i stołach więcej śmieci to

możesz uznać, że zadanie zostało wykonane. Rozwiązanie to jak przypatrzysz się bliżej ma

pewne cechy , które są typowe dla algorytmów rekurencyjnych, czyli:

- zakończenie jest określone w jasny sposób - jak w mieszkaniu nie będzie więcej śmieci to

możesz spokojnie usiąść bo zadanie zostało zakończone,

- i tak oto WIELKI problem został rozłożony na problemy elementarne, które jesteś w stanie

rozwiązać.

Poniżej opisze kilka przykładów:

1. Oblicznaie silni w sposób rekurencyjny

2. Ciąg Fibonacciego

3. Spirala

Ale zanim to zrobie to troche o rekurencji. Program, który teraz opisze jest bardzo podobny

do problemu, który opisałem wyżej. Przedstawie go tylko w sposób zbliżony do rzeczywistości

informatycznej.

No to do rozwiązania jest taki problem:

mamy taką oto tablice n liczb całkowitych tab[n]=tab[0], tab[1], ... , tab[n-1] i w takiej oto

tablicy mamy parametr x.

Więc jak będzie wyglądał przebieg algorytmu? Mniej więcej tak:

a) bierzemy pierwszy niezbadany element tablicy n-elementowej

b) jeśli aktualnie analizowany element tablicy równa się x to wtedy wpisz "OK" i zakończ

działanie algorytmu, w przeciwnym przypadku badaj dalej pozostałą część tablicy

n-1-elementowej. Jeśli zaś nie ma elementu x to trzeba zakończyć program np. wyświetlając

komunikat o niepowodzeniu.

Przykładowa realizacja algorytu rekurencyjnego:

#include <iostream.h>

#include <stdlib.h>

const n=10;

int tab[n]={2, 4, 6, -10, 15, -1, 44, 9, 11, 0};

void szukaj (int tab[n], int left, int right, int x)

//left, right - lewa i prawa granica poszukiwań

//tab = tablica x = wartosc do znalezienia

{

if(left>right)

cout<<"Element "<< x <<"nie zostal znaleziony\n";

else

if(tab[left]==x)

cout<<"Znalazlem element ktorego poszukujesz "<< x <<endl;

else

szukaj(tab, left+1, right, x);

}

Program zakończy swoje działanie w momencie odnalezienia elementu x lub wyjdzie poza granice

obszaru poszukiwań.

1. Obliczanie silni w sposób rekurencyjny

Cały niżej opisany algorytm opiera się na prostym wzorze matematycznym:

0! = 1,

n! = n*(n-1)! gdzie n>=1

Oto program, który oblicza silnie w sposób rekurencyjny:

#include <iostream.h>

unsigned long int silnia(int x)

{

if (x==0)

return 1;

else

return x*silnia(x-1);

}

Program po prostu liczy silnie według wyżej podanego wzoru matematycznego. Jeśli nie wierzycie to

przepiszcie go sobie pod jakimś kompilatorem. odstawić jakąś liczbę np. 3 i dać programowi to

policzyć a potem samemu spróbować to zrobić na kartce. Prawda, że proste? :]

2. Ciąg Fibonacciego

Ciąg Fibonacciego jest zdefiniowany następująco:

fib(0) = 1,

fib(1) = 1,

fib(n) = f(n-1)+fib(n) gdzie n>=2

A oto jak wygląda program:

#include <iostream.h>

unsigned long int fib(int x)

{

if (x<2)

return 1;

else

return fib(x-1)+fib(x-2);

}

Teraz przeanalizujmy na spokojnie dzrzewo wywołań rekurencyjnych:

************

+ fib(4) +

************

/ \

/ \

************ ************

+ fib(3) + : fib(2) :

************ ************

/ \ / \

/ \ / \

************ ************ ************ ************

: fib(2) : + fib(1) + : fib(1) : : fib(0) :

************ ************ ************ ************

/ \

/ \

************ ************

: fib(1) : : fib(0) :

************ ************

No i teraz spójrzcie jeszcze raz na drzewo. Każdy element w którym zastosowałem dwukropek

jest problemem elementarnym. Każdy problem o rozmiarze n>=2 zostaje rozbity na dwa mniejsze

problemy n-1 i n-2.

3. Spirala

Tutaj właśnie zostanie zaraz przedstawiony algorytm w postaci graficznej -program będzie

rysował tzw. spiralę czyli coś takiego:

****************************

*

********************** *

* * *

* * *

* ************** * *

* * * * *

* * * * * *

* * * * * *

* * ********** * *

* * * *

* * * *

* ****************** *

* *

* *

**************************

Przechodzimy do rozwiązania zadania. Wybieramy jako parę startową pewną parę (x,y). Idea

polega na narysowaniu 4 odcinków zewnętrznych spirali i dotarciu do punktu (x',y'). W nowym

punkcie startowym możemy już wywołać rekurencyjnie procedurę rysowania, która jest obarczona

pewnymi warunkami, które zagwarantują jej poprawne zakończenie.

No to zabieramy się za program:

#include <GRAPHICS.H>

#include <conio.h>

const double alpha=10;

void spirala(double lg,double x,double y)

{

if (lg>0)

{

lineto(x+lg,y);

lineto(x+lg,y+lg);

lineto(x+alpha,y+lg);

lineto(x+alpha,y+alpha);

spirala(lg-2*alpha,x+alpha,y+alpha);

}

}

void main()

{

int Karta, Tryb;

Karta = DETECT;

initgraph(&Karta, &Tryb, "d:\\tc\\bgi\\");

setgraphmode(Tryb);

moveto(90,50);

spirala(getmaxx()/2,getx(),gety());

getch();

closegraph();

}

Teraz na zakończenie wyjaśnienie zastosowania poszczególnych funkcji:

=========================================================================

+ FUNKCJA + ZASTOSOWANIE +

=========================================================================

+ lineto(x,y) + kreśli odcinek od punktu bieżącego do punktu (x,y) +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ moveto(x,y) + przesuwa kursor graficzny do punktu (x,y) +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ getmaxx() + zwraca maksymalną współrzędną poziomą +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ getmaxy() + zwraca maksymalną współrzędną pionową +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ getx() + zwraca aktualną współrzędną poziomą +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ gety() + zwraca aktualną współrzędną pionową +

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

No i na razie to wszystko. Na zakończenie podam jakieś ciekawe Linki do stron poświęconych

zagadnieniom Algorytmiki, gdzie będziecie mogli rozwijać swoją wiedzę dalej o ile zechcecie.

Zresztą widzicie sami, że algorytmy nie są wcale takie straszne i są bardzo pomocne przy

rozwiązywaniu wielu zagadnień programistycznych.

==========

7.5 Zrozumieć kod CRC by Estor

==========

Wstęp

Czym jest CRC? Cyclic Redundancy Checking w skrócie CRC jest to

wynik wykonania obliczeń matematycznych na bloku danych, który reprezentuje

zawartość i organizacje tych danych. O CRC możesz myśleć jak o wykonaniu

"odcisku palca" dla bloku danych. Wartość ta, czy też odcisk palca nazywa

się sumą kontrolną.

Dzięki porównaniu sumy kontrolnej jednego bloku danych z inną sumą kontrolną

innego bloku danych można stwierdzić czy te dane są identyczne, bez

porównywania całych bloków. CRC najczęściej wykorzystuje się przy

transporcie plików z jednej lokalizacji do drugiej, w zależności od medium

(nośnik informacji np. dyskietka, kabel, fale radiowe) w którym pliki są

transportowane, może dojść do uszkodzenia danych.

Kod CRC pozwala wykryć takie uszkodzenie, większa część protokołów w sieci

używa tego kodu do sprawdzania prawidłowości danych.

Najbardziej znane kody (sumy kontrolne) to:

CRC-12, CRC-16, CRC-CCITT, CRC-32. Każdy z tych kodów różni się długością

kodu oraz wielomianem.

W tym artku postaram się skupić na kodzie CRC-16,słowo kod i suma kontrolna

będą stosowane wymiennie.

Wielomian

W anglojęzycznej dokumentacji kodu CRC bardzo często pojawia się

słowo poly lub polynomial, co oznacza wielomian, ale co to za wielomian,

sam się troszkę na początku wystraszyłem, ale okazuje się że wielomian ten

służy tylko do wyznaczenia pewnej liczby, która jest dzielnikiem bloku

danych 8). np.

CRC_Poly = x^15 + x^14 + x^1 + 1

Wygląda to dość okropnie, ale nas jako programistów interesuje tylko wynik

tych wielomianów.

CRC_Poly = 1100 0000 0000 0011 = 0xC003

Tu ważna uwaga w dokumentacji bardzo często można się spotkać z czymś takim

że wielomian x^16 + x^15 + x^2 + 1 równa się 0xA001, co wydaje mi się że

jest błędne!.

Przed napisaniem tego artka przestudiowałem kilkanaście dokumentów po

angielsku, niestety okazuje się że wiele z nich przepisanych z innych prac,

i ten błąd ciągnie się już od dawna. Aż wreszcie znalazłem stonkę na której

jest opisany proces wyznaczenia wartości wielomianu.

Wyznaczenie wielomianu binarnego:

Wielomian binarny z współczynnikiem z pola bitowego. Dla przykładu

X^5+X^3+X^1+X^0 = X^5+X^3+X+1 = 101011(binarnie). Jak widać w przykładzie,

bit z prawej strony reprezentuje najmniejszą wartość wielomianu czyli X^0.

Nic skomplikowanego.

Co to jest długość kodu? jest to rozmiar liczby (liczony w bitach) po

wykonaniu działań matematycznych, rozmiar wyznacza najstarszy zapalony bit.

I tak CRC-12 składa się z 12 bitów, CRC-16 z 16, a CRC-32 jak się zapewne

można domyślić z 32 bitów.

Jak to działa czyli algorytm:

Nie będzie żadnego kodu, tylko opis kroków które należy wykonać aby

wyznaczyć kod CRC.

Rejestr CRC - Zmienna w programie w której jest przechowywany kod CRC

1. Określ ile bajtów obejmuje blok danych.

2. Wypełnij wszystkie bity rejestru CRC wartością 1

3. Pobierz bajt danych

4. Wykonaj operacje XOR na Rejestrze CRC pobranym bajtem

5. Sprawdź czy zerowy bit jest ustawiony

[Jeśli tak]

6. Przesuń w prawo o jeden bit rejestr CRC

7. Wykonaj operacje : rejestr CRC XOR wielomian

[Jeśli nie]

8. Tylko przesuń w prawo o jeden bit

9. Kroki od 5 powtarzaj aż zostanie sprawdzony cały bajt

10. Jeśli są jeszcze dane to pobierz kolejną daną z bloku danych i wykonaj wszystko od kroku 4

11. Koniec generowania kodu CRC

Przykład:

Proponuje wyznaczyć kod CRC dla 2 bajtowego bloku danych 01,07

wielomianem A001(hex), dla poprawienia czytelności wartości będą zapisywane

binarnie, co 4 bity jest odstęp jednej spacji, pomiędzy bajtami są 2 spacje.

Wszystko po to aby poprawić czytelność przykładu.

CRC_Reg = 1111 1111 1111 1111 Krok2. Wszystkie bity na 1

XOR 0000 0000 0000 0001 Krok4. Wykonanie operacji XOR z bajtem

danych tu 1.

CRC_Reg = 1111 1111 1111 1110 Wynik po XOR Krok5 = false, wykonuje krok 8.

SHIFT = 0111 1111 1111 1111 Wynik po przesunięciu w kroku 8.

Dokonuje porównania w kroku 5.

SHIFT = 0011 1111 1111 1111 Poprzednio zerowy bit mial wartość 1,

XOR 1010 0000 0000 0001 więc przesuwamy i XOR'ujemy

CRC_Reg = 1001 1111 1111 1110 Wynik po XOR Krok5 = false, wykonuje krok 8.

SHIFT = 0100 1111 1111 1111 Wynik po przesunięciu w kroku 8.

Dokonuje porównania w kroku 5.

SHIFT = 0010 0111 1111 1111 Poprzednio zerowy bit mial wartość 1,

XOR 1010 0000 0000 0001 więc przesuwamy i XOR'ujemy

CRC_Reg = 1000 0111 1111 1110

SHIFT = 0100 0011 1111 1111

SHIFT = 0010 0001 1111 1111

XOR 1010 0000 0000 0001

CRC_Reg = 1000 0001 1111 1110

SHIFT = 0100 0000 1111 1111

SHIFT = 0010 0000 0111 1111

XOR = 1010 0000 0000 0001

CRC_Reg = 1000 0000 0111 1110 To jest kod CRC dla danej o wartości jeden,

bity już zostały przesunięte o 8 w prawo

Wykonuje krok 10.

XOR 0000 0000 0000 0111 A tu już jest Krok 4 tym razem z wartością 7.

CRC_Reg = 1000 0000 0111 1001 Krok 5

SHIFT = 0100 0000 0011 1100 Krok 6

XOR = 1010 0000 0000 0001

CRC_Reg = 1110 0000 0011 1101 Krok 5.

SHIFT = 0111 0000 0001 1110 Krok 6

XOR = 1010 0000 0000 0001

CRC_Reg = 1101 0000 0001 1111 Krok 5.

SHIFT = 0110 1000 0000 1111 Krok 6

XOR = 1010 0000 0000 0001

CRC_Reg = 1100 1000 0000 1110 Krok 5.

SHIFT 0110 0100 0000 0111 Krok 8. a później 5

SHIFT 0011 0010 0000 0011 Krok 6

XOR = 1010 0000 0000 0001

CRC_Reg = 1001 0010 0000 0010 Krok 5.

SHIFT = 0100 1001 0000 0001 Krok 8. a później 5

SHIFT = 0010 0100 1000 0000 Krok 6

XOR = 1010 0000 0000 0001

CRC_Reg = 1000 0100 1000 0001 Krok 5.

SHIFT = 0100 0010 0100 0000 Krok 6

XOR = 1010 0000 0000 0001

CRC_Reg = 1110 0010 0100 0001

Wybik(Hex): = E 2 4 1

A więc kod CRC dla danych 01,07 z wielomianem A001 wynosi E241.

I to już wszystko, następnym razem napsize jak sprawdzić czy kod CRC

jest prawidłowy.

==========

7.6 Kompresja metodą RLE by Estor

==========

Wstęp:

Algorytm RLE czyli run-lenght encoding jest algorytmem który

wykorzystuje się do kompresji grafiki rysowanej ręcznie. Algorytm

wykorzystuje fakt iż każdy obraz w grafice rastrowej wykazuje pewną

koherencje , czyli dużą liczbę pixli o tym samym kolorze sąsiadujących ze

sobą.

Tego typu kompresja została użyta między innymi w plikach PCX, FLI, LBM na

Amigach znanym jako IFF. RLE można również używać do pracy z maskami

bitowymi czy też rastrowymi.

Działanie:

Weźmy dowolny ciąg bajtów np.

5, 5, 5, 5, 1, 0, 1, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7

Ma on długość 22 bajtów i można w nim wydzielić 2 grupy bajtów:

[1] Grupa w której określony bajt ma następcę o tej samej wartości:

{5, 5, 5, 5}, 1, 0, 1,{ 5, 5}, 0, {2, 2, 2, 2, 2, 2, 2}, 3, 4, 5, 6, 7

[2] Grupa w której wartości nie mają sąsiadów o tej samej wartości:

5, 5, 5, 5, {1, 0, 1}, 5, 5,{ 0}, 2, 2, 2, 2, 2, 2, 2,{ 3, 4, 5, 6, 7}

Kompresja polega na znajdowaniu dużej liczby bajtów pasujących do grupy [1].

Grupy takie są zapisywane jako 2 bajty. Pierwszy określa ile razy dana

wartość powtarza się w danej grupie, 2 określa wartość.

Przykładowy ciąg można zapisać następująco:

Liczba

Lp. powtórzeń Wartość

1 4 5

2 1 1

3 1 0

4 1 1

5 2 5

6 1 0

7 7 2

8 1 3

9 1 4

10 1 5

11 1 6

12 1 7

Czyli po skompresowaniu dane urosły do 24 bajtów a więc nie ma kompresji.

Z tego powodu w kompresji używa się liczby ze znakiem.

1 bajt może przyjmować wartości z 2 zakresów:

[1] od 0 do 255 Bajt bez znaku

[2] od -128 do 127 Bajt ze znakiem

Przez takie ulepszenie można zakodować obie grupy liczb, np. grupę [1] na

liczbach dodatnich, zaś grupę [2] na liczbach ujemnych.

Może zaprezentuje to na przykładzie, używając ciągu z początku tego

dokumentu:

Liczba

Lp. powtórzeń Wartość

1 +4 5

2 -3 1,0,1

3 +2 5

4 -1 0

5 +7 2

6 -5 3,4,5,6,7

Ostatecznie zapis w pamięci będzie wyglądać tak:

4 ,5, -3, 1, 0, 1, 2, 5, -1, 0, 7, 2, -5, 3, 4, 5, 6, 7

22 Bajty zostały skompresowane do 18, dekompresor powinien przeczytać owy

zapis następująco

1. Zapisz w kolejnych 4 bajtach wartość 5

{4 ,5 }, -3, 1, 0, 1, 2, 5, -1, 0, 7, 2, -5, 3, 4, 5, 6, 7

wynik: [5, 5, 5, 5]

2. Skopiuj kolejne 3 bajty

4 ,5,{-3, 1, 0, 1}, 2, 5, -1, 0, 7, 2, -5, 3, 4, 5, 6, 7

wynik: 5, 5, 5, 5,[1, 0, 1]

3. Zapisz w 2 bajtach wartość 5 ::

4 ,5, -3, 1, 0, 1, {2, 5,}-1, 0, 7, 2, -5, 3, 4, 5, 6, 7

wynik: 5, 5, 5, 5, 1, 0, 1,[5, 5]

4. Skopiuj tylko 1 bajt o wartości 0

4 ,5, -3, 1, 0, 1, 2, 5, { -1, 0,} 7, 2, -5, 3, 4, 5, 6, 7

wynik: 5, 5, 5, 5, 1, 0, 1, 5, 5, [0]

5. Zapisz w 7 bajtach liczbę 2

4 ,5, -3, 1, 0, 1, 2, 5, -1, 0, {7, 2,} -5, 3, 4, 5, 6, 7

wynik: 5, 5, 5, 5, 1, 0, 1, 5, 5, 0, [2, 2, 2, 2, 2, 2, 2]

6. Skopiuj 5 kolejnych bajtów

4 ,5, -3, 1, 0, 1, 2, 5, -1, 0, 7, 2, {-5, 3, 4, 5, 6, 7}

wynik: 5, 5, 5, 5, 1, 0, 1, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, (3, 4, 5, 6, 7)

Ilość zaoszczędzonego miejsca nie jest oszałamiająca, może się nawet zdarzyć

że obrazek będzie większy od oryginału, np. ze skanowane zdjęcie.

Wynika to z tego że najmniejszą porcją informacji są 2 bajty, nie może być

mniej ponieważ pierwszy określa liczbę powtórzeń, zaś drugi wartość

powtarzaną.

Implementacja

No cóż nie jest to kanapka z serem i algorytm można zaimplementować

na różne sposoby, czego przykładem może być powstanie kilku "standardów"

zapisu obrazu czyli wspomniane wcześniej PCX, LBM, IFF, FLI, BMP_RLE itd...

Podczas implementowania funkcji należy pamiętać iż musi ona znać rozmiar

kompresowanego bloku w czasie kompresji

jak i dekompresji. Rozmiar jest jedyną wartością która może określić

miejsce końca bloku danych.

Algorytm kompresji:

Założenia

t[] Tablica z elementami do kompresji

pos Pozycja w tablicy

count liczba powtórzeń

tmp zmienna tymczasowa

len długość bloku do kompresji

c_len długość bloku skompresowanego

1. Nadanie wartości początkowych dla t[], pos=0, c_len=0

2. Pobierz wartość z t[pos] do tmp, count=1;

3. Zwiększ wartość pos o 1

4. Czy tmp == t[pos]

[Jeśli równe]

5. count++

6. pos++

7. Dopóki (tmp == tmp[pos] i count < 127 oraz pos < len) goto pkt5.

8. Zapisz do wyjścia 2 bajty: count, tmp

9. dodaj 2 do c_len

10. Jeśli pos < len goto pkt 2, w przeciwnym wypadku zakończ.

[Jeśli różne]

11. W zmiennej tmp zapisz wartość pos

12. count++

13. pos++

14. Dopóki (t[pos-1] != t[pos] i count < 127 oraz pos < len)

goto pkt 11.

15. Zmień znak wartości count na minus

16. Zapisz do wyjścia bajt count oraz skopiuj count bajtów zaczynając

od pozycji t[tmp]

17. Dodaj do c_len wartość count+1

18. Jeśli pos < len goto pkt 2, w przeciwnym wypadku zakończ.

Algorytm zakłada że bajt count nie może mieć wartości ZERO oraz -128,

oczywiście można wykonać taką implementacje ale osobiście proponuje zostawić

je sobie jako znaczniki np. w mojej wersji kompresji obrazu wartość 0

oznacza koniec linii, a -128 zostało do przyszłego użycia.

Algorytm de-kompresji:

Założenia:

t[] Tablica z elementami do kompresji

pos pozycja w tablicy

count liczba powtórzeń

tmp zmienna tymczasowa

len długość bloku do kompresji

d_len długość bloku po dekompresji

1. Nadanie wartości początkowych dla t[], pos=0, d_len=0

2. Pobierz wartość z t[pos] do count

3. Czy wartość count > 0 (dodatnia)

[Jeśli TAK]

4. pos++

5. Do tmp pobierz wartość z t[pos]

6. Zapisz wartość z tmp do wyjścia tyle razy ile jest w count

7. Dodaj do d_len wartość count

8. pos++

9. Jeśli pos < len goto pkt 2.

10. Zakończ działanie

[Jeśli NIE]

11. Zmień znak count na przeciwny (dodatni)</LI>

12. pos++

13. Kopiuj count bajtów do wyjścia

14. Dodaj do d_len wartość count

15. pos++

16. Jeśli pos < len goto pkt 2.

17. Zakończ działanie

Po zdekompresowaniu pliku wartość d_len powinna zawierać długość

zdekompresowanego fragmentu w bajtach.

Koniec:

Efektywność kompresji jest w znacznym stopniu uzależniona od typu danych,

im więcej bajtów o tych samych wartościach sąsiaduje obok siebie tym lepszy

efekt kompresji. Jest on w zupełności wystarczający do kompresowania

animacji duszków gdzie przed kompresją wycina się fragmenty które powtarzają

się pomiędzy conajmniej 2 klatkami animacji ale o tym napisze przy opisie

algorytmu rozszerzającego możliwości RLE i który został użyty w animacji

zapisanej w formacie FLI, FLC. Pozatym RLE nie ogranicza się tylko do

kompresji, tak jak napisałem już na początku można go użyć do kodowania

masek bitowych dla ikon, duszków itp. co w znacznym stopniu przyspiesza ich

rysowanie uwzględniając przeźroczystość.

Miłej zabawy...

---------------------------------------------------------------------------------------------

---------------------------

8. Linki

---------------------------

http://www.algorytm.cad.pl

http://www.faqs.org

http://www.linuxindex.pl/index.html

http://lanzone.koti.com.pl

http://republika.pl/dief/main.html

http://www.underground.org.pl

http://nevillon.pac.pl

http://www.linux.labs.eu.org

http://www.ahg.prv.pl/

http://www.robertgraham.com/pubs/sniffing-faq.html

http://directx.w.interia.pl/

http://arstechnica.com/paedia/w/wireless/security-2.html

http://www.blackalchemy.to/

http://www.secadministrator.com/articles/index.cfm?articleid=24873

http://www.ntsecurity.net/Articles/Index.cfm?ArticleID=26539

http://www.pl.tomshardware.com/network/02q3/020719/

http://www.networld.pl/suplementy/wlan/wlan.html

http://orfi.uwm.edu.pl/~borowik/

http://aknet.com.pl/cmc/siec.htm

---------------------------------------------------------------------------------------------

---------------------------

9. Zakończenie

---------------------------

No na razie to tyle. Jeśli chcecie więcej to bedziecie musieli poczekać jeszcze troche - za niedługo weźmiemy sie za

pisanie drugiego numeru HWF.

Greetz: thx 4 @ll którzy życzyli nam tego, żeby to FAQ powstało i dla wszystkich, którzy to FAQ tworzyli i pomagali nam

poprawiać wszystkie błędy merytoryczne ;]. Szczególne podziękowania dla chłopaków z UPL i Nevillonu ;]

Ungreetz: dla jednego takiego osła, który się uważa za super hax0ra i pozjadał wszystkie rozumy świata - FOK U Trumna -

stań z boku i nie prowokuj! :P

Tutaj podam jak się można z nami skontaktować:

Bartosz "CZaR|Ny" Pieczka

mail: czarny21@poczta.fm

http://www.knowledge-attack.xu.pl

Marcin "Estor" Waśniowski

estor@interia.pl

http://www.estor.terramail.pl

qrack

qrack@wp.pl

krasztest

krasztest@konin.lm.pl

Remarks

eudajmonia@interia.pl

ASSmodeus

assmodeu@wp.pl

----------------------------------------------------------------------------------------------------------------

......:::H4cK3rW4n4b3F4Q Pazdziernik 2002:::......



Wyszukiwarka

Podobne podstrony:
Monitoring stanu zagrożeń dla bezpieczeństwa teleinformatycznego Polski
bezpieczeństwo teleinformatyczne
BEZPIECZENSTWO TELEINFORMATYCZNE
Dobór bezpieczników do zabezpieczania przewodów i kabli
Dobór bezpieczników do zabezpieczania przewodów i kabli, elektryczne, katalogi
2008 01 Bezpieczeństwo teleinformatyczne informacji niejawnych
Dobór bezpieczników do zabezpieczania przewodów i kabli
Dokumentowanie systemu bezpieczenstwa teleinformatycznego polityka bezpieczenstwa
bezpieczeństwo teleinformatyczne1
2008 03 Bezpieczeństwo teleinformatyczne danych osobowych
Normy i standardy z zakresu bezpieczenstwa informacyjnego i teleinformatycznego
07.10.12r. - Wykład -Taktyka i technika interwencji policyjnych i samoobrona, Sudia - Bezpieczeństwo
Bezpieczniki w nowoczesnych układach zabezpieczeń
System zabezpieczenia społecznego, studia bezpieczeństwo narodowe UZ
Linux Serwery Bezpieczenstwo lisebe
Zabezpieczenia bezpiecznikami przewodów połączonych równolegle
Linux Serwery Bezpieczenstwo li Nieznany
2007 02 SELinux – bardziej bezpieczny Linux [Bezpieczenstwo]
07 Linux SSH Bezpieczna powłoka

więcej podobnych podstron