.o hàn gi cho socket

Một phần của tài liệu xây dựng ứng dụng bắt gói tin cho việc phân tích thông tin mạng phục vụ quản lý (Trang 63)

Ch ng 3 : H q un tr sd l iu MySQL

4.3.5 .o hàn gi cho socket

Mã l i

EACCESS Không th t o file cho socket do khơng 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

Một phần của tài liệu xây dựng ứng dụng bắt gói tin cho việc phân tích thông tin mạng phục vụ quản lý (Trang 63)

Tải bản đầy đủ (DOCX)

(122 trang)
w