Tải bản đầy đủ (.pdf) (91 trang)

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ý

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (869.2 KB, 91 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TRNG I H C KHOA H C T NHIÊNKHOA CÔNG NGH THÔNG TIN</b>

<b> MÔN CÔNG NGH PH N M M</b>

<b>GIANG QU C MINH – H PH M THÁI VINH</b>

<b> QU N LÝ</b>

<b>KHOÁ LU N C NHÂN TIN H C</b>

<b>TP. HCM,M 2005</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>TRNG I H C KHOA H C T NHIÊNKHOA CÔNG NGH THÔNG TIN</b>

<b> MÔN CÔNG NGH PH N M M</b>

<b>GIANG QU C MINH - 0112016 H PH M THÁI VINH - 0112081</b>

<b> QU N LÝ</b>

<b>KHÓA LU N C NHÂN TIN H C</b>

<b>GIÁO VIÊN HNG D N</b>

<b>GVC CAO NG TÂN</b>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>L I CÁM N</b>

Chúng em xin chân thành cám n Ban giám hi u, quý Th y cô atr ng i H c Khoa H c T Nhiên TP. H Chí Minh, c bi t là các Th ycô trong Khoa Công ngh Thông tin ã t n tình gi ng y, trang cho chúngem nh ng ki n th c c n thi t, b ích trong su t nh ng n m c t p i tr ng.Chúng em xin chân thành m n Th y Cao ng Tân, ng i Th y ãt n tình quan tâm h ng d n, giúp chúng em trong su t th i gian làm lu n

n này.

Chúng con xin g i lòng bi t n sâu s c và s kính tr ng n ơng bà, cha, cùng tồn th gia ình, nh ng ng i ã nuôi y chúng con tr ng thànhnh ngày hôm nay.

Chúng tôi xin chân thành cám n s giúp , ng viên, nh n xét, ónggóp ý ki n c a các anh ch , n bè trong quá trình th c hi n lu n v n này.

TP. H Chí Minh, 7/2005Nhóm sinh viên th c hi nGiang Qu c Minh – H Ph m Thái Vinh

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>B C CA LU N V N</b>

Lu n v n g m có 3 ph n và 7 ch ng

<b>PH N 1: T NG QUAN Chng 1 Gi i thi u v</b> tài

<b>PH N 2: TÌM HI U CÁC V N</b> L P TRÌNH. Ph n này gi i thi ucác v n l p trình c n nh t xây d ng 1 ng ng có kh ng b tcác gói tin và cho phép ng i dùng có th i u khi n t xa qua mơitr ng ng.

<b>Chng 2. Tìm hi u th vi n l p trình m ng c p th p libpcap, ây là</b>

“trái tim” a h u h t các ng ng b t gói tin mã ngu n m hi n nay.

<b>Chngg 3. Gi i thi u MySQL, m t h qu n tr</b> s d li u t m trungc s d ng ph bi n nh t hi n nay.

<b>Chng 4. Tìm hi u</b> thu t l p trình socket vi t các ng ng trênmôi tr ng ng

<b>Ph n 3 Xây</b> ng ng ng PacketCap. Ph n này s d ng các ki nth c ã tìm hi u <b>chng 2, 3, 4</b> xây d ng m t ng ng b t gói tin,u các k t qu b t c vào c s d li u phân tích các thơng tin

<b>Chng 5. Phân tích, thi t k</b> ng ng PacketCap

<b>Chng 6. Cài </b> t và th nghi m PacketCap

<b>Chng 7. T ng k t. Ch</b> ng này trình bày nh ng k t qu t c,nh ng n ch và h ng phát tri n PacketCap trong t ng lai.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

4.4. S d ng socket trong ng ng minh a ... 58

PH N 3: XÂY D NG NG NG TH NGHI M PACKETCAP ... 59

Ch ng 5: Phân tích và thi t k PacketCap ... 60

5.3.1. Phân tích h ng phát tri n d a trên Ethereal... 63

5.3.2. Phân tích h ng phát tri n d a trên libcap ... 64

5.3.3. L a ch n h ng phát tri n PacketCap ... 64

5.4. Các thành ph n PacketCap ... 65

5.5. Xây d ng mơ hình use case... 66

5.5.1. Xác nh Actor và use case ... 66

5.5.2. Mơ hình use case ... 66

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

5.8.3. C u trúc d li u trao i gi a PCServer và PCManager... 83

5.9.Thi t k giao di n PCManager( phiên n ch y trên Windows) ... 85

2.1. PCManager trên môi tr ng Linux ... 93

2.2. PCManager trên môi tr ng Windows... 94

TÀI LI U THAM KH O ... 95

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Ph n 1: T ng quan

<b>PH N 1: T NG QUAN</b>

Ch ng 1. Gi i thi u tài

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

Vi c Công ngh thông tin và m ng Intenet phát tri n và ngày càng nhi ucác thông tin quan tr ng c trao i trên m ng làm n y sinh m t s v n quan tr ng là b o m t thơng tin trên m ng tránh rị r hay ng n không chotruy c p vào các d li u không cho phép gây thi t h i kinh t , qu n lý b ngthông t ng kh n ng áp ng thông tin, giao d ch v i khách hàng ng th itránh c tình tr ng ngh n m ch l u thông trên m ng.

Vi c phân tích l u l ng m ng ịi h i n ng l c tính tốn r t l n, vì v ymu n làm c vi c này c n ph i trang b các siêu máy tính th c hi n bàitoán này. Trong u ki n kinh t n c ta thì khơng th trang b nh ng hth ng này c vì chúng quá t .

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Ch ng 1: Gi i thi u tài

y gi i pháp nào gi i quy t bài toán này ?

• Grid Computing là h th ng tính toán song song và phân táncho phép chúng ta th c hi n nh ng bài toán l n d a trên các

th ng nh g m nhi u máy tính c n i m ng v i nhau.

• Hi n nay chúng ta l i có r t nhi u h th ng máy tính n ing nh ng ch a s d ng c h t kh n ng tính tốn c achúng.

• i s l ng các máy tính l n thì vi c tri n khai GridComputing s cho chúng ta m t h th ng tính tốn c c kình g p nhi u l n 1 siêu máy tính ( lúc ó các siêu máy tínhcó th ch là m t node trong h th ng Grid Computing).

i nh ng u m trên chúng tôi ch n tài “ ng d ng th nghi mGrid Computing trong vi c phân tích thơng tin m ng ph c v qu n lý”.1.2. Gi i thi u tài

tài “ ng ng th nghi m Grid Computing trong vi c phân tíchthơng tin ng ph c qu n lý” là m t l n g m 2 nhóm th c hi n.Nhóm th 1 xây d ng ng d ng phân tán trên m ng cho phép thi t l p txa ch l c và b t các gói tin, trích l c và l u vào các c s d li u trên

ng ph c cho vi c theo dõi và phân tích thơng tin ng (Ph n I).Nhóm th 2 tìm hi u Grid Computing và xây d ng ng ng phântích hi n tr ng c a m ng d a trên thông tin t s d li u do nhóm th 1xây d ng (Ph n II).

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

Ph n 2: Tìm hi u các v n l p trình

<b>PH N 2: TÌM HI U CÁC V NL P TRÌNH</b>

Ch ng 2. Th vi n l p trình ng libpcapCh ng 3. H qu n tr s d li u MySQLCh ng 4. L p trình socket

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

Ch ng 2: Th vi n l p trình ng libpcap

<b>Chng 2 : Th vi n l p trìnhng libpcap</b>

2.1. Gi i thi u libpcap

Libpcap là m t th vi n mã ngu n m tr l p trình ng c p th p,cho phép b t các gói tin trên ng truy n theo nhi u h ng khác nhau, chophép phân tích các frame v a tìm c.

Th vi n libcap c s d ng r ng rãi trong các ph n m m snifferpacket. Các ph n m m s d ng libcap ph bi n là TCPdump, TCPflow.

Hi n nay phiên n m i nh t a libpcap là 0.9.1.2.2. Cài t th vi n libpcap

Ch ng trình ngu n c a libpcap có th download a chwww.tcpdump.org , các phiên n m i nh t a libpcap u có a ch này.

Gi s b n i v gói libpcap-0.8.3.tar.tar, ti n hành cài t:

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Ch ng 2: Th vi n l p trình ng libpcap

3.3. Các b c xây d ng ch ng trình s d ng libpcapCó 5 b c chính trong vi c s d ng th vi n libpcap

• c 1: Xác nh interface (card ng) mà ta mu n b t frame vào(Trong Linux, interface th ng là eth0,eth1…..Ta có th dùng cáchàm pcap_lookupdev() c a th vi n libpcap l y t t c cácinteface.

• c 2: Kh i t o pcap. Cung c p cho pcap bi t interface nào trong các interface ã l y v b c trên s c ch n sniff.

• c 3: L c frame .pcap cho chúng ta c ch ch n l a khi l c cácframe khi b t (ví d ch b t frame TCP/IP có source IP

<b>192.168.8.8 và port 23 …). ta ph i t o ra filter r i biên</b> ch filternày báo cho pcap bi t b l c nó s dùng.

• c 4: Pcap th c thi vi c sniff frames.

• c 5: óng phiên làm vi c và k t thúc ng d ng

Trên ây là qui trình t ng quát cách libpcap b t gói tin trong ó b c 3là tùy ch n có th có ho c khơng.

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

Ch ng 2: Th vi n l p trình ng libpcap

3.4. Chi ti t các b c

<b>3.4.1. Ch n Interface( cardng)</b>

Có 3 cách thi t l p devices sniff các frames d li u

• Cách 1 : Cho ng i dùng nh p tên thi t b t dòng l nh

<i>#include <stdio.h>#include <pcap.h></i>

<i>int main(int argc , char* argv[]){</i>

<i>Char * dev = argv[1]</i>

<i>Printf( Devices : %s \n ,dev);}</i>

Trong ó argv[1] là tham s dịng l nh u tiên

• Cách 2 : S d ng hàm pcap_lookupdev() c a libpcap tìmki m các interface t n i trên máy tính.

<i>#include <stdio.h>#include <pcap.h></i>

<i>int main(int argc , char* argv[]){</i>

<i>Char* dev,errbuf[PCAP_ERRBUF_SIZE]dev = pcap_lookupdev(errbuf);</i>

<i>if(dev == NULL) {</i>

<i> printf("%s\n",errbuf); exit(1);</i>

<i> }</i>

<i> printf("DEV: %s\n",dev);}</i>

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<i>int main(int argc , char* argv[]){</i>

<i> pcap_if_t *devlist;char devname[10][100];</i>

<i>Char* dev,errbuf[PCAP_ERRBUF_SIZE]int devcount=0;</i>

<i>retvalue=pcap_findalldevs(&devlist,err);if(retvalue==-1 || devlist==NULL) return 0;</i>

<i>for(d=devlist,i=0; d && i<10 ;d=d->next,i++) sprintf(devname[i],"%s",d->name);</i>

<b>3.4.2. M devicel ng nghe( sniff) d li u</b>

Kh i t o phiên làm vi c cho các thi t b s d ng hàmpcap_open_live(). C u trúc hàm này nh sau :

pcap_t *pcap_open_lives(

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

Ch ng 2: Th vi n l p trình ng libpcap

• snaplen cho bi t s byte l n nh t mà pcap có th b t frames

• promisc n u t b ng 1 thì interface s ho t ng trong chpromiscuos mode. ây là ch libpcap s sniff t t c các frametrên dây d n. N u t b ng 0 thì interface s ho t ng chnon promiscuos mode, trong ch này,pcap ch sniff nh ngframe g i n máy.

<i>Pcap_t *descr</i>

<i>descr = pcap_open_live(dev,BUFSIZ,0,-1,errbuf); if(descr == NULL)</i>

<i> {</i>

<i> printf("pcap_open_live(): %s\n",errbuf); exit(1);</i>

<i>int pcap_compile(pcap_t *p, struct bpf_program *ft, char *str, int optimize, bpf_u_int32 netmask )</i>

Tham s u tiên là handle c a phiên làm vi c (pcap_t). Tham sth hai là tham s ch n n i l u compile version c a filter. str làchu i mô t cho filter bi t nh ng gói tin c n b t. K n là s nguyêncho bi t str là opyimize hay không (1 là true, 0 là false). Cu i cùng lànetmask c a ng m ng.

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

Ch ng 2: Th vi n l p trình ng libpcap

<i>int pcap_setfilter(pcap_t *p,struct_bpf_program *fp)</i>

Tham s th nh t là handle qu n lý phiên làm vi c. Tham s th hailà tham chi u ch n compile version c a filter ( ã c nh ngh atrong pcap_compile())

nh d ng str mô t cho filter:

• Filter theo source ip

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<i> char *dev;</i>

<i> char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr;</i>

<i> const u_char *packet;</i>

<i> struct pcap_pkthdr hdr; /* pcap.h */ struct bpf_program fp; /* hold compiled program */ bpf_u_int32 maskp; /* subnet mask */ bpf_u_int32 netp; /* ip */ dev = pcap_lookupdev(errbuf);</i>

<i> if(dev == NULL) {</i>

<i> fprintf(stderr,"%s\n",errbuf); exit(1);</i>

<i> }</i>

<i> descr = pcap_open_live(dev,BUFSIZ,1,-1,errbuf); if(descr == NULL)</i>

<i> {</i>

<i> printf("pcap_open_live(): %s\n",errbuf); exit(1);</i>

<i>}</i>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

Hàm này có c u trúc sau :

<i>u_char *pcap_next(pcap_t *p,struct pcap_hkthdr *h )</i>

Tham s u tiên là handle qu n lý phiên làm vi c. Tham s thhai là pointer ch n c u trúc l u gi thông tin chung v frame ( th igian b t, chi u dài frame …). pcap_next tr v m t con tr có d ngu_char tr n frame c mô t b i c u trúc này

<i>struct pcap_pkthdr{</i>

<i> struct timeval ts; time stamp</i>

<i> bpf_u_int32 caplen; length of portion present bpf_u_int32; lebgth this packet (off wire)</i>

<i> }</i>

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

Ch ng 2: Th vi n l p trình ng libpcap

Ví d v sniff frame s d ng c u trúc này

<i>#include <stdio.h>#include <stdlib.h>#include <pcap.h>#include <errno.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netinet/if_ether.h>int main(int argc, char **argv){</i>

<i> int i; char *dev;</i>

<i> char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr;</i>

<i> const u_char *packet;</i>

<i> struct pcap_pkthdr hdr; /* pcap.h */</i>

<i> struct ether_header *eptr; /* net/ethernet.h */</i>

<i> u_char *ptr; /* printing out hardware header info */ dev = pcap_lookupdev(errbuf);</i>

<i> if(dev == NULL) {</i>

<i> printf("%s\n",errbuf); exit(1);</i>

<i> }</i>

<i> printf("DEV: %s\n",dev);</i>

<i> descr = pcap_open_live(dev,BUFSIZ,0,-1,errbuf);</i>

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

Ch ng 2: Th vi n l p trình ng libpcap

<i> if(descr == NULL) {</i>

<i> printf("pcap_open_live(): %s\n",errbuf); exit(1);</i>

<i> }</i>

<i> packet = pcap_next(descr,&hdr); if(packet == NULL)</i>

Ch ng trình này in ra chi u dài và th i gian b t gói tin u tiên mànó b t c. Hàm pcap_close() dùng óng phiên làm vi c.

t k thu t khác ph c t p h n là dùng hàm pcap_loop() c alibpcap. C u trúc hai hàm này nh sau :

<i>int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)</i>

Tham s u tiên là handle qu n lý phiên làm viêc, tham s th hailà s frame s c sniff tr c khi thoát ra. N u tham s này là s âm

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

#include <stdio.h>#include <stdlib.h>#include <errno.h>

void my_callback(u_char *useless,const struct pcap_pkthdr*pkthdr,const u_char*packet)

tatic int count = 1;

fprintf(stdout,"%d, ",count); if(count == 4)

fprintf(stdout,"Come on baby sayyy you love me!!!");

if(count == 7)

fprintf (stdout,"Tiiimmmeesss!! "); fflush(stdout);

count++;}

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

Ch ng 2: Th vi n l p trình ng libpcap

int main(int argc,char **argv) {

int i; char *dev;

char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr;

const u_char *packet;

struct pcap_pkthdr hdr; /* pcap.h */

struct ether_header *eptr; /* net/ethernet.h */ if(argc != 2)

{

fprintf(stdout,"Usage: %s numpackets\n",argv[0]); return 0;

}

dev = pcap_lookupdev(errbuf); if(dev == NULL)

{

printf("%s\n",errbuf); exit(1);

}

descr = pcap_open_live(dev,BUFSIZ,0,-1,errbuf); if(descr == NULL)

{

printf("pcap_open_live(): %s\n",errbuf);

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

Ch ng 2: Th vi n l p trình ng libpcap

pcap_loop(descr,atoi(argv[1]),my_callback,NULL); fprintf(stdout,"\nDone processing packets... wheew!\n"); return 0;

}

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

MySQL ho t ng theo mơ hình client-server, r t n gi n, khơng có cáctính n ng cao c p nh qu n lý giao tác, chia s k t n i. c s d ng r ng rãitrong Linux i v i các ng d ng cgi hay Perl trong môi tr ng Web,Internet.

a ch download MySQL : 3.2. Cài t MySQL

<b>3.2.1. Cài t MySQL t các gói nh phân</b>

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

$ make$ su

$ make intall

$scripts/mysql_intal.db

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

Ch ng 3: H qu n tr c s d li u MySQL

3.3. S d ng MySQL

<b>3.3.1. L nh mysql</b>

ây là l nh thâm nh p trình qu n lý c s d li u và a ra cácnh qu n tr khác .

• <i>status: thơng tin v tr ng thái hi n hành c a trình ch</i>

• <i>version cho bi t thông tin v phiên b n c a trình ch my sql</i>

<b>3.3.3. L nh mysqlshow</b>

L nh này cho bi t thông tin v database. N u khơng có tham s shi n th toàn b database, ng c i n u có tham s là tên database thìhi n th t t c các b ng trong database.

u tham s là tên database và tên b ng thì tồn b tên các c ttrong b ng s c hi n th

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

Ch ng 3: H qu n tr c s d li u MySQL

<b>3.3.4. L nh grant</b>

p quy n cho ng i dùng database Cú pháp :

<i>grant privilege on object to user[user-password] [opt]</i>

• privilege là quy n c p cho tài kho n ng i dùng bao g m:§ Alter : quy n thay i b ng và file ch m c

§ Creat : quy n t o b ng vàdatabase§ Delete : quy n xoá d li u trong database§ Drop : quy n xố database

§ Index : quy n qu n lý ch m c index§ Insert : quy n chèn d li u m i vào§ Select : quy n xem d li u

§ Update : quy n c p nh t d li u§ All : t t c các quy n

• Object : databasename.table

Có th dùng databasename.* s tác ng n m i b ngtrên databasename.

u ý: mysql cho phép c p quy n trên database ch a cócho m t ng i dùng sau này s t o

• User : username.host Ví d rick@”%”

• Password : n u grant ta m i user ta t password b ngcách thêm identyfied by password

• Ví d : t o m i user khtn v i password cntt tồn quy n trêndatabase tên packet(packet có th ch a có)

mysql>grant all on packet.* to khtn@”%” indentified by cntt

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

Ch ng 3: H qu n tr c s d li u MySQL

<b>3.3.5. L nh Revoke</b>

L nh này dùng c quy n ng i dùng Cú pháp:

<i>revoke privilege on object from user</i>

<b>3.3.6. Ví d v t o m t c s d li u</b>

o c s d li u packet v i username là khtn và password la cntt :

<i>$mysql>grant all on packet.* to khtn@ identified by cntt;</i>

nh trên c th c hi n v i t cách qu n tr root c a MySQL.

<i>(Thoát v d u nh c l nh $mysql>quit )</i>

R i gõ ti p các l nh sau:

<i> $mysql u khtn p cntt</i>

<i> $ mysql>create database packet;</i>

<i> $mysql>use packet (s d ng database tên packet)</i>

Bây gi m i truy v n sql u lác ng lên database packet.3.4. L p trình MySQL trên ngôn ng C

M t s hàm th ng dùng khi l p trình v i MySQL

<b>4.4.1 mysql_init</b>

Kh i t o c u trúc x lý k t n i Cú pháp :

<i>MYSQL *mysql_init (MYSQL *old_connect)</i>

Tham s :

• old_connect =NULL :t o k t n i m i

• old_connect khác NULL :tái k t n i v i con tr old_connect

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

<i>unsigned port_num ,const char * unit_socket_name ,unsigned int flag )</i>

Tham s :

• <i>Connection : tr</i> n c u trúc MYSQL c kh i t o b i hàmmysqlconnect.

• <i>Server_host : a ch IP c a máy ch n i d ch vu mysql</i>

server ang ch y.

• <i>sql_username,sql_pass : là </i> i s ch ng th c quy n ngnh p h th ng

• <i>db_name : tên c a database</i>

• <i>port_num : s hi u c ng mysql dùng (m c nh b ng 0)</i>

• <i>unit_socket_name ki u socket (m c nh NULL)</i>

• <i>flag: ki u giao th c s k t n i</i>

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

<i>my_ulonglong mysql_affected_rows(MYSQL *connection)</i>

Khi s d ng hàm này ph i ép ki u giá tr tr v là unsigned long

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

<i>void mysql_free_result (MYSQL_RES *result)</i>

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

Ch ng 4: L p trình socket

<b>Chng 4: L p trình socket</b>

4.1. Gi i thi u v l p trình socket

Khi vi t ng ng và có nhu c u t ng tác v i m t ng ng khác,chúng ta th ng d a vào mô hình khách/ ch (client/server). Theo mơ hìnhnày, ng ng có kh ng ph c ho c cung c p nh ng thơng tin gì ó g ilà ng ng ch (trình ch hay server). ng ng g i yêu c u n trình ch

c i là ng ng khách (trình khách hay client). M r ng h n n a, servercó th là m t máy tính v i c u hình nh cịn client là r t nhi u máy con khácn i vào máy ch .

Nh v y, tr c khi yêu c u m t ch c a trình ch th c hi n i u gìó, trình khách (client) ph i có kh ng k t n i c v i trình ch . Quá trìnhk t n i này c th c hi n thông qua m t c ch tr u t ng hóa i là socket( m ch là “c ch c m”). K t n i gi a trình khách và trình ch ng tnh vi c c m phích i n vào c m i n. Trình khách th ng c coi nhphích c m i n, cịn trình ch c coi nh c m i n, m t c m có th c mvào ó nhi u phích i n khác nhau ng nh m t máy ch có th k t n i vàph c cho r t nhi u máy khách.

N u k t n i thành cơng thì trình khách và trình ch có th trao i dli u v i nhau, th c hi n các yêu c u v trao i d li u.

4.2. Nguyên lý ho t ng a socket

u tiên server m m t c m socket. ây ch là quá trình h i u hànhphân b tài nguyên chu n k t n i. Dùng hàm socket() t o “ c m”cho trình ch server.

Ti p n, ng ng khách bi t n c m socket a trình ch , n

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

Ch ng 4: L p trình socket

(v i y ng d n). n ch c n t tên còn ng d n th ng t trongth c /tmp hay /usr/tmp. i v i giao ti p ng thông qua giao th cTCP/IP tên a socket c thay th b ng khái ni m c ng (port). C ng là m ts nguyên 2 bytes (kho ng 65000 c ng n có th ch n t cho socket) thayth cho tên t p tin. N u trình khách và trình ch n m trên hai máy kháchnhau, giao th c TCP/IP còn yêu c u xác nh thêm a ch IP k t n i nmáy ch xa.

Sau khi ã ch nh tên ho c s hi u port cho socket, n i hàm bind() ràng bu c hay t tên chính th c cho socket a trình ch . Ti p n là chk t n i t phía trình khách, trình ch s g i hàm listen() t o hàng i nh ncác k t n i do trình khách a n. N u có yêu c u k t n i t phía trìnhkhách, trình ch g i hàm accept() ti p nh n yêu c u a trình khách.accept() t o m t socket vô danh khác (unnamed socket), c m k t n i atrình khách vào socket vơ danh này và th c hi n quá trình chuy n d li u trao

i gi a khách ch . Socket c t tên tr c ó v n ti p c ho t ngch nh n yêu c u t trình khách khác.

i giao ti p c ghi thông qua socket ng n gi n nh vi c dùngl nh read/write c ghi trên file. N u file d a vào s mô (file descriptor)

xác nh socket c n c ghi cho hàm read/write.

Phía trình khách ch c m o m t socket vơ danh, ch nh tên và v trísocket a trình ch . Yêu c u k t n i b ng hàm connect() và c ghi, truyxu t d li u a socket b ng l nh read/ write ho c l nh send/ recv.

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

ng d n a ch , trong khi giao th c TCP/IP i l y a ch IP (32 bits)tham chi u và th c hi n k t n i v t lý.

<b>4.3.1.1. Vùng( domain)</b>

Vùng dùng xác nh t ng ng n i giao ti p a Socketdi n ra. Vùng giao ti p Socket thông ng nh t hi n nay làAF_INET hay gia ti p socket theo chu n ng Internet. Chu n nàys d ng a ch IP xác nh nút k t n i v t lý trên ng. Ngoàira, n u n ch c n giao ti p c b , n có th dùng vùng giao ti ptheo chu n a Sun AF_UNIX, ó là dùng ng d n và h th ngfile t tên và xác nh k t n i gi a hai hay nhi u ng ng.Ch ng n nh ví d trên, chúng ta ã th c hi n b ng cách t têncho socket là server_socket, và Linux ã t o ra file server_socketngay trên th c hi n hành (hay trong th c m /tmp tùy theophiên n a Linux và UNIX). Tuy nhiên vùng giao ti pAF_UNIX l i ít c s d ng trong th c t . Ngày nay h u h t cácng ng ng s d ng socket u theo vùng AF_INET là ch y u.Chúng ta bàn sâu v phân vùng này ngay sau ây.

</div>

×