background image

2001 © Sławomir Jeżewski Katedra Informatyki Stosowanej 
PŁ.

Programowanie sieciowe 

Wykład VIII a

Usuwanie błędów 

z programów sieciowych) 

background image

Programy narzędziowe w systemach

UNIX

Śledzenie wywołań systemowych
   truss ( SVR4 )

      ktrace , kdump  BSD/OS

   strace ( Linux )

background image

Programy narzędziowe w systemach

UNIX

   Monitorowanie aktywności sieci

netstat

tcpdump

Otwarte pliki

lsof

background image

truss  

 

truss [-fcaeildD] [ - [tTvx] [!] syscall ,...] [ - [sS]  [!]  signal  ,...] [ - 

[mM] [!] fault ,...] [ - [rw] [!] fd ,...]  [ - [uU] [!] lib ,... : [:] [!] 
func ,...] [-o outfile] com-

     mand | -p pid...

 Wywołania funkcji systemowych  

czynione przez program 

PID istniejącego procesu

Nazwa programu do wywołania

background image

 

 

truss  

 

truss [-fcaeildD] [ - [tTvx] [!] syscall ,...] [ - [sS]  [!]  signal  ,...] [ - 

[mM] [!] fault ,...] [ - [rw] [!] fd ,...]  [ - [uU] [!] lib ,... : [:] [!] 
func ,...] [-o outfile] com-

     mand | -p pid...

 Wywołania funkcji systemowych  

Plik wyjściowy

Podążaj za potomkami

background image

 

 

truss  

 

truss [-fcaeildD] [ - [tTvx] [!] syscall ,...] [ - [sS]  [!]  signal  ,...] [ - 

[mM] [!] fault ,...] [ - [rw] [!] fd ,...]  [ - [uU] [!] lib ,... : [:] [!] 
func ,...] [-o outfile] com-

     mand | -p pid...

 Wywołania funkcji systemowych  

-o outfile

Plik wyjściowy

-f

Podążaj za potomkami

-c

Zliczaj wywołania

-a –e 

Wyświetlaj łańcuchy znaków 

(-a) i otoczenie ( -e) 

przekazywanych do funkcji exec

background image

 

 

truss  

 

truss [-fcaeildD] [ - [tTvx] [!] syscall ,...] [ - [sS]  [!]  signal  ,...] [ - 

[mM] [!] fault ,...] [ - [rw] [!] fd ,...]  [ - [uU] [!] lib ,... : [:] [!] 
func ,...] [-o outfile] com-

     mand | -p pid...

 Wywołania funkcji systemowych  

-o outfile

Plik wyjściowy

-f

Podążaj za potomkami

-c

Zliczaj wywołania

-a –e 

Wyświetlaj łańcuchy znaków 

(-a) i otoczenie ( -e) 

przekazywanych do funkcji exec

-d -D

Znacznik czasu/ diff

-t[!]

Wyświetlaj/nie wyświetlaj 

wywołania funkcji z listy

-T[!][syscall]

Wyświetlaj/nie wyświetlaj 

wywołania funkcji z listy

Które zakańczają proces

-v[!] [syscall]

Wyświetlaj/nie wyświetlaj 

Zawartość struktur przekazanych 

do wywołania 

background image

 

 

truss  

 

truss [-fcaeildD] [ - [tTvx] [!] syscall ,...] [ - [sS]  [!]  signal  ,...] [ - 

[mM] [!] fault ,...] [ - [rw] [!] fd ,...]  [ - [uU] [!] lib ,... : [:] [!] 
func ,...] [-o outfile] com-

     mand | -p pid...

 Wywołania funkcji systemowych  

-s[!] [signal]

-S [!] signal

Wyświetlaj/nie wyświetlaj 

sygnały

-u[!]lib:lib: [!] func

Wywołania funkcji użytkownika 

Z bibliotek

background image

 

 

strace 

 

truss [-fcaeildD] [ - [tTvx] [!] syscall ,...] [ - [sS]  [!]  signal  ,...] [ - 

[mM] [!] fault ,...] [ - [rw] [!] fd ,...]  [ - [uU] [!] lib ,... : [:] [!] 
func ,...] [-o outfile] com-

     mand | -p pid...

 Wywołania funkcji systemowych  

