.t tên 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 47)

Sau khi ã nh a ch , n ch c n t tên cho socket. i v i AF_UNIX c ch chính là ng d n, còn tên chính là tên t p tin t o socket. i v i vùng giao th c AF_INET a ch chính là s IP còn tên chính là s hi u c ng (sin_port) trong c u trúc sockaddr_in. Khi ã gán thông tin y cho socket n c n i hàm bind() rabgd bu c nh ng thông tin này cho socket ã m ra tr c ó.

#include <sys/socket.h>

int byte (int socket, const struct sockaddr *address, size_t address_len);

Hàm h th ng bind() s d ng các thông tin trong c u trúc address gán cho socket s nh danh socketd tr v b i hàm socket() tr c ó. Tham s address_len cho bi t chièu dài a c u trúc (struct sockaddr*) truy n vào hàm. n l u ý sockaddr là c u trúc t ng quát cho sockaddr_un và sockaddr_in

Khi ràng bu c thành công bind() tr v tr 0. N u không hàm tr v -1 và errno ch a m t trong các l i sau:

Mã l i

EBADF S mô file không h p l

ENOTSOCK S mô file không dành cho socket

EINVAL S mô file tham chi u n m t socket ã có.

EADDRNOTAVAIL a ch không xác nh

EADDRINUSE a ch và c ng ràng bu c ã b m t socket khác

chi m ng

Ch ng 4: L p trình socket

N u n m socket thu c vùng AF_UNIX errno có th nh n thêm các l i sau:

Mã l i

EACCESS Không th t o file cho socket do không có

quy n o file

ENOTDIR,

ENAMETOOLONG

Tên file không h p l

ng 4-3 Các mã l i a domain AF_UNIX

Ràng bu c tên socket là b c quan tr ng nh t socket a n có kh ng nhìn th y và truy xu t c t các ng ng bên ngoài.

M t socket n u ch a c t tên i là socket vô danh ( unnamed socket). 4.3.5. o hàng i cho socket ón nh n các k t n i chuy n n, socket trình ch ph i o ra 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

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 ENOTSOCK.

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ình 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 i v 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ó socket 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 c v a ti p nh n a ch trình khách. N u a ch trình khách dài h n không gian n dành cho c u trúc sockaddr, ph n d ra

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ình 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 ng tr sau:

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

ECONNREFUSED Trình ch server t ch i 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.

#include <sys/socket.h> int close(int sockd);

i v 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).

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 hai 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 tham 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

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 c b . 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 hay 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:

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 minh

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

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, Microsoft 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 tin thì chúng ta không th c, phân tích các thông tin b t c, hay nói cách khác khi k t thúc quá 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 ng 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.

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 trong 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 tin 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 toàn b h th ng ng.

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

• K t thúc ch ng trình b t gói tin

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 ph n m m b t gói tin khác, tích h p thêm ph n phân tích thông tin b t

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 toà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

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

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 47)

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

(91 trang)