2001 © Sławomir Jeżewski Katedra Informatyki Stosowanej
PŁ.
Programowanie sieciowe
Wykład VIII a
Usuwanie błędów
z programów sieciowych)
Programy narzędziowe w systemach
UNIX
•
Śledzenie wywołań systemowych
truss ( SVR4 )
ktrace , kdump BSD/OS
strace ( Linux )
Programy narzędziowe w systemach
UNIX
Monitorowanie aktywności sieci
•
netstat
•
tcpdump
Otwarte pliki
•
lsof
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
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
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
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
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
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
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
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>
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]
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
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]
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
Proceduralny model
programu
Proceduralny model
programu
Proceduralny model
programu - rozszerzenie
Proceduralny model
programu - rozszerzenie
Struktura programu
Model klient-server
usługi RPC
Program wywołujący procedurę – klient
Program oferujący procedury – serwer
Model klient-server
usługi RPC
•
UDP
•
TCP
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
Działanie serwera
•
Oczekuj na połączenie klienta
•
Pobierz dane od klienta *
•
Wykonaj działania
•
Zwróć wyniki *
•
Zamknij połączenie
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
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
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
Zewnętrzna reprezentacja
Danych
XDR
Problem N-kwadrat konwersji danych
Konwersja symetryczna
Big Endian
Podstawowe zasady konwersji XDR
int
32 bity Liczba całkowita ze znakiem
void
0
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
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
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
Model procedury rpcgen
Procedura A
Procedura
sprzęgająca
Procedura
łącznikowa
klienta
Klient
Procedura A
Procedura
sprzęgająca
Procedura
łącznikowa
serwera
Serwer
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