-s[!] [signal]

-S [!] signal

Wyświetlaj/nie wyświetlaj 

sygnały

-u[!]lib:lib: [!] func

Wywołania funkcji użytkownika 

Z bibliotek

background image

 

 

truss 

 

execve("/usr/bin/ls", 0xFFBFFA74, 0xFFBFFA7C)  argc = 1

resolvepath("/usr/bin/ls", "/usr/bin/ls", 1023) = 11
resolvepath("/usr/lib/ld.so.1", "/usr/lib/ld.so.1", 1023) = 16
stat("/usr/bin/ls", 0xFFBFF848)                 = 0
open("/var/ld/ld.config", O_RDONLY)             = 3
fstat(3, 0xFFBFF2E8)                            = 0
mmap(0x00000000, 192, PROT_READ, MAP_SHARED, 3, 0) = 0xFF3B0000
close(3)                                        = 0
stat("/usr/local/qt/lib/libc.so.1", 0xFFBFF18C) Err#2 ENOENT
stat("/usr/local/lib/libc.so.1", 0xFFBFF18C)    Err#2 ENOENT
stat("/usr/lib/libc.so.1", 0xFFBFF18C)          = 0
open("/usr/lib/libc.so.1", O_RDONLY)            = 3
fstat(3, 0xFFBFF18C)                            = 0
mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF3A0000
mmap(0x00000000, 802816, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF280000
mmap(0xFF33C000, 24464, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 704512) = 

0xFF33C000

mmap(0xFF342000, 6644, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANON, -1, 0) = 

0xFF342000

munmap(0xFF32C000, 65536)                       = 0
resolvepath("/usr/lib/libc.so.1", "/usr/lib/libc.so.1", 1023) = 18
memcntl(0xFF280000, 117288, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
close(3)                                        = 0
stat("/usr/local/qt/lib/libdl.so.1", 0xFFBFF18C) Err#2 ENOENT
stat("/usr/local/lib/libdl.so.1", 0xFFBFF18C)   Err#2 ENOENT
stat("/usr/lib/libdl.so.1", 0xFFBFF18C)         = 0
open("/usr/lib/libdl.so.1", O_RDONLY)           = 3

background image

 

 

strace 

STREAMS trace messages

DESCRIPTION
strace without arguments writes all STREAMS event trace messages  from  all drivers 
and modules to its standard output.  These messages are obtained from the STREAMS 
log driver (see log(7D)).  If  arguments  are provided, they must be in triplets of the 
form mid, sid, level, where mid  is  a  STREAMS module   ID  number, sid is a sub-ID 
number,  and level is a tracing priority level. Each triplet indicates that  tracing  

messages  are  to  be received from the given module/driver, sub-ID (usually

 

indicating minor device), and priority level equal to, or less than the given level. The 
token all may be used for any member to  indicate  no  restriction  for  that attribute.

<seq> <time hh:mm:ss> <ticks> <level> <flags> <module Id > <sub ID> 
<message text>

background image

 

 

lsoff 

list open files 

 

lsof [ -?abChlnNOPRstUvVX ] [ -A A ] [ -c c ] [ +|-d d  ]  [+|-D D ] [ +|-f [cfgGn] 

] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [ +|-L [l] ] [ -m m ] [ +|-M ] [ -o [o] ] [ -p s ]  
[ +|-r  [t]  ]  [ -S [t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -- ]     [names]

background image

 

 

lsoff 

list open files 

COMMAND     PID     USER   FD   TYPE        DEVICE   SIZE/OFF     NODE NAME
sched         0     root  cwd   VDIR          32,0       1024        2 /
init          1     root  cwd   VDIR          32,0       1024        2 /
init          1     root  txt   VREG          32,0     913652       46 / (/dev/dsk/c0t0d0s0)
init          1     root  txt   VREG          32,0       3984     1759 / (/dev/dsk/c0t0d0s0)
init          1     root  txt   VREG          32,0     192000      148 / (/dev/dsk/c0t0d0s0)
init          1     root    0u  FIFO          32,0        0t0    18154 /etc/initpipe
pageout       2     root  cwd   VDIR          32,0       1024        2 /
fsflush       3     root  cwd   VDIR          32,0       1024        2 /
syseventd    60     root  cwd   VDIR          32,0       1024        2 /
syseventd    60     root  txt   VREG          32,4      23776   215499 /usr (/dev/dsk/c0t0d0s4)
syseventd    60     root  txt   VREG          32,4      15468   223958 /usr (/dev/dsk/c0t0d0s4)
syseventd    60     root  txt   VREG          32,4      13304   222917 /usr (/dev/dsk/c0t0d0s4)
syseventd    60     root  txt   VREG          32,4      37060   222916 /usr (/dev/dsk/c0t0d0s4)
syseventd    60     root  txt   VREG          32,4      13576   222915 /usr (/dev/dsk/c0t0d0s4)
syseventd    60     root  txt   VREG          32,4     743856   206662 /usr/lib/libnsl.so.1
syseventd    60     root  txt   VREG          32,4      22184   396477 /usr/lib/locale/pl_PL.ISO8859-2/pl_PL.ISO8859-
2.so.2
syseventd    60     root  txt   VREG          32,4     866456   206549 /usr/lib/libc.so.1
syseventd    60     root  txt   VREG          32,4      16768   280711 /usr/platform/sun4u/lib/libc_psr.so.1
syseventd    60     root  txt   VREG          32,4      21676   206595 /usr/lib/libmp.so.2
syseventd    60     root  txt   VREG          32,4     138560   206622 /usr/lib/libthread.so.1
syseventd    60     root  txt   VREG          32,4      33460   207029 /usr (/dev/dsk/c0t0d0s4)
syseventd    60     root  txt   VREG          32,4      12532   206573 /usr/lib/libdoor.so.1

background image

 

 

netstat 

show network status

SYNOPSIS
     netstat [-anv] [-f address_family] [-P protocol]

     netstat -g [-n] [-f address_family]

     netstat -p [-n] [-f address_family {inet inet6 unix} ]

     netstat -s [-f address_family] [-P protocol]

     netstat -m [-v]

     netstat -i [-I interface] [-an] [-f address_family]  [inter-
     val [count]]

     netstat -r [-anv] [-f address_family | filter]

     netstat -M [-ns] [-f address_family]

     netstat -D [-I interface] [-f address_family]

background image

 

 

netstat 

show network status

•UDP: IPv4
•   Local Address         Remote Address     State
•-------------------- -------------------- -------
•zly.kis.p.lodz.pl.6147 moon.kis.p.lodz.pl.domain   Connected
•zly.kis.p.lodz.pl.59258 moon.kis.p.lodz.pl.domain   Connected

•TCP: IPv4
•   Local Address        Remote Address    Swind Send-Q Rwind Recv-Q  State
•-------------------- -------------------- ----- ------ ----- ------ -------
•zly.kis.p.lodz.pl.54090 irc.lublin.pl.6667    7300      0 48738      0 ESTABLISHED
•zly.kis.p.lodz.pl.63230 kujawiak.man.lodz.pl.nntp  8760      0 49640      0 CLOSE_WAIT
•zly.kis.p.lodz.pl.57263 poznan.irc.pl.6667    8192      0 48734      0 ESTABLISHED
•zly.kis.p.lodz.pl.55910 203-173-29-170.dyn.iinet.net.au.6883 64223      0 49730      0 
ESTABLISHED
•zly.kis.p.lodz.pl.36180 javier-el-mejor.linkshosting.com.4661  7098      0 48459      0 
ESTABLISHED

background image

Proceduralny model 

programu

background image

Proceduralny model 

programu

background image

Proceduralny model 

programu - rozszerzenie

background image

Proceduralny model 

programu - rozszerzenie

background image

Struktura programu

background image

Model klient-server 

usługi RPC

Program wywołujący procedurę – klient

Program oferujący procedury – serwer

background image

Model klient-server 

usługi RPC

UDP

TCP

background image

Algorytm postępowania 

przy uruchamianiu 

serwera

Utwórz gniazdo bierne

Zarejestruj numer gniazda w bazie 
odwzorowań

Przetwarzaj żądania kolejnych klientów

Oczekuj na połączenie klienta 

Pobierz dane od klienta 

Wykonaj działania

Zwróć wyniki

Zamknij połączenie

background image

Działanie serwera

Oczekuj na połączenie klienta

Pobierz dane od klienta  * 

Wykonaj działania

Zwróć wyniki *

Zamknij połączenie

background image

Algorytm  działania 

klienta

Połącz z zarządcą bazy odwzorowań ( Port 111) 

Zapytaj o numer portu przydzielonego 
programowi

Połącz z programem RPC na porcie wskazanym 
przez zarządcę 

Wyślij komunikat z poleceniem

background image

Format komunikatów 

RPC

struct rpc_msg 
{
    unsigned int mesgid;
    msg_type mesgt;
    union 
      {
        call_body cbody;
        rply_body rbody;
      }        
}

struct call_body
{
    unsigned int rpcvers;
    unsigned int rprog;
    unsigned int rprogvers;
    unsigned int rproc;
    struct opaque_auth cred;
    struct opaque_auth verf;
    struct args argumenty;

}

struct opaque_auth 
{
  auth_type atype;
  opaque body<400;
}

AUTH_NULL
AUTH_UNIX
AUTH_SHORT
AUTH_DES
AUTH_KERBEROS

background image

Identyfikacja procedury

( program, procedura, wersja )

0x00000000 - 0x1fffffff

Sun Microsystems

0x20000000 - 0x3fffffff

0x40000000 - 0x5fffffff

0x60000000 - 0x7fffffff

0x80000000 - 0x9fffffff

0xa0000000 - 0xbfffffff

0xc0000000 - 0xdfffffff

0xe0000000 - 0xffffffff

Administrator  w danym ośrodku
Numery tymczasowe
Numery zarezerwowane
Numery zarezerwowane
Numery zarezerwowane
Numery zarezerwowane
Numery zarezerwowane

background image

Zewnętrzna reprezentacja 

Danych 

XDR

Problem N-kwadrat konwersji danych

Konwersja  symetryczna 

Big Endian

background image

Podstawowe zasady konwersji XDR

int 

32 bity  Liczba całkowita ze znakiem 

void

 

unsigned int  32 bity  Liczba całkowita bez znaku 
bool 

32 bity  Wartość boolowska 

double 

64 bity  Liczba zmiennoprzecinkowa  

hyper 

64 bity

Liczba całkowita bez znaku 

Unsigned hyper 

64 bity

Liczba całkowita bez znakiem 

float 

32 bity  Liczba zmiennoprzecinkowa  

Zmienna

 

Rozmiar 

Opis 

background image

Podstawowe zasady konwersji XDR

opaque 

Dowolna 

Dane nie konwertowane 

Typ zmiennej  

Rozmiar 

Opis 

string 

Dowolna

Łańcuch znaków ASCII 

fixed array 

Dowolna

Tablica o ustalonym rozmiarze 

symbolic constant 

Dowolna

stała symboliczna  

structure 

Dowolna

struktura C 

Discriminated
union 

Dowoln

a

unia C / rekord z wariantami 

Pascal 

counted array 

Dowolna

Tablica o zmiennym rozmiarze   

background image

Konstrukcja komunikatu 

XDR 

xdr_bool

xdr_int

xdr_char

xdr_double

xdr_ptrchar

xdr_ptrdouble

xdr_ptrint

xdr_float

xdr_float

xdr_enum

xdr_float

xdr_void

xdr_string

xdr_vector

xdrmem_creat

e

background image

Model procedury rpcgen

Procedura A 

Procedura
sprzęgająca 

Procedura
łącznikowa
klienta 

Klient

Procedura A 

Procedura
sprzęgająca 

Procedura
łącznikowa 

serwera 

Serwer

background image

2001 © Sławomir Jeżewski Katedra Informatyki Stosowanej 
PŁ.

Programowanie sieciowe 

Wykład II b

Rozgłaszanie i rozsyłanie grupowe 

( Protokół IGMP )

Internet Group Management Protocol 


Document Outline