Ch ng 3 : H q un tr sd l iu MySQL
4.3.5 .o hàn gi cho socket
Mã l i Mô
EACCESS Không th t o file cho socket do khơng có quy n o file
ENOTDIR,
ENAMETOOLONG
ón nh n các k t n i chuy n n, socket trình ch ph i o r a m t hàng i (queue). c ích a hành i là u i các k t n i ch a c trình ch x lý k p. Hàm h th ng listen() th c hi n công vi c này. #include <sys/socket.h>
int listen(int socketd, int backlog);
Tham s socketd cho bi t s mô socket c n o hàng i. backlog
là s k t n i t i a c phép a vào hàng i. N u m t k t n i n
trình ch trong khi ã có backlog k t n i tr c ó ch a x lý thì k t n i
này b th t i. Lý do hàng i ã y, trình ch server không mu n
nh n thêm k t n i n a. Thông th ng backlog mang giá tr 5 là s trun g
bình kh thi nh t.
52 Ch ng 4: L p trình socket
Hàm listen() tr v 0 n u o hàng i thành công, n u th t i tr tr v s là -1 và bi n errno ch a tr EBADF, EINVAL, ho c
4.3.6. Ch và ch p nh n k t n i
M t khi ã t o c socket, t tên cho nó và chu n xong hàng
i ti p nh n k t n i, công vi c sau cùng là ch k t n i a trìn h
khách g i n. n i hàm accept() th c hi n công vi c này. #include <sys/socket.h>
int accept(int socketd, struct sockaddr *address, size_t *address_len);
Hàm h th ng accept() tr v khi có m t trình khách mu n k t
n iv i c m socket ch nh s mô socketd. K t n i a trình khách
tr c h t c t vào hàng i. Khi accept() phát hi n ra có socke t
trong hàng i, nó s t ng l y a ch c a máy khách t vào c u trúc
address, chi u dài th t s c a c u trúc a ch tr v trong bi n
address_len. Ti p n accept() o ra m t socket vô danh. K t qu tr v a accept() là s mô cho socket vơ danh, n có th s d ng s nà y
liên c v i trình khách. Socket vơ danh m i này có cùng ki u v i
socket t tên ang l ng nghe trên hàng i.
Do c u trúc struct sockaddr khơng có nh cho nên n c n thi t l p
kích th cv a ti p nh n a ch trình khách. N u a ch trìn h
khách dài h n không gian n dành cho c u trúc sockaddr, ph n d ra c t .
53 Ch ng 4: L p trình socket
N u ch a có k t n i nào trong hàng i, accept() d ng i ch –
block( trình ch s khơng th c thi các l nh k ti p) cho n khi có k t
n i a client g i n. Bàn có th thay i c ch ch này b ng cách i
hàm fcntl() i u ch nh và thêm vào c O_NONBLOCK cho socket nh sau:
int flags=fcntl(socketd, F_GETFL, 0);
fcntl(socketd, F_SETFL, O_NONBLOCK | flags);
Sau khi t c này cho socket, hàm accept() không d ng i ch khi n i nó. accept() tr v ngay s mơ cho socket n u có k t n i
trong hàng i, n u khơng nó s tr v -1 và th c thi dòng l nh k ti p.
4.3.7. Yêu c u k t n i
Trình ch c a n th ng th c hi n ch ac n ng o, t tên, ch k t
n i b nh các hàm socket(), bind(), và accept(). Tuy nhiên phía trìn h
khách n gi n h n, n ch c n i hàm connect() yêu c u k t n i
v i trình ch . connect() c khai báo nh sau: #include <sys/socket.h>
int connnect(int socketd, const struct sockaddr *address, size_t address_len);
Tham s socketd là s mô tr v b i hàm socket(). address là c u
trúc a ch tr n socket a trình ch . address_len là chi u dài a
bi n c u trúc address. K t qu tr v c a hàm là 0 n u thành công v à
ng c i là -1. Trong tr ng h p -1, bi n errno ch a m t trong nh n g
tr sau:
54 Ch ng 4: L p trình socket
Mã l i Mơ
EBADF S mơ socket truy n cho hàm không h p l
EALREADY Kêt n i ã c thi t l p tr c ó
ETIMEOUT Quá th i gian ch k t n i
ng 4-4 Mã l i a hàm connect()
N u k t n i khơng thành cơng hàm connect() có g ng ch k t n i
i. N u sau m t s l n k t n i không thành công connect() tr v l i
ETIMEOUT.
ng t accept() n có th i ch ch c a hàm connect( )
b ng cách i fcntl() t i c ENONBLOCK. B ng cách này, khi k t
n i không thành công l n u tiên, hàm connect() không ch l p
i k t n i. Hàm k t thúc và tr v mã l i ngay l p t c.
4.3.8. óng k t n i
ng t nh x lý trên file. n có trách nhi m óng các k t n i
ã t o ra b ng cách g hàm close(). óng k t nói gi i phóng tà i
nguyên và b o m d li u ã chuy n i hoàn t t c hai u g i v à
nh n.
int close(int sockd);
iv i hai phía trình khách và trình ch , n nên i close( )
óng socket khi l nh read tr v tr 0 (khơng cịn d li u c).
55 Ch ng 4: L p trình socket
Th ng thì close() tr v ngay t c kh c, tuy nhiên có th close() i
vào tr ng thái ch (block) n u scoket a n thi t l p ki u k t n i ha i
chi u (SOCK_STREAM) cùng v i tùy ch n SOCK_LINGER và d li u ang tr nh thái ch a chuy n h t. Tùy ch n SOCK_LINER c c p sau.
4.3.9. Giao ti p b ng socket
Chúng ta v a xem qua các hàm h th ng dùng o và x lý socket,
gi ây ta có th tr l i nh ng ví d v s d ng socket th n. Nh ã nêu, n nên s d ng socket theo vùng AF_INET thay cho
AF_UNIX. Socket d a trên h th ng file th ng g p ph i m t s v n nh chúng ch c truy xu t trên h th ng file ch nh
a
UNIX/Linux. Vi c phân quy n cho phép c ghi file ng là m t v n .
Th ng file socket o ra trong th c hi n hành ho c th c m
/tmp và b n ph i cho phép h u nh toàn quy n truy c p các th c này
socket ho t ng. V i AF_INET thì v n này không phát sinh ,
AF_INET d a vào c ng và a ch IP k t n i. ng ng a n trên
Linux s d ng AF_INET d chuy n i sang Windows h n l à
AF_UNIX.
Trong AF_INET, khi o m i m t socket trên trình ch , n ph i
ch n m t s hi u c ng t cho socket. Vi c ch n s hi u c ng ph i lo i
tr nh ng c ng ã c các ng ng khác s d ng. n có th tha m
kh o t p tin /etc/services, ây là t p tin v n n li t kê danh sách cá c
ch và c ng ã c dành s d ng, s c ng a n không nên
trùng v i nh ng s ã có trong danh sách này. Ban ng không th s ng các c ng nh n 1024, chúng dành cho các ch c a h th ng.
Giao ti p ng khơng ịi i ph i k t n i v i m t h th ng ng
th t s . Ngay trên m t máy, n có th s d ng giao ti p ng liên
56 Ch ng 4: L p trình socket
c gi a các ti n trình ang ch y. N u c n s a ch IP, n có th s ng s 127.0.0.1, ây là a ch IP “h i qui” (loop back) th ng dùng
cho các ng ng cb .V i a ch này, d li u g i i quay v úng
a ch ban u, có ngh a là máy g i và máy nh n c xem là m t. Do
tính ch t c bi t này, n u trình khách trên máy c b g i d li u n
trình ch theo IP 127.0.0.1 thì trình ch c ng trên máy này nh n c
d li u và h i âm i. N u máy n hòa ng, n nên i ng i qu n tr ng xin m t a ch IP thích h p.
a ch m ng IP th ng khó nh , n có th yêu c u socket ti p
nh n m t tên g i nh khách thay cho s IP. Ch ng n localhost ha y
my.computer.home thay cho 127.0.0.1. T p tin v n n /etc/hosts ch a
các danh sách chuy n i này. Ví d , n có th dùng trình so n th o vi
hay gnotepad s a n i dung t p tin này nh sau: 127.0.0.1 localhost
127.0.0.1 my.computer.home 207.46.131.91 www.microsoft.com
Nh n th y, m t a ch IP có th ánh b ng nhi u tên khá c
nhau ( a ch IP và tên th ng cách nhau b ng kho ng tr ng hay tab) .
Th ng a ch IP 127.0.0.1 c i là localhost và khơng có gì tr ng i n u n d nh t cho nó m t cái tên khác ch ng n nh my.computer.home. Các a ch Web mà b n th ng th y nh
www.yahoo.com hay www.microsoft.com là các a ch toàn c u c
qu n lý b i t ch c qu c t InterNIC. bi t m t tên i ng v i m t
a ch IP có t n i hay khơng, n có th g i l nh ping nh sau:
57 Ch ng 4: L p trình socket
$ ping localhost
PING (127.0.0.1) from 127.0.0.1 : 56 (84) bytes of data. 64 bytes from (127.0.0.1) : icmp_seq=0 ttl=255 time=67 usec 64 bytes from (127.0.0.1) : icmp_seq=0 ttl=255 time=48 usec 64 bytes from (127.0.0.1) : icmp_seq=0 ttl=255 time=51 usec
4.4. S d ng socket trong ng ng minh a
Ph n l p trình socket này c s d ng th c hi n vi c trao i
thông tin gi a thành ph n client và server trong ph n ng ng min h
a.
th thành ph n client dùng socket k t n i n thành ph n
server. Sau khi k t n i thành công client g i các l nh nh Start
Capture, Stop Capture, Get Filter... n server, server nh n các l nh này,
th c hi n xong nó s tr l i k t qu th c hi n là thành công hay th t i
cho client.
Ph n 3: Xây d ng ng d ng th nghi m PacketCap
PH N 3: XÂY D NG NG NG TH NGHI M PACKETCAP
Ch ng 5. Phân tích và thi t k PacketCap Ch ng 6. Cài t và th nghi m
59 Ch ng 5: Phân tích và thi t k PacketCap
Ch ng 5: Phân tích và thi t k PacketCap
5.1. Kh o sát hi n t ng
Hi n nay có r t nhi u ph m m m b t gói tin nh Tcpdump, Microsof t
Network Monitor, Ethereal...Trong ó ph n m m ngu n m Ethereal n i b t v i nhi u u i m nh ch y trên nhi u h i u hành, h tr b t gói tin theo
nhi u giao th c khác nhau...
Các ph n m m này có h n ch chung là khi chúng ang b t các gói ti n
thì chúng ta khơng th c, phân tích các thơng tin b t c, hay nói các h
khác khi k t thúc q trình b t các gói tin r i thì m i phân tích các thơng tin này c.
Nh ng ph n m m này không h tr vi c ghi k t qu vào c s d li u ,
mà ch u vào các file có c u trúc theo nh ng riêng a chúng. N u file
này có kích th c l n thì vi c tìm ki m, x lý các thơng tin phân tích r t
ch m.
Nh ng ph n m m này ch ch y trên môi tr ng desktop là ch y u do ó
khơng cho phép c u hình t xa (ví d : u ch nh b l c , thi t l p ng d n
u tr trên m ng ….t xa. Hi n nay các ph n m m này ang c phát tri n
sang mơ hình client/server).
Trong khi ó thì nhu c u ng i qu n tr m ng r t a d ng:
• n có thơng tin v l u l ng m ng u ch nh b n g
thông theo yêu c u c a khách hàng c ng nh phát hi n
tr c các s c n u c.
• Theo dõi hành ng truy c p và xâm nh p m ng b t h p
pháp.
• t c hành ng trên nên là online (phân tích và u
khi n) n u c.
60 Ch ng 5: Phân tích và thi t k PacketCap 5.2. Phân tích và xác nh yêu c u
5.2.1. Phân tích
Vi c trao i thông tin trên m ng ngày càng nhi u, nhu c u c a các
nhà qu n tr m ng òi h i ngày càng a d ng, c n thi t có m t ch ng
trình có th b t gói tin cho phép phân tích, trích l c thông tin ngay tron g
khi b t (các ph n m m b t gói tin hi n nay khơng cho phép các nhà qu n tr s d ng thông tin thu th p c khi quá trình b t gói tin ang th c
hi n). ng ng này l y tên là PacketCap.
Trên c s ó, m t h th ng phân tán b t gói tin, trích l c và luu tr vào c s d li u trên m ng c xây d ng kh c ph c ph n nà o
khuy t m trên. H th ng cho phép nhà qu n tr s d ng thông ti n
ngay trong khi b t, tùy ch n v trí l u thơng tin và cho phép c u hình t xa vi c filter các gói tin.Các nhà qu n tr m ng c ng có th dùng h thơng này làm c s phát tri n ti p các ng d ng v qu n tr m ng.
5.2.2. Xác nh yêu c u
c tiêu a tài là m t xây d ng ng ng phân tán b t các gói
tin, ng này cung c p cho qu n tr m ng nh ng thông tin ph c cho
vi c theo dõi và phân tích thơng tin ng, d a trên nh ng thông tin c
cung c p này cho phép qu n tr m ng có th xác nh c tình tr ng a
61 Ch ng 5: Phân tích và thi t k PacketCap
ng ng PacketCap này bao g m các ch c n ng:
STT Ch c n ng
1 B t và phân tích c các gói tin a nh ng protocol thông ng nh TCP, UDP, ICMP, ARP...
2 Cho phép l u tr thông tin b t c d i ng c s d li u và ch n h qu n tr s d li u u tr .
3 Cho phép l u tr thông tin b t theo c u trúc file a Ethereal ho c các ph n m m b t gói tin khác.
4
i u khi n t xa vi c b t các gói tin, bao g m: • Kh i ng b t gói tin
• D ng b t gói tin • L y b l c hi n th i
ng 5-1 Xác nh yêu c u
62 Ch ng 5: Phân tích và thi t k PacketCap 5.3. Các h ng xây d ng ng ng PacketCap
Hi n nay có r t nhi u ph n m m b t gói tin có mã ngu n m nh TCPTrace, TcpDump, WinDump, Ethereal,..trong s này thì Ethereal là ph n m m t t nh t. Nó h tr r t nhi u protocol, h tr các nh d ng l tr c a
c.
Các ph n m m ngu n m này u s d ng th vi n l p trình libcap ho c
winpcap(tên a phiên n libpcap ch y trên h i u hành Windows).
Do có r t nhi u ph n m m ngu n m h tr b t gói tin nên có 2
h ng l a ch n phát tri n ng ng PacketCap:
Ø H ng 1: Tìm hi u c u trúc a ph n m m Ethereal, tích h p thê m
ch c n ng l u các gói tin vào c s d li u và c u hình t xa và o
ph n m m Ethereal.
Ø óng 2: S d ng th vi n l p trình ng libpcap vi t l i tồn b ng d ng.
5.3.1. Phân tích h ng phát tri n d a trên Ethereal
• Thu n l i
o Source code c a Ethereal m có th d dàng download trên nhi u trang web. (www.ethereal.com)
o Không c n xây d ng l i các module b t gói tin và filter cho ng d ng.
• Khó kh n
o Mã ngu n Ethereal r t nhi u và khó hi u rõ c do ó vi c
tích h p thêm ch c n ng vào Ethereal là r t ph c t p.
o Ethereal ch cung c p free user guide khơng cung c
p
developer guide do ó mu n tìm hi u v ethereal ph i c
t c source code.
63 Ch ng 5: Phân tích và thi t k PacketCap
5.3.2. Phân tích h ng phát tri n d a trên libcap
• Thu n l i :
o Th vi n mã ngu n m libpcap download mi n phí,
c
nhi u nhà phát tri n s d ng. Ph n m m b t gói ti n
Tcpdump là m t i n hình.
o Có nhi u tài li u h ng d n l p trình
o Có th d dàng xây d ng ch ng trình theo ý mu n • Khó kh n
o Ph i vi t l i t t c các module capture và filtering tr c khi
thêm vào các yêu c u c a lu n v n.
5.3.3. L a ch n h ng phát tri n PacketCap
T nh ng phân tích khó kh n và thu n l i a2h ng phát tri n
ng ng PacketCap, chúng em quy t nh l a phát tri n PacketCap theo
h ng th 2, ngh a là s xây d ng t u ng ng b t gói tin PacketCap