TR(cid:1132)(cid:1248)NG (cid:264)(cid:1188)I H(cid:1232)C KHOA H(cid:1232)C T(cid:1268) NHIÊN KHOA CÔNG NGH(cid:1226) THÔNG TIN (cid:37)(cid:1244) MÔN CÔNG NGH(cid:1226) PH(cid:1194)N M(cid:1220)M

GIANG QU(cid:1236)C MINH – H(cid:1238) PH(cid:1188)M THÁI VINH

XÂY D(cid:880)NG (cid:872)NG (cid:39)(cid:868)NG B(cid:619)T GÓI TIN CHO VI(cid:643)C PHÂN TÍCH THÔNG TIN (cid:48)(cid:605)NG PH(cid:868)C (cid:57)(cid:868) QU(cid:607)N LÝ

KHOÁ LU(cid:1200)N C(cid:1264) NHÂN TIN H(cid:1232)C

TP. HCM, (cid:49)(cid:258)M 2005

TR(cid:1132)(cid:1248)NG (cid:264)(cid:1188)I H(cid:1232)C KHOA H(cid:1232)C T(cid:1268) NHIÊN KHOA CÔNG NGH(cid:1226) THÔNG TIN (cid:37)(cid:1244) MÔN CÔNG NGH(cid:1226) PH(cid:1194)N M(cid:1220)M

GIANG QU(cid:1236)C MINH - 0112016 H(cid:1238) PH(cid:1188)M THÁI VINH - 0112081

XÂY D(cid:880)NG (cid:872)NG (cid:39)(cid:868)NG B(cid:619)T GÓI TIN CHO VI(cid:643)C PHÂN TÍCH THÔNG TIN (cid:48)(cid:605)NG PH(cid:868)C (cid:57)(cid:868) QU(cid:607)N LÝ

KHÓA LU(cid:1200)N C(cid:1264) NHÂN TIN H(cid:1232)C

GIÁO VIÊN H(cid:1132)(cid:1246)NG D(cid:1198)N

GVC CAO (cid:264)(cid:258)NG TÂN

NIÊN KHÓA 2001 – 2005

NH(cid:1200)N XÉT (cid:38)(cid:1258)A GIÁO VIÊN H(cid:1132)(cid:1246)NG D(cid:1198)N

........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ...........................................................................................................................

Tp.HCM, ngày…..tháng….n(cid:259)m 2005

NH(cid:1200)N XÉT (cid:38)(cid:1258)A GIÁO VIÊN PH(cid:1190)N BI(cid:1226)N

........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ...........................................................................................................................

Tp.HCM, ngày…..tháng….n(cid:259)m 2005

L(cid:1248)I CÁM (cid:1130)N

Chúng em xin chân thành cám (cid:1131)n Ban giám hi(cid:1227)u, quý Th(cid:1195)y cô (cid:70)(cid:1259)a

tr(cid:1133)(cid:1249)ng (cid:264)(cid:1189)i H(cid:1233)c Khoa H(cid:1233)c T(cid:1269) Nhiên TP. H(cid:1239) Chí Minh, (cid:255)(cid:1211)c bi(cid:1227)t là các Th(cid:1195)y

cô trong Khoa Công ngh(cid:1227) Thông tin (cid:255)ã t(cid:1201)n tình gi(cid:1191)ng (cid:71)(cid:1189)y, trang (cid:69)(cid:1231) cho chúng

em nh(cid:1267)ng ki(cid:1219)n th(cid:1261)c c(cid:1195)n thi(cid:1219)t, b(cid:1241) ích trong su(cid:1237)t nh(cid:1267)ng n(cid:259)m (cid:75)(cid:1233)c t(cid:1201)p (cid:87)(cid:1189)i tr(cid:1133)(cid:1249)ng.

Chúng em xin chân thành (cid:70)(cid:1191)m (cid:1131)n Th(cid:1195)y Cao (cid:264)(cid:259)ng Tân, ng(cid:1133)(cid:1249)i Th(cid:1195)y (cid:255)ã

t(cid:1201)n tình quan tâm h(cid:1133)(cid:1247)ng d(cid:1199)n, giúp (cid:255)(cid:1253) chúng em trong su(cid:1237)t th(cid:1249)i gian làm lu(cid:1201)n

(cid:89)(cid:259)n này.

Chúng con xin g(cid:1265)i lòng bi(cid:1219)t (cid:1131)n sâu s(cid:1203)c và s(cid:1269) kính tr(cid:1233)ng (cid:255)(cid:1219)n ông bà, cha

(cid:80)(cid:1213), cùng toàn th(cid:1223) gia (cid:255)ình, nh(cid:1267)ng ng(cid:1133)(cid:1249)i (cid:255)ã nuôi (cid:71)(cid:1189)y chúng con tr(cid:1133)(cid:1251)ng thành

nh(cid:1133) ngày hôm nay.

Chúng tôi xin chân thành cám (cid:1131)n s(cid:1269) giúp (cid:255)(cid:1253), (cid:255)(cid:1245)ng viên, nh(cid:1201)n xét, (cid:255)óng

góp ý ki(cid:1219)n c(cid:1259)a các anh ch(cid:1231), (cid:69)(cid:1189)n bè trong quá trình th(cid:1269)c hi(cid:1227)n lu(cid:1201)n v(cid:259)n này.

TP. H(cid:1239) Chí Minh, 7/2005

Nhóm sinh viên th(cid:1269)c hi(cid:1227)n

Giang Qu(cid:1237)c Minh – H(cid:1239) Ph(cid:1189)m Thái Vinh

B(cid:1236) C(cid:1256)C (cid:38)(cid:1258)A LU(cid:1200)N V(cid:258)N

Lu(cid:1201)n v(cid:259)n g(cid:1239)m có 3 ph(cid:1195)n và 7 ch(cid:1133)(cid:1131)ng

PH(cid:1194)N 1: T(cid:1240)NG QUAN

Ch(cid:1133)(cid:1131)ng 1 Gi(cid:1247)i thi(cid:1227)u v(cid:1221)(cid:3)(cid:255)(cid:1221) tài

PH(cid:1194)N 2: TÌM HI(cid:1222)U CÁC V(cid:1192)N (cid:264)(cid:1220) L(cid:1200)P TRÌNH. Ph(cid:1195)n này gi(cid:1247)i thi(cid:1227)u

các v(cid:1193)n (cid:255)(cid:1221) l(cid:1201)p trình c(cid:1131) (cid:69)(cid:1191)n nh(cid:1193)t (cid:255)(cid:1223) xây d(cid:1269)ng 1(cid:3)(cid:1261)ng (cid:71)(cid:1257)ng có kh(cid:1191) (cid:81)(cid:259)ng b(cid:1203)t

các gói tin và cho phép ng(cid:1133)(cid:1249)i dùng có th(cid:1223) (cid:255)i(cid:1221)u khi(cid:1223)n t(cid:1263) xa qua môi

tr(cid:1133)(cid:1249)ng (cid:80)(cid:1189)ng.

Ch(cid:1133)(cid:1131)ng 2. Tìm hi(cid:1223)u th(cid:1133) vi(cid:1227)n l(cid:1201)p trình m(cid:1189)ng c(cid:1193)p th(cid:1193)p libpcap, (cid:255)ây là

“trái tim” (cid:70)(cid:1259)a h(cid:1195)u h(cid:1219)t các (cid:1261)ng (cid:71)(cid:1257)ng b(cid:1203)t gói tin mã ngu(cid:1239)n m(cid:1251) hi(cid:1227)n nay.

Ch(cid:1133)(cid:1131)ngg 3. Gi(cid:1247)i thi(cid:1227)u MySQL, m(cid:1245)t h(cid:1227) qu(cid:1191)n tr(cid:1231) (cid:70)(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u t(cid:1195)m trung

(cid:255)(cid:1133)(cid:1255)c s(cid:1265) d(cid:1257)ng ph(cid:1241) bi(cid:1219)n nh(cid:1193)t hi(cid:1227)n nay.

Ch(cid:1133)(cid:1131)ng 4. Tìm hi(cid:1223)u (cid:78)(cid:1275) thu(cid:1201)t l(cid:1201)p trình socket (cid:255)(cid:1223) vi(cid:1219)t các (cid:1261)ng (cid:71)(cid:1257)ng trên

môi tr(cid:1133)(cid:1249)ng (cid:80)(cid:1189)ng

Ph(cid:1195)n 3 Xây (cid:71)(cid:1257)ng (cid:1261)ng (cid:71)(cid:1257)ng PacketCap. Ph(cid:1195)n này (cid:86)(cid:1217) s(cid:1265) d(cid:1257)ng các ki(cid:1219)n

th(cid:1261)c (cid:255)ã tìm hi(cid:1223)u (cid:1251) ch(cid:1133)(cid:1131)ng 2, 3, 4 (cid:255)(cid:1223) xây d(cid:1269)ng m(cid:1245)t (cid:1261)ng (cid:71)(cid:1257)ng b(cid:1203)t gói tin,

(cid:79)(cid:1133)u các k(cid:1219)t qu(cid:1191) b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c vào c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u (cid:255)(cid:1223) phân tích các thông tin

(cid:80)(cid:1189)ng.

Ch(cid:1133)(cid:1131)ng 5. Phân tích, thi(cid:1219)t k(cid:1219)(cid:3)(cid:1261)ng (cid:71)(cid:1257)ng PacketCap

Ch(cid:1133)(cid:1131)ng 6. Cài (cid:255)(cid:1211)t và th(cid:1265) nghi(cid:1227)m PacketCap

Ch(cid:1133)(cid:1131)ng 7. T(cid:1241)ng k(cid:1219)t. Ch(cid:1133)(cid:1131)ng này trình bày nh(cid:1267)ng k(cid:1219)t qu(cid:1191) (cid:255)(cid:1189)t (cid:255)(cid:1133)(cid:1255)c,

nh(cid:1267)ng (cid:75)(cid:1189)n ch(cid:1219) và h(cid:1133)(cid:1247)ng phát tri(cid:1223)n PacketCap trong t(cid:1133)(cid:1131)ng lai.

Các danh (cid:80)(cid:1257)c

M(cid:1256)C (cid:47)(cid:1256)C

11

DANH SÁCH HÌNH.................................................................................... 14 DANH SÁCH (cid:37)(cid:1190)NG .................................................................................. 15 PH(cid:1194)N 1: T(cid:1240)NG QUAN .............................................................................. 16 Ch(cid:1133)(cid:1131)ng 1: Gi(cid:1247)i thi(cid:1227)u (cid:255)(cid:1221) tài .......................................................................... 17 1.1. (cid:264)(cid:1211)t v(cid:1193)n (cid:255)(cid:1221) .......................................................................................... 17 1.2. Gi(cid:1247)i thi(cid:1227)u (cid:255)(cid:1221) tài.................................................................................. 18 1.3. Yêu c(cid:1195)u (cid:70)(cid:1259)a (cid:255)(cid:1221) tài .............................................................................. 19 PH(cid:1194)N 2: TÌM HI(cid:1222)U CÁC V(cid:1192)N (cid:264)(cid:1220) L(cid:1200)P TRÌNH ...................................... 20 Ch(cid:1133)(cid:1131)ng 2 : Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap ................................................ 21 2.1. Gi(cid:1247)i thi(cid:1227)u libpcap............................................................................... 21 2.2. Cài (cid:255)(cid:1211)t th(cid:1133) vi(cid:1227)n libpcap ..................................................................... 21 3.3. Các b(cid:1133)(cid:1247)c xây d(cid:1269)ng ch(cid:1133)(cid:1131)ng trình s(cid:1265) d(cid:1257)ng libpcap.............................. 22 3.4. Chi ti(cid:1219)t các b(cid:1133)(cid:1247)c ................................................................................ 23 3.4.1. Ch(cid:1233)n Interface( card (cid:80)(cid:1189)ng) ......................................................... 23 3.4.2. M(cid:1251) device (cid:255)(cid:1223) l(cid:1203)ng nghe( sniff) d(cid:1267) li(cid:1227)u......................................... 24 3.4.3. (cid:47)(cid:1233)c traffic .................................................................................... 25 Ch(cid:1133)(cid:1131)ng 3: H(cid:1227) qu(cid:1191)n tr(cid:1231) (cid:70)(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u MySQL ............................................... 34 3.1. Gi(cid:1247)i thi(cid:1227)u v(cid:1221) MySQL......................................................................... 34 3.2. Cài (cid:255)(cid:1211)t MySQL.................................................................................. 34 3.2.1. Cài (cid:264)(cid:1211)t MySQL t(cid:1263) các gói nh(cid:1231) phân ............................................ 34 3.2.2. Cài (cid:255)(cid:1211)t t(cid:1263) mã ngu(cid:1239)n..................................................................... 35 3.3. S(cid:1265) d(cid:1257)ng MySQL ................................................................................ 36 3.3.1. L(cid:1227)nh mysql .................................................................................. 36 3.3.2. L(cid:1227)nh mysqladmin ........................................................................ 36 3.3.3. L(cid:1227)nh mysqlshow.......................................................................... 36 3.3.4. L(cid:1227)nh grant.................................................................................... 37 3.3.5. L(cid:1227)nh Revoke................................................................................ 38 3.3.6. Ví d(cid:1257) v(cid:1221) t(cid:1189)o m(cid:1245)t c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u ..................................................... 38 3.4. L(cid:1201)p trình MySQL trên ngôn ng(cid:1267) C .................................................... 38 4.4.1 mysql_init..................................................................................... 38 3.4.2 mysql_real_connection ................................................................. 39 3.4.3 mysql_query ................................................................................. 40 3.4.4. mysql_affected_rows ................................................................... 40 3.4.5. mysql_store_result....................................................................... 40 3.4.6. mysql_fetch_row ......................................................................... 40 3.4.7. mysql_row_seek .......................................................................... 41 3.4.8. mysql_free_result ........................................................................ 41

Các danh (cid:80)(cid:1257)c

12

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket .......................................................................... 42 4.1. Gi(cid:1247)i thi(cid:1227)u v(cid:1221) l(cid:1201)p trình socket ............................................................. 42 4.2. Nguyên lý ho(cid:1189)t (cid:255)(cid:1245)ng (cid:70)(cid:1259)a socket......................................................... 42 4.3. L(cid:1201)p trình v(cid:1247)i socket ........................................................................... 44 4.3.1. Các thu(cid:1245)c tính (cid:70)(cid:1259)a socket............................................................. 44 4.3.1.1. Vùng( domain) ...................................................................... 44 5.3.1.2. Ki(cid:1223)u socket(type)................................................................... 46 4.3.1.3. Giao th(cid:1261)c (cid:70)(cid:1259)a socket( protocol) ............................................. 47 4.3.2. (cid:55)(cid:1189)o socket.................................................................................... 48 4.3.3. (cid:264)(cid:1231)nh (cid:255)(cid:1231)a ch(cid:1229) cho socket................................................................ 49 4.3.4. (cid:264)(cid:1211)t tên cho socket........................................................................ 51 4.3.5. (cid:55)(cid:1189)o hàng (cid:255)(cid:1255)i cho socket .............................................................. 52 4.3.6. Ch(cid:1249) và ch(cid:1193)p nh(cid:1201)n k(cid:1219)t n(cid:1237)i............................................................. 53 4.3.7. Yêu c(cid:1195)u k(cid:1219)t n(cid:1237)i ............................................................................ 54 4.3.8. (cid:264)óng k(cid:1219)t n(cid:1237)i ................................................................................ 55 4.3.9. Giao ti(cid:1219)p b(cid:1205)ng socket................................................................... 56 4.4. S(cid:1265) d(cid:1257)ng socket trong (cid:1261)ng (cid:71)(cid:1257)ng minh (cid:75)(cid:1233)a ....................................... 58 PH(cid:1194)N 3: XÂY D(cid:1268)NG (cid:1260)NG (cid:39)(cid:1256)NG TH(cid:1264) NGHI(cid:1226)M PACKETCAP ......... 59 Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap .................................................. 60 5.1. Kh(cid:1191)o sát hi(cid:1227)n tr(cid:1189)ng ............................................................................ 60 5.2. Phân tích và xác (cid:255)(cid:1231)nh yêu c(cid:1195)u ............................................................ 61 5.2.1. Phân tích ...................................................................................... 61 5.2.2. Xác (cid:255)(cid:1231)nh yêu c(cid:1195)u ......................................................................... 61 5.3. Các h(cid:1133)(cid:1247)ng xây d(cid:1269)ng (cid:1261)ng (cid:71)(cid:1257)ng PacketCap......................................... 63 5.3.1. Phân tích h(cid:1133)(cid:1247)ng phát tri(cid:1223)n d(cid:1269)a trên Ethereal................................ 63 5.3.2. Phân tích h(cid:1133)(cid:1247)ng phát tri(cid:1223)n d(cid:1269)a trên libcap ................................... 64 5.3.3. L(cid:1269)a ch(cid:1233)n h(cid:1133)(cid:1247)ng phát tri(cid:1223)n PacketCap ......................................... 64 5.4. Các thành ph(cid:1195)n PacketCap ................................................................. 65 5.5. Xây d(cid:1269)ng mô hình use case................................................................ 66 5.5.1. Xác (cid:255)(cid:1231)nh Actor và use case .......................................................... 66 5.5.2. Mô hình use case ......................................................................... 66 5.6. (cid:264)(cid:1211)t (cid:87)(cid:1191) use case.................................................................................... 67 5.6.1. Connect........................................................................................ 67 5.6.2. StartCapture................................................................................. 68 5.6.3. StopCapture ................................................................................. 69 5.6.4. GetFilter....................................................................................... 70 5.6.5. Terminate..................................................................................... 71

Các danh (cid:80)(cid:1257)c

13

5.7.Thi(cid:1219)t k(cid:1219) d(cid:1267) li(cid:1227)u ................................................................................... 72 5.7.1. Phân tích các h(cid:1133)(cid:1247)ng l(cid:1133)u tr(cid:1267) ......................................................... 72 5.7.2. Thi(cid:1219)t k(cid:1219) (cid:70)(cid:1131) s(cid:1251) (cid:71)(cid:1133) li(cid:1227)u................................................................... 75 5.7.2.1. Danh sách các (cid:255)(cid:1241)i t(cid:1133)(cid:1255)ng (table)............................................. 75 5.7.2.2 Table PACKET ...................................................................... 75 6.7.2.4. Table IP ................................................................................. 76 5.7.2.5. Table TCP ............................................................................. 76 5.7.2.6. Table UDP............................................................................. 77 5.7.2.7 Table ICMP ............................................................................ 77 5.7.2.8 Table IGMP............................................................................ 78 5.7.2.9. Table ARP ............................................................................. 80 5.8. Xây d(cid:1269)ng PCServer( server), PCManager(client)............................... 81 5.8.1. L(cid:1133)u (cid:255)(cid:1239) PCServer ......................................................................... 81 5.8.2. L(cid:1133)u (cid:255)(cid:1239) PCManager( Client)......................................................... 82 5.8.3. C(cid:1193)u trúc d(cid:1267) li(cid:1227)u trao (cid:255)(cid:1241)i gi(cid:1267)a PCServer và PCManager............... 83 5.9.Thi(cid:1219)t k(cid:1219) giao di(cid:1227)n PCManager( phiên (cid:69)(cid:1191)n ch(cid:1189)y trên Windows) .......... 85 Ch(cid:1133)(cid:1131)ng 6: Cài (cid:255)(cid:1211)t và th(cid:1265) nghi(cid:1227)m................................................................. 87 6.1. Cài (cid:255)(cid:1211)t................................................................................................ 87 6.2. Th(cid:1265) nghi(cid:1227)m........................................................................................ 88 6.2.1. Mô hình th(cid:1265) nghi(cid:1227)m 1.................................................................. 88 6.2.2. Mô hình th(cid:1265) nghi(cid:1227)m 2.................................................................. 89 6.2.3. Mô hình th(cid:1265) nghi(cid:1227)m 3.................................................................. 90 Ch(cid:1133)(cid:1131)ng 7: T(cid:1241)ng k(cid:1219)t ..................................................................................... 91 7.1. K(cid:1219)t lu(cid:1201)n.............................................................................................. 91 7.1.1. K(cid:1219)t qu(cid:1191) (cid:255)(cid:1189)t (cid:255)(cid:1133)(cid:1255)c.......................................................................... 91 7.1.2. (cid:43)(cid:1189)n ch(cid:1219)........................................................................................ 91 7.2. H(cid:1133)(cid:1247)ng phát tri(cid:1223)n ................................................................................ 92 PH(cid:1256) L(cid:1256)C H(cid:1133)(cid:1247)ng d(cid:1199)n s(cid:1265) d(cid:1257)ng PacketCap ................................................... 93 1.Ch(cid:1133)(cid:1131)ng trình PCServer.......................................................................... 93 2. Ch(cid:1133)(cid:1131)ng trình PCManager ..................................................................... 93 2.1. PCManager trên môi tr(cid:1133)(cid:1249)ng Linux ................................................. 93 2.2. PCManager trên môi tr(cid:1133)(cid:1249)ng Windows............................................ 94 TÀI LI(cid:1226)U THAM KH(cid:1190)O ............................................................................ 95

Các danh (cid:80)(cid:1257)c

DANH SÁCH HÌNH

14

Hình 5-1 Các thành ph(cid:1195)n (cid:70)(cid:1259)a PacketCap...................................................... 65 Hình 5-2 Mô hình use case ........................................................................... 66 Hình 5-3 Mô hình l(cid:1133)u tr(cid:1267) 1 .......................................................................... 72 Hình 5-4 Mô hình l(cid:1133)u tr(cid:1267) 2 .......................................................................... 73 Hình 5-5 Mô hình l(cid:1133)u tr(cid:1267) 3 .......................................................................... 74 Hình 5-6 L(cid:1133)u (cid:255)(cid:1239) PCServer........................................................................... 81 Hình 5-7 L(cid:1133)u (cid:255)(cid:1239) PCManager ....................................................................... 82 Hình 6-1 Mô hình th(cid:1265) nghi(cid:1227)m 1 ................................................................... 88 Hình 6-2 Mô hình th(cid:1265) nghi(cid:1227)m 2 ................................................................... 89 Hình 6-3 Mô hình th(cid:1265) nghi(cid:1227)m 3 ................................................................... 90

Các danh (cid:80)(cid:1257)c

DANH SÁCH (cid:37)(cid:1190)NG

15

(cid:37)(cid:1191)ng 4-1 Các giá tr(cid:1231) c(cid:1259)a domain .................................................................. 48 (cid:37)(cid:1191)ng 4-2 Các mã l(cid:1243)i (cid:70)(cid:1259)a hàm bind() ............................................................ 51 (cid:37)(cid:1191)ng 4-3 Các mã l(cid:1243)i (cid:70)(cid:1259)a domain AF_UNIX ................................................ 52 (cid:37)(cid:1191)ng 4-4 Mã l(cid:1243)i (cid:70)(cid:1259)a hàm connect().............................................................. 55 (cid:37)(cid:1191)ng 5-1 Xác (cid:255)(cid:1231)nh yêu c(cid:1195)u........................................................................... 62 (cid:37)(cid:1191)ng 5-2 Danh sách các (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng ............................................................... 75 (cid:37)(cid:1191)ng 5-3 Table PACKET............................................................................. 75 (cid:37)(cid:1191)ng 5-4 Table IP ........................................................................................ 76 (cid:37)(cid:1191)ng 5-5 Table TCP..................................................................................... 76 (cid:37)(cid:1191)ng 5-6 Table UDP .................................................................................... 77 (cid:37)(cid:1191)ng 5-7 Table ICMP .................................................................................. 77 (cid:37)(cid:1191)ng 5-8 Table IGMP .................................................................................. 78 (cid:37)(cid:1191)ng 5-9 Table ARP .................................................................................... 80 (cid:37)(cid:1191)ng 5-10 Mô (cid:87)(cid:1191) màn hình PCManager ....................................................... 86

Ph(cid:1195)n 1: T(cid:1241)ng quan

PH(cid:1194)N 1: T(cid:1240)NG QUAN

16

Ch(cid:1133)(cid:1131)ng 1. Gi(cid:1247)i thi(cid:1227)u (cid:255)(cid:1221) tài

Ch(cid:1133)(cid:1131)ng 1: Gi(cid:1247)i thi(cid:1227)u (cid:255)(cid:1221) tài

Ch(cid:1133)(cid:1131)ng 1: Gi(cid:1247)i thi(cid:1227)u (cid:255)(cid:1221) tài

1.1. (cid:264)(cid:1211)t v(cid:1193)n (cid:255)(cid:1221)

Ngày nay công ngh(cid:1227) thông tin nói chung và Intenet nói riêng ngày càng

phát tri(cid:1223)n (cid:80)(cid:1189)nh (cid:80)(cid:1217) và tr(cid:1251) thành không th(cid:1223) thi(cid:1219)u trong cu(cid:1245)c s(cid:1237)ng chúng ta.

Xu(cid:1193)t phát t(cid:1263) nhu c(cid:1195)u trao (cid:255)(cid:1241)i thông tin ngày càng nhanh và nhi(cid:1221)u gi(cid:1267)a

các doanh nghi(cid:1227)p, các t(cid:1241) ch(cid:1261)c và công ty trong n(cid:1221)n kinh t(cid:1219) th(cid:1231) tr(cid:1133)(cid:1249)ng hôm

nay, s(cid:1237) l(cid:1133)(cid:1255)ng các doanh nghi(cid:1227)p thi(cid:1219)t l(cid:1201)p các h(cid:1227) th(cid:1237)ng m(cid:1189)ng và k(cid:1219)t n(cid:1237)i Intenet

ngày càng nhi(cid:1221)u.

Vi(cid:1227)c Công ngh(cid:1227) thông tin và m(cid:1189)ng Intenet phát tri(cid:1223)n và ngày càng nhi(cid:1221)u

các thông tin quan tr(cid:1233)ng (cid:255)(cid:1133)(cid:1255)c trao (cid:255)(cid:1241)i trên m(cid:1189)ng làm n(cid:1191)y sinh m(cid:1245)t s(cid:1237) v(cid:1193)n (cid:255)(cid:1221)

quan tr(cid:1233)ng là b(cid:1191)o m(cid:1201)t thông tin trên m(cid:1189)ng (cid:255)(cid:1223) tránh rò r(cid:1229) hay ng(cid:259)n không cho

truy c(cid:1201)p vào các d(cid:1267) li(cid:1227)u không cho phép gây thi(cid:1227)t h(cid:1189)i kinh t(cid:1219), qu(cid:1191)n lý b(cid:259)ng

thông (cid:255)(cid:1223) t(cid:259)ng kh(cid:1191) n(cid:259)ng (cid:255)áp (cid:1261)ng thông tin, giao d(cid:1231)ch v(cid:1247)i khách hàng (cid:255)(cid:1239)ng th(cid:1249)i

tránh (cid:255)(cid:1133)(cid:1255)c tình tr(cid:1189)ng ngh(cid:1217)n m(cid:1189)ch l(cid:1133)u thông trên m(cid:1189)ng.

Vi(cid:1227)c phân tích l(cid:1133)u l(cid:1133)(cid:1255)ng m(cid:1189)ng (cid:255)òi h(cid:1235)i n(cid:259)ng l(cid:1269)c tính toán r(cid:1193)t l(cid:1247)n, vì v(cid:1201)y

mu(cid:1237)n làm (cid:255)(cid:1133)(cid:1255)c vi(cid:1227)c này c(cid:1195)n ph(cid:1191)i trang b(cid:1231) các siêu máy tính (cid:255)(cid:1223) th(cid:1269)c hi(cid:1227)n bài

toán này. Trong (cid:255)(cid:76)(cid:1221)u ki(cid:1227)n kinh t(cid:1219) n(cid:1133)(cid:1247)c ta thì không th(cid:1223) trang b(cid:1231) nh(cid:1267)ng h(cid:1227)

17

th(cid:1237)ng này (cid:255)(cid:1133)(cid:1255)c vì chúng quá (cid:255)(cid:1203)t (cid:255)(cid:1235).

Ch(cid:1133)(cid:1131)ng 1: Gi(cid:1247)i thi(cid:1227)u (cid:255)(cid:1221) tài

(cid:57)(cid:1201)y gi(cid:1191)i pháp nào (cid:255)(cid:1223) gi(cid:1191)i quy(cid:1219)t bài toán này ?

• Grid Computing là h(cid:1227) th(cid:1237)ng tính toán song song và phân tán

cho phép chúng ta th(cid:1269)c hi(cid:1227)n nh(cid:1267)ng bài toán l(cid:1247)n d(cid:1269)a trên các

(cid:75)(cid:1227) th(cid:1237)ng nh(cid:1235) g(cid:1239)m nhi(cid:1221)u máy tính (cid:255)(cid:1133)(cid:1255)c n(cid:1237)i m(cid:1189)ng v(cid:1247)i nhau. • Hi(cid:1227)n nay chúng ta l(cid:1189)i có r(cid:1193)t nhi(cid:1221)u h(cid:1227) th(cid:1237)ng máy tính n(cid:1237)i

(cid:80)(cid:1189)ng nh(cid:1133)ng ch(cid:1133)a s(cid:1265) d(cid:1257)ng (cid:255)(cid:1133)(cid:1255)c h(cid:1219)t kh(cid:1191) n(cid:259)ng tính toán c(cid:1259)a

chúng.

• (cid:57)(cid:1247)i s(cid:1237) l(cid:1133)(cid:1255)ng các máy tính (cid:255)(cid:1259) l(cid:1247)n thì vi(cid:1227)c tri(cid:1223)n khai Grid

Computing s(cid:1217) cho chúng ta m(cid:1245)t h(cid:1227) th(cid:1237)ng tính toán c(cid:1269)c kì

(cid:80)(cid:1189)nh g(cid:1193)p nhi(cid:1221)u l(cid:1195)n 1 siêu máy tính ( lúc (cid:255)ó các siêu máy tính

có th(cid:1223) ch(cid:1229) là m(cid:1245)t node trong h(cid:1227) th(cid:1237)ng Grid Computing).

(cid:57)(cid:1247)i nh(cid:1267)ng (cid:1133)u (cid:255)(cid:76)(cid:1223)m trên chúng tôi ch(cid:1233)n (cid:255)(cid:1221) tài “(cid:1260)ng d(cid:1257)ng th(cid:1265) nghi(cid:1227)m

Grid Computing trong vi(cid:1227)c phân tích thông tin m(cid:1189)ng ph(cid:1257)c v(cid:1257) qu(cid:1191)n lý”.

1.2. Gi(cid:1247)i thi(cid:1227)u (cid:255)(cid:1221) tài

(cid:264)(cid:1221) tài “(cid:1260)ng (cid:71)(cid:1257)ng th(cid:1265) nghi(cid:1227)m Grid Computing trong vi(cid:1227)c phân tích

thông tin (cid:80)(cid:1189)ng ph(cid:1257)c (cid:89)(cid:1257) qu(cid:1191)n lý” là m(cid:1245)t (cid:255)(cid:1221) l(cid:1247)n g(cid:1239)m 2 nhóm th(cid:1269)c hi(cid:1227)n.

Nhóm th(cid:1261) 1 (cid:86)(cid:1217) xây d(cid:1269)ng (cid:1261)ng d(cid:1257)ng phân tán trên m(cid:1189)ng cho phép thi(cid:1219)t l(cid:1201)p t(cid:1263)

xa ch(cid:1219)(cid:3)(cid:255)(cid:1245) l(cid:1233)c và b(cid:1203)t các gói tin, trích l(cid:1233)c và l(cid:1133)u vào các c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u trên

(cid:80)(cid:1189)ng(cid:3)(cid:255)(cid:1223) ph(cid:1257)c (cid:89)(cid:1257) cho vi(cid:1227)c theo dõi và phân tích thông tin (cid:80)(cid:1189)ng (Ph(cid:1195)n I).

Nhóm th(cid:1261) 2 (cid:86)(cid:1217) tìm hi(cid:1223)u Grid Computing và xây d(cid:1269)ng (cid:1261)ng (cid:71)(cid:1257)ng (cid:255)(cid:1223) phân

tích hi(cid:1227)n tr(cid:1189)ng c(cid:1259)a m(cid:1189)ng d(cid:1269)a trên thông tin t(cid:1263) (cid:70)(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u do nhóm th(cid:1261) 1

18

xây d(cid:1269)ng (Ph(cid:1195)n II).

Ch(cid:1133)(cid:1131)ng 1: Gi(cid:1247)i thi(cid:1227)u (cid:255)(cid:1221) tài

1.3. Yêu c(cid:1195)u (cid:70)(cid:1259)a (cid:255)(cid:1221) tài

• Xây d(cid:1269)ng (cid:1261)ng d(cid:1257)ng phân tán th(cid:1265) nghi(cid:1227)m cho phép b(cid:1203)t các gói tin

dùng (cid:255)(cid:1223) phân tích thông tin (cid:80)(cid:1189)ng ph(cid:1257)c (cid:89)(cid:1257) qu(cid:1191)n lý.

• Các gói tin sau khi b(cid:1203)t, (cid:255)(cid:1133)(cid:1255)c trích thông tin và l(cid:1133)u vào các c(cid:1131) s(cid:1251) d(cid:1267)

li(cid:1227)u phân tán trên m(cid:1189)ng theo nhu c(cid:1195)u c(cid:1259)a ng(cid:1133)(cid:1249)i qu(cid:1191)n tr(cid:1231).

• (cid:43)(cid:1227) th(cid:1237)ng cho phép c(cid:1193)u hình (cid:1261)ng d(cid:1257)ng t(cid:1263) xa. • H(cid:1241) tr(cid:1255) (cid:79)(cid:1133)u k(cid:1219)t qu(cid:1191) b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c theo (cid:255)(cid:1231)nh (cid:71)(cid:1189)ng (cid:70)(cid:1259)a các (cid:1261)ng (cid:71)(cid:1257)ng b(cid:1203)t

19

gói tin khác nh(cid:1133) Ethereal, TCPDump...

Ph(cid:1195)n 2: Tìm hi(cid:1223)u các v(cid:1193)n (cid:255)(cid:1221) l(cid:1201)p trình

PH(cid:1194)N 2: TÌM HI(cid:1222)U CÁC V(cid:1192)N (cid:264)(cid:1220) L(cid:1200)P TRÌNH

Ch(cid:1133)(cid:1131)ng 2. Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

Ch(cid:1133)(cid:1131)ng 3. H(cid:1227) qu(cid:1191)n tr(cid:1231) (cid:70)(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u MySQL

20

Ch(cid:1133)(cid:1131)ng 4. L(cid:1201)p trình socket

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

Ch(cid:1133)(cid:1131)ng 2 : Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

2.1. Gi(cid:1247)i thi(cid:1227)u libpcap

Libpcap là m(cid:1245)t th(cid:1133) vi(cid:1227)n mã ngu(cid:1239)n m(cid:1251) (cid:75)(cid:1243) tr(cid:1255) l(cid:1201)p trình (cid:80)(cid:1189)ng c(cid:1193)p th(cid:1193)p,

cho phép b(cid:1203)t các gói tin trên (cid:255)(cid:1133)(cid:1249)ng truy(cid:1221)n theo nhi(cid:1221)u h(cid:1133)(cid:1247)ng khác nhau, cho

phép phân tích các frame v(cid:1263)a tìm (cid:255)(cid:1133)(cid:1255)c.

Th(cid:1133) vi(cid:1227)n libcap (cid:255)(cid:1133)(cid:1255)c s(cid:1265) d(cid:1257)ng r(cid:1245)ng rãi trong các ph(cid:1195)n m(cid:1221)m sniffer

packet. Các ph(cid:1195)n m(cid:1221)m s(cid:1265) d(cid:1257)ng libcap ph(cid:1241) bi(cid:1219)n là TCPdump, TCPflow.

Hi(cid:1227)n nay phiên (cid:69)(cid:1191)n m(cid:1247)i nh(cid:1193)t (cid:70)(cid:1259)a libpcap là 0.9.1.

2.2. Cài (cid:255)(cid:1211)t th(cid:1133) vi(cid:1227)n libpcap

Ch(cid:1133)(cid:1131)ng trình ngu(cid:1239)n c(cid:1259)a libpcap có th(cid:1223) download (cid:1251) (cid:255)(cid:1231)a ch(cid:1229)

www.tcpdump.org , các phiên (cid:69)(cid:1191)n m(cid:1247)i nh(cid:1193)t (cid:70)(cid:1259)a libpcap (cid:255)(cid:1221)u có (cid:1251) (cid:255)(cid:1231)a ch(cid:1229) này.

Gi(cid:1191) s(cid:1265) b(cid:1189)n (cid:87)(cid:1191)i v(cid:1221) gói libpcap-0.8.3.tar.tar, ti(cid:1219)n hành cài (cid:255)(cid:1211)t:

• Gi(cid:1191)i nén gói tar

tar –xzvf libpcap-0.8.3.tar.tar

• Chuy(cid:1223)n vào th(cid:1133) m(cid:1257)c libpcap

cd libpcap-0.8.3 • gõ l(cid:1227)nh ./configure • Gõ l(cid:1227)nh make • Gõ l(cid:1227)nh make install

21

N(cid:1219)u không có l(cid:1243)i gì x(cid:1191)y ra thì quá trình cài (cid:255)(cid:1211)t (cid:255)ã hoàn t(cid:1193)t.

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

3.3. Các b(cid:1133)(cid:1247)c xây d(cid:1269)ng ch(cid:1133)(cid:1131)ng trình s(cid:1265) d(cid:1257)ng libpcap

Có 5 b(cid:1133)(cid:1247)c chính trong vi(cid:1227)c s(cid:1265) d(cid:1257)ng th(cid:1133) vi(cid:1227)n libpcap

• (cid:37)(cid:1133)(cid:1247)c 1: Xác (cid:255)(cid:1231)nh interface (card (cid:80)(cid:1189)ng) mà ta mu(cid:1237)n b(cid:1203)t frame vào

(Trong Linux, interface th(cid:1133)(cid:1249)ng là eth0,eth1…..Ta có th(cid:1223) dùng các

hàm pcap_lookupdev() c(cid:1259)a th(cid:1133) vi(cid:1227)n libpcap (cid:255)(cid:1223) l(cid:1193)y t(cid:1193)t c(cid:1191) các

inteface.

• (cid:37)(cid:1133)(cid:1247)c 2: Kh(cid:1251)i t(cid:1189)o pcap. Cung c(cid:1193)p cho pcap bi(cid:1219)t interface nào trong

(cid:86)(cid:1237) các interface (cid:255)ã l(cid:1193)y v(cid:1221)(cid:3)(cid:1251) b(cid:1133)(cid:1247)c trên s(cid:1217)(cid:3)(cid:255)(cid:1133)(cid:1255)c ch(cid:1233)n (cid:255)(cid:1223) sniff.

• (cid:37)(cid:1133)(cid:1247)c 3: L(cid:1233)c frame .pcap cho chúng ta c(cid:1131) ch(cid:1219) ch(cid:1233)n l(cid:1269)a khi l(cid:1233)c các

frame khi b(cid:1203)t (ví d(cid:1257) ch(cid:1229) b(cid:1203)t frame TCP/IP có source IP

192.168.8.8 và port 23 …). ta ph(cid:1191)i t(cid:1189)o ra filter r(cid:1239)i biên (cid:71)(cid:1231)ch filter

này (cid:255)(cid:1223) báo cho pcap bi(cid:1219)t b(cid:1245) l(cid:1233)c nó s(cid:1217) dùng.

• (cid:37)(cid:1133)(cid:1247)c 4: Pcap th(cid:1269)c thi vi(cid:1227)c sniff frames. • (cid:37)(cid:1133)(cid:1247)c 5: (cid:264)óng phiên làm vi(cid:1227)c và k(cid:1219)t thúc (cid:1261)ng d(cid:1257)ng

Trên (cid:255)ây là qui trình t(cid:1241)ng quát cách libpcap b(cid:1203)t gói tin trong (cid:255)ó b(cid:1133)(cid:1247)c 3

22

là tùy ch(cid:1233)n có th(cid:1223) có ho(cid:1211)c không.

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

3.4. Chi ti(cid:1219)t các b(cid:1133)(cid:1247)c

3.4.1. Ch(cid:1233)n Interface( card (cid:80)(cid:1189)ng)

Có 3 cách thi(cid:1219)t l(cid:1201)p devices (cid:255)(cid:1223) sniff các frames d(cid:1267) li(cid:1227)u • Cách 1 : Cho ng(cid:1133)(cid:1249)i dùng nh(cid:1201)p tên thi(cid:1219)t b(cid:1231) t(cid:1263) dòng l(cid:1227)nh

#include

#include

int main(int argc , char* argv[])

{

Char * dev = argv[1]

Printf((cid:179)Devices : %s \n(cid:179),dev);

}

Trong (cid:255)ó argv[1] là tham s(cid:1237) dòng l(cid:1227)nh (cid:255)(cid:1195)u tiên • Cách 2 : S(cid:1265) d(cid:1257)ng hàm pcap_lookupdev() c(cid:1259)a libpcap (cid:255)(cid:1223) tìm

ki(cid:1219)m các interface t(cid:1239)n (cid:87)(cid:1189)i trên máy tính.

#include

#include

int main(int argc , char* argv[])

{

Char* dev,errbuf[PCAP_ERRBUF_SIZE]

dev = pcap_lookupdev(errbuf);

if(dev == NULL)

{

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

exit(1);

}

printf("DEV: %s\n",dev);

23

}

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

Trong tr(cid:1133)(cid:1249)ng h(cid:1255)p này, pcap t(cid:1269) tìm ra thi(cid:1219)t b(cid:1231). errbuf là chu(cid:1243)i ch(cid:1261)a

thông báo l(cid:1243)i n(cid:1219)u có.

• Cách 3 : Dùng hàm pcap_findalldevs (cid:255)(cid:1223) tìm t(cid:1193)t c(cid:1191) thi(cid:1219)t b(cid:1231) sau (cid:255)ó

(cid:255)(cid:1133)a vào m(cid:1245)t m(cid:1191)ng

#include

#include

int main(int argc , char* argv[])

{

pcap_if_t *devlist;

char devname[10][100];

Char* dev,errbuf[PCAP_ERRBUF_SIZE]

int devcount=0;

retvalue=pcap_findalldevs(&devlist,err);

if(retvalue==-1 || devlist==NULL)

return 0;

for(d=devlist,i=0; d && i<10 ;d=d->next,i++)

sprintf(devname[i],"%s",d->name);

devcount=i;

}

3.4.2. M(cid:1251) device (cid:255)(cid:1223) l(cid:1203)ng nghe( sniff) d(cid:1267) li(cid:1227)u

Kh(cid:1251)i t(cid:1189)o phiên làm vi(cid:1227)c cho các thi(cid:1219)t b(cid:1231) s(cid:1265) d(cid:1257)ng hàm

pcap_open_live(). C(cid:1193)u trúc hàm này nh(cid:1133) sau :

pcap_t *pcap_open_lives(

char* device,int snaplen,int promisc,int yo_ms,char *ebuf)

24

Tham s(cid:1237): • device là thi(cid:1219)t b(cid:1231)(cid:3)(cid:255)ã (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1231)nh ngh(cid:429)a (cid:1251) trên

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

• snaplen cho bi(cid:1219)t s(cid:1237) byte l(cid:1247)n nh(cid:1193)t mà pcap có th(cid:1223) b(cid:1203)t frames • promisc n(cid:1219)u (cid:255)(cid:1211)t b(cid:1205)ng 1 thì interface s(cid:1217) ho(cid:1189)t (cid:255)(cid:1245)ng trong ch(cid:1219)(cid:3)(cid:255)(cid:1245)

promiscuos mode. (cid:264)ây là ch(cid:1219)(cid:3)(cid:255)(cid:1245) libpcap s(cid:1217) sniff t(cid:1193)t c(cid:1191) các frame

trên dây d(cid:1199)n. N(cid:1219)u (cid:255)(cid:1211)t b(cid:1205)ng 0 thì interface s(cid:1217) ho(cid:1189)t (cid:255)(cid:1245)ng (cid:1251) ch(cid:1219)(cid:3)(cid:255)(cid:1245)

non promiscuos mode, trong ch(cid:1219)(cid:3) (cid:255)(cid:1245) này,pcap ch(cid:1229) sniff nh(cid:1267)ng

frame g(cid:1265)i (cid:255)(cid:1219)n máy.

Pcap_t *descr

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

if(descr == NULL)

{

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

exit(1);

}

Dev là (cid:255)(cid:1231)nh danh thi(cid:1219)t b(cid:1231).

3.4.3. (cid:47)(cid:1233)c traffic

Trong tr(cid:1133)(cid:1249)ng h(cid:1255)p không b(cid:1203)t t(cid:1193)t c(cid:1191) các gói tin mà ch(cid:1229) b(cid:1203)t các gói tin

theo m(cid:1245)t yêu c(cid:1195)u nào (cid:255)ó ta thì s(cid:1265) d(cid:1257)ng pcap_compile() pcap_setfilter()

có c(cid:1193)u trúc nh(cid:1133) sau:

int pcap_compile(pcap_t *p, struct bpf_program *ft, char *str,

int optimize, bpf_u_int32 netmask )

Tham s(cid:1237)(cid:3)(cid:255)(cid:1195)u tiên là handle c(cid:1259)a phiên làm vi(cid:1227)c (pcap_t). Tham s(cid:1237)

th(cid:1261) hai là tham s(cid:1237) ch(cid:1229)(cid:3) (cid:255)(cid:1219)n n(cid:1131)i l(cid:1133)u compile version c(cid:1259)a filter. str là

chu(cid:1243)i mô t(cid:1191) cho filter bi(cid:1219)t nh(cid:1267)ng gói tin c(cid:1195)n b(cid:1203)t. K(cid:1219)(cid:3)(cid:255)(cid:1219)n là s(cid:1237) nguyên

cho bi(cid:1219)t str là opyimize hay không (1 là true, 0 là false). Cu(cid:1237)i cùng là

25

netmask c(cid:1259)a (cid:255)(cid:1133)(cid:1249)ng m(cid:1189)ng.

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

int pcap_setfilter(pcap_t *p,struct_bpf_program *fp)

Tham s(cid:1237) th(cid:1261) nh(cid:1193)t là handle qu(cid:1191)n lý phiên làm vi(cid:1227)c. Tham s(cid:1237) th(cid:1261) hai

là tham chi(cid:1219)u ch(cid:1229)(cid:3) (cid:255)(cid:1219)n compile version c(cid:1259)a filter ((cid:255)ã (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1231)nh ngh(cid:429)a

trong pcap_compile())

(cid:264)(cid:1231)nh d(cid:1189)ng str mô t(cid:1191) cho filter: • Filter theo source ip

Ví d(cid:1257) ," src net 172.168.8.8 "

• Filter theo dest ip :

Ví d(cid:1257) ," dst net 172.168.8.8 "

• Filter theo source và dest ip

Ví d(cid:1257) ," src and dst net 172.168.8.8 "

• Filter theo source hay dest ip

Ví d(cid:1257) ," src or dst net 172.168.8.8 "

• Filter theo source port :

Ví d(cid:1257) ," src port 23 "

• Filter theo dest port :

Ví d(cid:1257) ," dst port 23 " • Filter theo source và dest port

Ví d(cid:1257) ," src and dst port 23 " • Filter theo source hay dest port

26

Ví d(cid:1257) ," src or dst port 172.168.8.8 "

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

• Filter theo protocal

Ví d(cid:1257) ," tcp "

• Ngoài ra còn có th(cid:1223) filter t(cid:1241)ng h(cid:1255)p :

Ví d(cid:1257) ," dst net 172.168.8.8 and src port 23 tcp"

Ví d(cid:1257) v(cid:1221) filter (cid:255)(cid:1131)n gi(cid:1191)n

#include

(cid:171)(cid:171).

char *dev;

char errbuf[PCAP_ERRBUF_SIZE];

pcap_t* descr;

const u_char *packet;

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

if(dev == NULL)

{

fprintf(stderr,"%s\n",errbuf);

exit(1);

}

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

if(descr == NULL)

{

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

exit(1);

27

}

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

if(pcap_compile(descr,&fp,(cid:180) port 23 (cid:180),0,netp) == -1)

{

fprintf(stderr,"Error calling pcap_compile\n");

exit(1);

}

pcap_setfilter(descr,&fp)

Quá trình b(cid:1203)t frame th(cid:1201)t s(cid:1269) :

(cid:1250)(cid:3)(cid:255)ây ta (cid:255)(cid:1231)nh ngh(cid:429)a m(cid:1245)t thi(cid:1219)t b(cid:1231) m(cid:1245)t thi(cid:1219)t b(cid:1231)(cid:3)(cid:255)(cid:1223) chu(cid:1197)n b(cid:1231) sniff frame

(thi(cid:1219)t l(cid:1201)p filter n(cid:1219)u c(cid:1195)n). Có 2 k(cid:429) thu(cid:1201)t chính (cid:255)(cid:1133)(cid:1255)c dùng trong vi(cid:1227)c sniff

frame. Chúng ta có th(cid:1223) b(cid:1203)t frame và (cid:255)(cid:1133)a vào vòng l(cid:1211)p ch(cid:1249) x(cid:1265) lý. (cid:264)(cid:1195)u

tiên ta xem cách b(cid:1203)t frame s(cid:1265) d(cid:1257)ng hàm pcap_next c(cid:1259)a libpcap.

Hàm này có c(cid:1193)u trúc sau :

u_char *pcap_next(pcap_t *p,struct pcap_hkthdr *h )

Tham s(cid:1237)(cid:3)(cid:255)(cid:1195)u tiên là handle qu(cid:1191)n lý phiên làm vi(cid:1227)c. Tham s(cid:1237) th(cid:1261)

hai là pointer ch(cid:1229)(cid:3)(cid:255)(cid:1219)n c(cid:1193)u trúc l(cid:1133)u gi(cid:1267) thông tin chung v(cid:1221) frame ( th(cid:1249)i

gian b(cid:1203)t, chi(cid:1221)u dài frame …). pcap_next tr(cid:1191) v(cid:1221) m(cid:1245)t con tr(cid:1235) có d(cid:1189)ng

u_char tr(cid:1235)(cid:3)(cid:255)(cid:1219)n frame (cid:255)(cid:1133)(cid:1255)c mô t(cid:1191) b(cid:1251)i c(cid:1193)u trúc này

struct pcap_pkthdr

{

struct timeval ts; time stamp

bpf_u_int32 caplen; length of portion present

bpf_u_int32; lebgth this packet (off wire)

28

}

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

Ví d(cid:1257) v(cid:1221) sniff frame s(cid:1265) d(cid:1269)ng c(cid:1193)u trúc này

#include

#include

#include

#include

#include

#include

#include

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 */

u_char *ptr; /* printing out hardware header info */

dev = pcap_lookupdev(errbuf);

if(dev == NULL)

{

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

exit(1);

}

printf("DEV: %s\n",dev);

29

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

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

if(descr == NULL)

{

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

exit(1);

}

packet = pcap_next(descr,&hdr);

if(packet == NULL)

{

printf("Didn't grab packet\n");

exit(1);

}

printf("Grabbed packet of length %d\n",hdr.len);

printf("Recieved at ..... %s\n",ctime((const

time_t*)&hdr.ts.tv_sec));

pcap_close(descr);

}

Ch(cid:1133)(cid:1131)ng trình này in ra chi(cid:1221)u dài và th(cid:1249)i gian b(cid:1203)t gói tin (cid:255)(cid:1195)u tiên mà

nó b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c. Hàm pcap_close() dùng (cid:255)(cid:1223)(cid:3)(cid:255)óng phiên làm vi(cid:1227)c.

(cid:48)(cid:1245)t k(cid:1275) thu(cid:1201)t khác ph(cid:1261)c t(cid:1189)p h(cid:1131)n là dùng hàm pcap_loop() c(cid:1259)a

libpcap. C(cid:1193)u trúc hai hàm này nh(cid:1133) sau :

int pcap_loop(pcap_t *p, int cnt, pcap_handler callback,

u_char *user)

Tham s(cid:1237)(cid:3)(cid:255)(cid:1195)u tiên là handle qu(cid:1191)n lý phiên làm viêc, tham s(cid:1237) th(cid:1261) hai

là s(cid:1237) frame s(cid:1217)(cid:3)(cid:255)(cid:1133)(cid:1255)c sniff tr(cid:1133)(cid:1247)c khi thoát ra. N(cid:1219)u tham s(cid:1237) này là s(cid:1237) âm

thì s(cid:1217) sniff (cid:255)(cid:1219)n khi nào có l(cid:1243)i x(cid:1191)y ra. Tham s(cid:1237) th(cid:1261) ba là tên c(cid:1259)a hàm

callback. Tham s(cid:1237) cu(cid:1237)i cùng (cid:255)(cid:1133)(cid:1255)c s(cid:1265) d(cid:1257)nng trong m(cid:1245)t s(cid:1237)(cid:3) (cid:1261)ng d(cid:1257)ng,

30

(cid:255)(cid:1131)n gi(cid:1191)n hãy d(cid:1211)t là NULL.

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

C(cid:1193)u trúc c(cid:1259)a hàm callback :

void my_callback(u_char *useless,const struct pcap_pkthdr*

pkthdr,const u_char* packet)

Tham s(cid:1237)(cid:3)(cid:255)(cid:1195)u tiên là tham s(cid:1237) cu(cid:1237)i cùng c(cid:1259)a hàm pcap_loop truy(cid:1221)n

vào (th(cid:1133)(cid:1249)ng là NULL). Tham s(cid:1237) th(cid:1261) hai là c(cid:1193)u trúc pcap_pkthdr.

Ví d(cid:1257) v(cid:1221) cách s(cid:1265) d(cid:1257)ng pcap_loop :

#include

#include

#include

#include

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++;

31

}

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)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);

exit(1);

32

}

Ch(cid:1133)(cid:1131)ng 2: Th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap

pcap_loop(descr,atoi(argv[1]),my_callback,NULL);

fprintf(stdout,"\nDone processing packets... wheew!\n");

return 0;

33

}

Ch(cid:1133)(cid:1131)ng 3: H(cid:1227) qu(cid:1191)n tr(cid:1231) c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u MySQL

Ch(cid:1133)(cid:1131)ng 3: H(cid:1227) qu(cid:1191)n tr(cid:1231) (cid:70)(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u MySQL

3.1. Gi(cid:1247)i thi(cid:1227)u v(cid:1221) MySQL

Công ty Tcx mu(cid:1237)n phát tri(cid:1223)n m(cid:1245)t (cid:1261)ng d(cid:1257)ng web và mu(cid:1237)n s(cid:1265) d(cid:1257)ng c(cid:1131) s(cid:1251)

(cid:71)(cid:1267) li(cid:1227)u c(cid:1259)a riêng mình. Tcx (cid:255)ã d(cid:1269)a trên ti(cid:1219)p c(cid:1201)n l(cid:1201)p trình API c(cid:1259)a mSQL và

ngôn ng(cid:1267) SQL (cid:255)(cid:1223) phát tri(cid:1223)n nên MySQL

MySQL ho(cid:1189)t (cid:255)(cid:1245)ng theo mô hình client-server, r(cid:1193)t (cid:255)(cid:1131)n gi(cid:1191)n, không có các

tính n(cid:259)ng cao c(cid:1193)p nh(cid:1133) qu(cid:1191)n lý giao tác, chia s(cid:1215) k(cid:1219)t n(cid:1237)i. (cid:264)(cid:1133)(cid:1255)c s(cid:1265) d(cid:1257)ng r(cid:1245)ng rãi

trong Linux (cid:255)(cid:1237)i v(cid:1247)i các (cid:1261)ng d(cid:1257)ng cgi hay Perl trong môi tr(cid:1133)(cid:1249)ng Web,

Internet.

(cid:264)(cid:1231)a ch(cid:1229) download MySQL : http://www.MySQL.com

3.2. Cài (cid:255)(cid:1211)t MySQL

3.2.1. Cài (cid:264)(cid:1211)t MySQL t(cid:1263) các gói nh(cid:1231) phân

Các gói c(cid:1195)n thi(cid:1219)t:

• Gói trình ch(cid:1259) (server package):

MySQL-version-architecture.rpm • Gói trình khách (client package):

MySQL-client-version-architecture.rpm

• (cid:43)(cid:1243) tr(cid:1255) th(cid:1133) vi(cid:1227)n cho trình khách:

MySQL-shared-version-architecture.rpm

• Gói phát tri(cid:1223)n (cid:1261)ng d(cid:1257)ng trên MySQL:

MySQL-devel-version-architecture.rpm

Ta cài t(cid:1263)ng gói b(cid:1205)ng l(cid:1227)nh

34

rpm –ivh

Ch(cid:1133)(cid:1131)ng 3: H(cid:1227) qu(cid:1191)n tr(cid:1231) c(cid:1131) s(cid:1265) d(cid:1267) li(cid:1227)u MySQL

Trình cài (cid:255)(cid:1211)t script s(cid:1217) t(cid:1269)(cid:3)(cid:255)(cid:1245)ng t(cid:1189)o: • (cid:48)(cid:1245)t CSDL database m(cid:1199)u • Script init.d và mysql (cid:255)(cid:1223) kh(cid:1251)i (cid:255)(cid:1245)ng và d(cid:1263)ng d(cid:1231)ch v(cid:1257)

ki(cid:1223)m soát database c(cid:1259)a MySQL.

• Script mysql ch(cid:1261)a các khai báo bi(cid:1219)n môi tr(cid:1133)(cid:1249)ng cho CSDL

cho bi(cid:1219)t v(cid:1231) trí các file CSDL c(cid:1259)a MySQL:

bindir=/usr/bin

datadir=/var/lib/mysql

pid_file=/var/lib/mysql/mysqld.pid

mysql_daemon_user=mysql # Run mysql as this

user

• User mang tên mysql dùng (cid:255)(cid:1223)(cid:3)(cid:255)(cid:259)ng nh(cid:1201)p và kh(cid:1251)i (cid:255)(cid:1245)ng d(cid:1231)ch

(cid:89)(cid:1257) daemon c(cid:1259)a trình ch(cid:1259).

Kh(cid:1251)i (cid:255)(cid:1245)ng trình ch(cid:1259) b(cid:1205)ng tay:

• (cid:264)(cid:259)ng nh(cid:1201)p quy(cid:1221)n user mysql:

$ su mysql

• Kh(cid:1251)i (cid:255)(cid:1245)ng trình ch(cid:1259):

# /etc/rc.d/init.d/mysql start

3.2.2. Cài (cid:255)(cid:1211)t t(cid:1263) mã ngu(cid:1239)n

• G(cid:76)(cid:1191)i nén file ch(cid:1261)a mã ngu(cid:1239)n • Th(cid:1269)c hi(cid:1227)n cài (cid:255)(cid:1211)t b(cid:1205)ng t(cid:1241) h(cid:1255)p l(cid:1227)nh sau :

$ ./configure

$ make

$ su

$ make intall

35

$scripts/mysql_intal.db

Ch(cid:1133)(cid:1131)ng 3: H(cid:1227) qu(cid:1191)n tr(cid:1231) c(cid:1131) s(cid:1265) d(cid:1267) li(cid:1227)u MySQL

3.3. S(cid:1265) d(cid:1257)ng MySQL

3.3.1. L(cid:1227)nh mysql

(cid:264)ây là l(cid:1227)nh thâm nh(cid:1201)p trình qu(cid:1191)n lý c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u và (cid:255)(cid:1133)a ra các

(cid:79)(cid:1227)nh qu(cid:1191)n tr(cid:1231) khác .

Cú pháp

mysql (cid:177)u username (cid:177)p password databasename

Ví d(cid:1257)

Truy xu(cid:1193)t c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u packet voi username la “pac” va

password la “ket”.

$ mysql –I pac –p ket packet

Là công c(cid:1257) chính c(cid:1259)a ng(cid:1133)(cid:1249)i qu(cid:1191)n tr(cid:1231) c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u v(cid:1247)i 2 tham s(cid:1237) -u,-

3.3.2. L(cid:1227)nh mysqladmin

p . V(cid:1247)i mysqladmin có m(cid:1245)t s(cid:1237) l(cid:1227)nh qu(cid:1191)n tr(cid:1231) sau • create databasename : t(cid:1189)o csdl • drop database name :xóa c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u • password newpassword : (cid:255)(cid:1241)i m(cid:1201)t kh(cid:1197)u • status: thông tin v(cid:1221) tr(cid:1189)ng thái hi(cid:1227)n hành c(cid:1259)a trình ch(cid:1259) • version cho bi(cid:1219)t thông tin v(cid:1221) phiên b(cid:1191)n c(cid:1259)a trình ch(cid:1259) my sql

3.3.3. L(cid:1227)nh mysqlshow

L(cid:1227)nh này cho bi(cid:1219)t thông tin v(cid:1221) database. N(cid:1219)u không có tham s(cid:1237) s(cid:1217)

hi(cid:1223)n th(cid:1231) toàn b(cid:1245) database, ng(cid:1133)(cid:1255)c (cid:79)(cid:1189)i n(cid:1219)u có tham s(cid:1237) là tên database thì

hi(cid:1223)n th(cid:1231) t(cid:1193)t c(cid:1191) các b(cid:1191)ng trong database.

(cid:49)(cid:1219)u tham s(cid:1237) là tên database và tên b(cid:1191)ng thì toàn b(cid:1245) tên các c(cid:1245)t

trong b(cid:1191)ng s(cid:1217)(cid:3)(cid:255)(cid:1133)(cid:1255)c hi(cid:1223)n th(cid:1231)

(cid:49)(cid:1219)u tham s(cid:1237) là tên database,tên b(cid:1191)ng,tên c(cid:1245)t thì thông tin c(cid:1259)a c(cid:1245)t s(cid:1217)

36

(cid:255)(cid:1133)(cid:1255)c li(cid:1227)t kê.

Ch(cid:1133)(cid:1131)ng 3: H(cid:1227) qu(cid:1191)n tr(cid:1231) c(cid:1131) s(cid:1265) d(cid:1267) li(cid:1227)u MySQL

3.3.4. L(cid:1227)nh grant

(cid:38)(cid:1193)p quy(cid:1221)n cho ng(cid:1133)(cid:1249)i dùng database

Cú pháp :

grant privilege on object to user[user-password] [opt]

• privilege là quy(cid:1221)n c(cid:1193)p cho tài kho(cid:1191)n ng(cid:1133)(cid:1249)i dùng bao g(cid:1239)m:

§ Alter : quy(cid:1221)n thay (cid:255)(cid:1241)i b(cid:1191)ng và file ch(cid:1229) m(cid:1257)c

§ Creat : quy(cid:1221)n t(cid:1189)o b(cid:1191)ng vàdatabase

§ Delete : quy(cid:1221)n xoá d(cid:1267) li(cid:1227)u trong database

§ Drop : quy(cid:1221)n xoá database

§ Index : quy(cid:1221)n qu(cid:1191)n lý ch(cid:1229) m(cid:1257)c index

§ Insert : quy(cid:1221)n chèn d(cid:1267) li(cid:1227)u m(cid:1247)i vào

§ Select : quy(cid:1221)n xem d(cid:1267) li(cid:1227)u

§ Update : quy(cid:1221)n c(cid:1201)p nh(cid:1201)t d(cid:1267) li(cid:1227)u

§ All : t(cid:1193)t c(cid:1191) các quy(cid:1221)n

• Object : databasename.table

Có th(cid:1223) dùng databasename.* s(cid:1217) tác (cid:255)(cid:1245)ng (cid:255)(cid:1219)n m(cid:1233)i b(cid:1191)ng

trên databasename.

(cid:47)(cid:1133)u ý: mysql cho phép c(cid:1193)p quy(cid:1221)n trên database ch(cid:1133)a có

cho m(cid:1245)t ng(cid:1133)(cid:1249)i dùng sau này s(cid:1217) t(cid:1189)o

• User : username.host

Ví d(cid:1257) rick@”%”

• Password : n(cid:1219)u grant ta(cid:1233) m(cid:1247)i user ta (cid:255)(cid:1211)t password b(cid:1205)ng

cách thêm identyfied by password

• Ví d(cid:1257) : t(cid:1189)o m(cid:1247)i user khtn v(cid:1247)i password cntt toàn quy(cid:1221)n trên

database tên packet(packet có th(cid:1223) ch(cid:1133)a có)

37

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

Ch(cid:1133)(cid:1131)ng 3: H(cid:1227) qu(cid:1191)n tr(cid:1231) c(cid:1131) s(cid:1265) d(cid:1267) li(cid:1227)u MySQL

3.3.5. L(cid:1227)nh Revoke

L(cid:1227)nh này dùng (cid:255)(cid:1223) (cid:87)(cid:1133)(cid:1247)c quy(cid:1221)n ng(cid:1133)(cid:1249)i dùng

Cú pháp:

revoke privilege on object from user

3.3.6. Ví d(cid:1257) v(cid:1221) t(cid:1189)o m(cid:1245)t c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u

(cid:55)(cid:1189)o c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u packet v(cid:1247)i username là khtn và password la cntt :

$mysql>grant all on packet.* to khtn@(cid:180)(cid:8)(cid:180) identified by cntt;

(cid:47)(cid:1227)nh trên (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c hi(cid:1227)n v(cid:1247)i t(cid:1133) cách qu(cid:1191)n tr(cid:1231) root c(cid:1259)a MySQL.

(Thoát v(cid:1221) d(cid:1193)u nh(cid:1203)c l(cid:1227)nh $mysql>quit )

R(cid:1239)i gõ ti(cid:1219)p các l(cid:1227)nh sau:

$mysql (cid:177)u khtn (cid:177)p cntt

$ mysql>create database packet;

$mysql>use packet (s(cid:1265) d(cid:1257)ng database tên packet)

Bây gi(cid:1249) m(cid:1233)i truy v(cid:1193)n sql (cid:255)(cid:1221)u lác (cid:255)(cid:1245)ng lên database packet.

3.4. L(cid:1201)p trình MySQL trên ngôn ng(cid:1267) C

M(cid:1245)t s(cid:1237) hàm th(cid:1133)(cid:1249)ng dùng khi l(cid:1201)p trình v(cid:1247)i MySQL

4.4.1 mysql_init

Kh(cid:1251)i t(cid:1189)o c(cid:1193)u trúc x(cid:1265) lý k(cid:1219)t n(cid:1237)i

Cú pháp :

MYSQL *mysql_init (MYSQL *old_connect)

Tham s(cid:1237):

38

• old_connect =NULL :t(cid:1189)o k(cid:1219)t n(cid:1237)i m(cid:1247)i • old_connect khác NULL :tái k(cid:1219)t n(cid:1237)i v(cid:1247)i con tr(cid:1235) old_connect

Ch(cid:1133)(cid:1131)ng 3: H(cid:1227) qu(cid:1191)n tr(cid:1231) c(cid:1131) s(cid:1265) d(cid:1267) li(cid:1227)u MySQL

3.4.2 mysql_real_connection

Th(cid:1269)c hi(cid:1227)n k(cid:1219)t n(cid:1237)i v(cid:1201)t lý (cid:255)(cid:1219)n máy ch(cid:1259) n(cid:1131)i Mysql sever (cid:255)ang ch(cid:1189)y

Cú pháp :

MYSQL *mysql_real_connect(MYSQL *connection ,

const char* server_host, const char * sql_username,

const char *sql_pass, const char* db_name,

unsigned port_num ,const char * unit_socket_name ,

unsigned int flag )

Tham s(cid:1237) :

• Connection : tr(cid:1235)(cid:3)(cid:255)(cid:1219)n c(cid:1193)u trúc MYSQL (cid:255)(cid:1133)(cid:1255)c kh(cid:1251)i t(cid:1189)o b(cid:1251)i hàm

mysqlconnect.

• Server_host : (cid:255)(cid:1231)a ch(cid:1229) IP c(cid:1259)a máy ch(cid:1259) n(cid:1131)i d(cid:1231)ch vu mysql

server (cid:255)ang ch(cid:1189)y.

• sql_username,sql_pass : là (cid:255)(cid:1237)i s(cid:1237) ch(cid:1261)ng th(cid:1269)c quy(cid:1221)n (cid:255)(cid:259)ng

nh(cid:1201)p h(cid:1227) th(cid:1237)ng

39

• db_name : tên c(cid:1259)a database • port_num : s(cid:1237) hi(cid:1227)u c(cid:1241)ng mysql dùng (m(cid:1211)c (cid:255)(cid:1231)nh b(cid:1205)ng 0) • unit_socket_name ki(cid:1223)u socket (m(cid:1211)c (cid:255)(cid:1231)nh NULL) • flag: ki(cid:1223)u giao th(cid:1261)c s(cid:1217) k(cid:1219)t n(cid:1237)i

Ch(cid:1133)(cid:1131)ng 3: H(cid:1227) qu(cid:1191)n tr(cid:1231) c(cid:1131) s(cid:1265) d(cid:1267) li(cid:1227)u MySQL

3.4.3 mysql_query

Th(cid:1269)c thi câu l(cid:1227)nh sql query.

Cú pháp:

int mysql_query(MYSQL *connect,const char* query)

Tham s(cid:1237):

• query : câu l(cid:1227)nh sql c(cid:1195)n th(cid:1269)c hi(cid:1227)n

K(cid:1219)t qu(cid:1191) tr(cid:1191) v(cid:1221)

• B(cid:1205)ng 0 n(cid:1219)u th(cid:1269)c thi thành công • B(cid:1205)ng 1 n(cid:1219)u th(cid:1193)t b(cid:1189)i

3.4.4. mysql_affected_rows

Cho bi(cid:1219)t s(cid:1237) dòng b(cid:1231)(cid:3)(cid:1191)nh h(cid:1133)(cid:1251)ng sau l(cid:1227)nh query

Cú pháp :

my_ulonglong mysql_affected_rows(MYSQL *connection)

Khi s(cid:1265) d(cid:1257)ng hàm này ph(cid:1191)i ép ki(cid:1223)u giá tr(cid:1231) tr(cid:1191) v(cid:1221) là unsigned long

3.4.5. mysql_store_result

(cid:47)(cid:1193)y giá tr(cid:1231) tr(cid:1191) v(cid:1221) sau khi g(cid:1233)i hàm mysql_query (cid:255)(cid:1133)a vào c(cid:1193)u trúc

MYSQL_RES

Cú pháp :

MYSQL_RES *mysql_store_result(MYSQL -*connection)

3.4.6. mysql_fetch_row

(cid:47)(cid:1193)y ra m(cid:1245)t dònh d(cid:1267) li(cid:1227)u t(cid:1263) MYSQL_RES . B(cid:1189)n c(cid:458)ng có th(cid:1223) di

chuy(cid:1223)n (cid:255)(cid:1219)n 1 dòng d(cid:1267) li(cid:1227)u b(cid:1193)t kì nh(cid:1249) hai hàm mysql_row_seek và

mysql_row_tell.

Cú pháp :

40

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

Ch(cid:1133)(cid:1131)ng 3: H(cid:1227) qu(cid:1191)n tr(cid:1231) c(cid:1131) s(cid:1265) d(cid:1267) li(cid:1227)u MySQL

3.4.7. mysql_row_seek

Di chuy(cid:1223)n (cid:255)(cid:1219)n v(cid:1231) trí offset và tr(cid:1191) v(cid:1221) v(cid:1231) trí con tr(cid:1235) tr(cid:1133)(cid:1247)c (cid:255)ó

Cú pháp :

MYSQL_ROW_OFFSET myql_row_seek(

MYSQL_RES *result MYSQL_ROW_OFFSET offset)

3.4.8. mysql_free_result

Gi(cid:1191)i phóng tài nguyên.

Cú pháp:

41

void mysql_free_result (MYSQL_RES *result)

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

4.1. Gi(cid:1247)i thi(cid:1227)u v(cid:1221) l(cid:1201)p trình socket

Khi vi(cid:1219)t (cid:1261)ng (cid:71)(cid:1257)ng và có nhu c(cid:1195)u t(cid:1133)(cid:1131)ng tác v(cid:1247)i m(cid:1245)t (cid:1261)ng (cid:71)(cid:1257)ng khác,

chúng ta th(cid:1133)(cid:1249)ng d(cid:1269)a vào mô hình khách/ ch(cid:1259) (client/server). Theo mô hình

này, (cid:1261)ng (cid:71)(cid:1257)ng có kh(cid:1191) (cid:81)(cid:259)ng ph(cid:1257)c (cid:89)(cid:1257) ho(cid:1211)c cung c(cid:1193)p nh(cid:1267)ng thông tin gì (cid:255)ó g(cid:1233)i

là (cid:1261)ng (cid:71)(cid:1257)ng ch(cid:1259) (trình ch(cid:1259) hay server). (cid:1260)ng (cid:71)(cid:1257)ng g(cid:1265)i yêu c(cid:1195)u (cid:255)(cid:1219)n trình ch(cid:1259)

(cid:255)(cid:1133)(cid:1255)c (cid:74)(cid:1233)i là (cid:1261)ng (cid:71)(cid:1257)ng khách (trình khách hay client). M(cid:1251) r(cid:1245)ng h(cid:1131)n n(cid:1267)a, server

có th(cid:1223) là m(cid:1245)t máy tính v(cid:1247)i c(cid:1193)u hình (cid:80)(cid:1189)nh còn client là r(cid:1193)t nhi(cid:1221)u máy con khác

n(cid:1237)i vào máy ch(cid:1259).

Nh(cid:1133) v(cid:1201)y, tr(cid:1133)(cid:1247)c khi yêu c(cid:1195)u m(cid:1245)t (cid:71)(cid:1231)ch (cid:89)(cid:1257) c(cid:1259)a trình ch(cid:1259) th(cid:1269)c hi(cid:1227)n (cid:255)i(cid:1221)u gì

(cid:255)ó, trình khách (client) ph(cid:1191)i có kh(cid:1191) (cid:81)(cid:259)ng k(cid:1219)t n(cid:1237)i (cid:255)(cid:1133)(cid:1255)c v(cid:1247)i trình ch(cid:1259). Quá trình

k(cid:1219)t n(cid:1237)i này (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c hi(cid:1227)n thông qua m(cid:1245)t c(cid:1131) ch(cid:1219) tr(cid:1263)u t(cid:1133)(cid:1255)ng hóa (cid:74)(cid:1233)i là socket

((cid:87)(cid:1189)m (cid:71)(cid:1231)ch là “c(cid:1131) ch(cid:1219)(cid:3)(cid:1241) c(cid:1203)m”). K(cid:1219)t n(cid:1237)i gi(cid:1267)a trình khách và trình ch(cid:1259) (cid:87)(cid:1133)(cid:1131)ng t(cid:1269)

nh(cid:1133) vi(cid:1227)c c(cid:1203)m phích (cid:255)i(cid:1227)n vào (cid:1241) c(cid:1203)m (cid:255)i(cid:1227)n. Trình khách th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c coi nh(cid:1133)

phích c(cid:1203)m (cid:255)i(cid:1227)n, còn trình ch(cid:1259) (cid:255)(cid:1133)(cid:1255)c coi nh(cid:1133) (cid:1241) c(cid:1203)m (cid:255)i(cid:1227)n, m(cid:1245)t (cid:1241) c(cid:1203)m có th(cid:1223) c(cid:1203)m

vào (cid:255)ó nhi(cid:1221)u phích (cid:255)i(cid:1227)n khác nhau (cid:70)(cid:458)ng nh(cid:1133) m(cid:1245)t máy ch(cid:1259) có th(cid:1223) k(cid:1219)t n(cid:1237)i và

ph(cid:1257)c (cid:89)(cid:1257) cho r(cid:1193)t nhi(cid:1221)u máy khách.

N(cid:1219)u k(cid:1219)t n(cid:1237)i thành công thì trình khách và trình ch(cid:1259) có th(cid:1223) trao (cid:255)(cid:1241)i d(cid:1267)

li(cid:1227)u v(cid:1247)i nhau, th(cid:1269)c hi(cid:1227)n các yêu c(cid:1195)u v(cid:1221) trao (cid:255)(cid:1241)i d(cid:1267) li(cid:1227)u.

4.2. Nguyên lý ho(cid:1189)t (cid:255)(cid:1245)ng (cid:70)(cid:1259)a socket

(cid:264)(cid:1195)u tiên server m(cid:1251) m(cid:1245)t (cid:1241) c(cid:1203)m socket. (cid:264)ây ch(cid:1229) là quá trình h(cid:1227) (cid:255)i(cid:1221)u hành

phân b(cid:1241) tài nguyên (cid:255)(cid:1223) chu(cid:1197)n (cid:69)(cid:1231) k(cid:1219)t n(cid:1237)i. Dùng hàm socket() (cid:255)(cid:1223) t(cid:1189)o “(cid:1241) c(cid:1203)m”

cho trình ch(cid:1259) server.

Ti(cid:1219)p (cid:255)(cid:1219)n, (cid:255)(cid:1223)(cid:3)(cid:1261)ng (cid:71)(cid:1257)ng khách bi(cid:1219)t (cid:255)(cid:1219)n (cid:1241) c(cid:1203)m socket (cid:70)(cid:1259)a trình ch(cid:1259), (cid:69)(cid:1189)n

ph(cid:1191)i (cid:255)(cid:1211)t cho server ch(cid:1259) m(cid:1245)t cái tên. N(cid:1219)u trên máy (cid:70)(cid:1257)c b(cid:1245) và d(cid:1269)a vào h(cid:1227) th(cid:1237)ng

42

file (cid:70)(cid:1259)a UNIX hay Linux, (cid:69)(cid:1189)n có th(cid:1223) (cid:255)(cid:1211)t tên cho socket nh(cid:1133) là m(cid:1245)t tên file

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

(v(cid:1247)i (cid:255)(cid:1195)y (cid:255)(cid:1259) (cid:255)(cid:1133)(cid:1249)ng d(cid:1199)n). (cid:37)(cid:1189)n ch(cid:1229) c(cid:1195)n (cid:255)(cid:1211)t tên còn (cid:255)(cid:1133)(cid:1249)ng d(cid:1199)n th(cid:1133)(cid:1249)ng (cid:255)(cid:1211)t trong

th(cid:1133) (cid:80)(cid:1257)c /tmp hay /usr/tmp. (cid:264)(cid:1237)i v(cid:1247)i giao ti(cid:1219)p (cid:80)(cid:1189)ng thông qua giao th(cid:1261)c

TCP/IP tên (cid:70)(cid:1259)a socket (cid:255)(cid:1133)(cid:1255)c thay th(cid:1219) b(cid:1205)ng khái ni(cid:1227)m c(cid:1241)ng (port). C(cid:1241)ng là m(cid:1245)t

s(cid:1237) nguyên 2 bytes (kho(cid:1191)ng 65000 c(cid:1241)ng (cid:69)(cid:1189)n có th(cid:1223) ch(cid:1233)n (cid:255)(cid:1211)t cho socket) thay

th(cid:1219) cho tên t(cid:1201)p tin. N(cid:1219)u trình khách và trình ch(cid:1259) n(cid:1205)m trên hai máy khách

nhau, giao th(cid:1261)c TCP/IP còn yêu c(cid:1195)u xác (cid:255)(cid:1231)nh thêm (cid:255)(cid:1231)a ch(cid:1229) IP (cid:255)(cid:1223) k(cid:1219)t n(cid:1237)i (cid:255)(cid:1219)n

máy ch(cid:1259)(cid:3)(cid:1251) xa.

Sau khi (cid:255)ã ch(cid:1229) (cid:255)(cid:1231)nh tên ho(cid:1211)c s(cid:1237) hi(cid:1227)u port cho socket, (cid:69)(cid:1189)n (cid:74)(cid:1233)i hàm bind()

(cid:255)(cid:1223) ràng bu(cid:1245)c hay (cid:255)(cid:1211)t tên chính th(cid:1261)c cho socket (cid:70)(cid:1259)a trình ch(cid:1259). Ti(cid:1219)p (cid:255)(cid:1219)n là ch(cid:1249)

k(cid:1219)t n(cid:1237)i t(cid:1263) phía trình khách, trình ch(cid:1259) s(cid:1217) g(cid:1233)i hàm listen() (cid:255)(cid:1223) t(cid:1189)o hàng (cid:255)(cid:1255)i nh(cid:1201)n

các k(cid:1219)t n(cid:1237)i do trình khách (cid:255)(cid:1133)a (cid:255)(cid:1219)n. N(cid:1219)u có yêu c(cid:1195)u k(cid:1219)t n(cid:1237)i t(cid:1263) phía trình

khách, trình ch(cid:1259) g(cid:1233)i hàm accept() (cid:255)(cid:1223) ti(cid:1219)p nh(cid:1201)n yêu c(cid:1195)u (cid:70)(cid:1259)a trình khách.

accept() (cid:86)(cid:1217) t(cid:1189)o m(cid:1245)t socket vô danh khác (unnamed socket), c(cid:1203)m k(cid:1219)t n(cid:1237)i (cid:70)(cid:1259)a

trình khách vào socket vô danh này và th(cid:1269)c hi(cid:1227)n quá trình chuy(cid:1223)n d(cid:1267) li(cid:1227)u trao

(cid:255)(cid:1241)i gi(cid:1267)a khách ch(cid:1259). Socket (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1211)t tên tr(cid:1133)(cid:1247)c (cid:255)ó v(cid:1199)n ti(cid:1219)p (cid:87)(cid:1257)c ho(cid:1189)t (cid:255)(cid:1245)ng (cid:255)(cid:1223)

ch(cid:1249) nh(cid:1201)n yêu c(cid:1195)u t(cid:1263) trình khách khác.

(cid:48)(cid:1233)i giao ti(cid:1219)p (cid:255)(cid:1233)c ghi thông qua socket (cid:70)(cid:458)ng (cid:255)(cid:1131)n gi(cid:1191)n nh(cid:1133) vi(cid:1227)c dùng

l(cid:1227)nh read/write (cid:255)(cid:1223) (cid:255)(cid:1233)c ghi trên file. N(cid:1219)u file d(cid:1269)a vào s(cid:1237) mô (cid:87)(cid:1191) (file descriptor)

(cid:255)(cid:1223) xác (cid:255)(cid:1231)nh socket c(cid:1195)n (cid:255)(cid:1233)c ghi cho hàm read/write.

Phía trình khách ch(cid:1229) c(cid:1195)m (cid:87)(cid:1189)o m(cid:1245)t socket vô danh, ch(cid:1229) (cid:255)(cid:1231)nh tên và v(cid:1231) trí

socket (cid:70)(cid:1259)a trình ch(cid:1259). Yêu c(cid:1195)u k(cid:1219)t n(cid:1237)i b(cid:1205)ng hàm connect() và (cid:255)(cid:1233)c ghi, truy

43

xu(cid:1193)t d(cid:1267) li(cid:1227)u (cid:70)(cid:1259)a socket b(cid:1205)ng l(cid:1227)nh read/ write ho(cid:1211)c l(cid:1227)nh send/ recv.

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

4.3. L(cid:1201)p trình v(cid:1247)i socket

4.3.1. Các thu(cid:1245)c tính (cid:70)(cid:1259)a socket

Socket (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1231)nh ngh(cid:429)a d(cid:1269)a trên 3 thành ph(cid:1195)n thu(cid:1245)c tính( attribute)

(cid:255)ó là: vùng( domain), ki(cid:1223)u( type) và giao th(cid:1261)c( protocol). Socket còn c(cid:259)n

c(cid:1261) vào m(cid:1245)t (cid:255)(cid:1231)a ch(cid:1229) k(cid:1219)t h(cid:1255)p v(cid:1247)i nó. (cid:264)(cid:1231)a ch(cid:1229) này ph(cid:1257) thu(cid:1245)c vào vùng (cid:70)(cid:1259)a

socket và th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c (cid:74)(cid:1233)i là dòng giao th(cid:1261)c (protocol family). Ví d(cid:1257)

nh(cid:1133) dòng giao th(cid:1261)c theo h(cid:1227) th(cid:1237)ng file (cid:70)(cid:1259)a Sun th(cid:1133)(cid:1249)ng l(cid:1193)y tên file làm

(cid:255)(cid:1133)(cid:1249)ng d(cid:1199)n (cid:255)(cid:1231)a ch(cid:1229), trong khi giao th(cid:1261)c TCP/IP (cid:79)(cid:1189)i l(cid:1193)y (cid:255)(cid:1231)a ch(cid:1229) IP (32 bits)

(cid:255)(cid:1223) tham chi(cid:1219)u và th(cid:1269)c hi(cid:1227)n k(cid:1219)t n(cid:1237)i v(cid:1201)t lý.

4.3.1.1. Vùng( domain)

Vùng dùng xác (cid:255)(cid:1231)nh (cid:75)(cid:1189) t(cid:1195)ng (cid:80)(cid:1189)ng n(cid:1131)i giao ti(cid:1219)p (cid:70)(cid:1259)a Socket

di(cid:1225)n ra. Vùng giao ti(cid:1219)p Socket thông (cid:71)(cid:1257)ng nh(cid:1193)t hi(cid:1227)n nay là

AF_INET hay gia ti(cid:1219)p socket theo chu(cid:1197)n (cid:80)(cid:1189)ng Internet. Chu(cid:1197)n này

s(cid:1265) d(cid:1257)ng (cid:255)(cid:1231)a ch(cid:1229) IP (cid:255)(cid:1223) xác (cid:255)(cid:1231)nh nút k(cid:1219)t n(cid:1237)i v(cid:1201)t lý trên (cid:80)(cid:1189)ng. Ngoài

ra, n(cid:1219)u (cid:69)(cid:1189)n ch(cid:1229) c(cid:1195)n giao ti(cid:1219)p (cid:70)(cid:1257)c b(cid:1245), (cid:69)(cid:1189)n có th(cid:1223) dùng vùng giao ti(cid:1219)p

theo chu(cid:1197)n (cid:70)(cid:1259)a Sun AF_UNIX, (cid:255)ó là dùng (cid:255)(cid:1133)(cid:1249)ng d(cid:1199)n và h(cid:1227) th(cid:1237)ng

file (cid:255)(cid:1223) (cid:255)(cid:1211)t tên và xác (cid:255)(cid:1231)nh k(cid:1219)t n(cid:1237)i gi(cid:1267)a hai hay nhi(cid:1221)u (cid:1261)ng (cid:71)(cid:1257)ng.

Ch(cid:1207)ng (cid:75)(cid:1189)n nh(cid:1133) ví d(cid:1257) trên, chúng ta (cid:255)ã th(cid:1269)c hi(cid:1227)n b(cid:1205)ng cách (cid:255)(cid:1211)t tên

cho socket là server_socket, và Linux (cid:255)ã t(cid:1189)o ra file server_socket

ngay trên th(cid:1133) (cid:80)(cid:1257)c hi(cid:1227)n hành (hay trong th(cid:1133) (cid:80)(cid:1257)c (cid:87)(cid:1189)m /tmp tùy theo

phiên (cid:69)(cid:1191)n (cid:70)(cid:1259)a Linux và UNIX). Tuy nhiên vùng giao ti(cid:1219)p

AF_UNIX l(cid:1189)i ít (cid:255)(cid:1133)(cid:1255)c s(cid:1265) d(cid:1257)ng trong th(cid:1269)c t(cid:1219). Ngày nay h(cid:1195)u h(cid:1219)t các

(cid:1261)ng (cid:71)(cid:1257)ng (cid:80)(cid:1189)ng s(cid:1265) d(cid:1257)ng socket (cid:255)(cid:1221)u theo vùng AF_INET là ch(cid:1259) y(cid:1219)u.

Chúng ta (cid:86)(cid:1217) bàn sâu v(cid:1221) phân vùng này ngay sau (cid:255)ây.

Vùng AF_INET nh(cid:1133)(cid:3) (cid:255)ã nêu s(cid:1265) d(cid:1257)ng (cid:255)(cid:1231)c ch(cid:1229) IP (Internet

Protocol) là m(cid:1245)t ch(cid:1259) ngh(cid:429)a s(cid:1237) 32 bits (cid:255)(cid:1223) xác (cid:255)(cid:1231)nh k(cid:1219)t n(cid:1237)i v(cid:1201)t lý. S(cid:1237)

44

này th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c vi(cid:1219)t (cid:1251) d(cid:1189)ng nhòm nh(cid:1133) 192.168.1.1, 203.162.42.1

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

hay 127.0.0.1 là các (cid:255)(cid:1231)a ch(cid:1229) IP h(cid:1255)p l(cid:1227). (cid:264)(cid:1231)a ch(cid:1229) IP có th(cid:1223) (cid:255)(cid:1133)(cid:1255)c ánh (cid:91)(cid:1189)

thành m(cid:1245)t tên d(cid:1225) nh(cid:1247) (cid:75)(cid:1131)n nh(cid:1133) www.yahoo.com hay

www.microsoft.com, chúng (cid:255)(cid:1133)(cid:1255)c (cid:74)(cid:1233)i là tên vùng (domain name).

Vi(cid:1227)c ánh (cid:91)(cid:1189) (cid:255)(cid:1231)a ch(cid:1229) IP thành tên vùng th(cid:1133)(cid:1249)ng do máy ch(cid:1259) DNS

(Domain Name Server) th(cid:1269)c hi(cid:1227)n. Tuy nhiên, (cid:69)(cid:1189)n (cid:70)(cid:458)ng có th(cid:1223) t(cid:1269)

ánh (cid:91)(cid:1189) tên vùng ngay trên mày (cid:70)(cid:1257)c b(cid:1245) b(cid:1205)ng cách s(cid:1265) d(cid:1257)ng t(cid:1201)p tin d(cid:1267)

li(cid:1227)u /etc/hosts.

Socket theo dòng giao th(cid:1261)c IP s(cid:1265) d(cid:1257)ng port (s(cid:1237) hi(cid:1227)u c(cid:1241)ng) (cid:255)(cid:1223)

(cid:255)(cid:1211)t tên cho m(cid:1245)t socket. C(cid:1241)ng dùng (cid:255)(cid:1223) phân bi(cid:1227)t d(cid:1267) li(cid:1227)u g(cid:1265)i (cid:255)(cid:1219)n (cid:86)(cid:1217)

chuy(cid:1223)n cho (cid:1261)ng (cid:71)(cid:1257)ng nào. (cid:37)(cid:1189)n hình dung n(cid:1219)u (cid:255)(cid:1231)a ch(cid:1229) IP dùng (cid:255)(cid:1223)

xác (cid:255)(cid:1231)nh (cid:255)(cid:1133)(cid:1255)c máy hay n(cid:1131)i k(cid:1219)t n(cid:1237)i v(cid:1201)t lý (cid:255)(cid:1223) (cid:255)(cid:1133)a d(cid:1267) li(cid:1227)u (cid:255)(cid:1219)n thì

c(cid:1241)ng là (cid:255)(cid:1231)a ch(cid:1229) ph(cid:1257) dùng (cid:255)(cid:1223) g(cid:1265)i chính xác d(cid:1267) li(cid:1227)u (cid:255)(cid:1219)n n(cid:1131)i (cid:1261)ng (cid:71)(cid:1257)ng

c(cid:1195)n. (cid:264)i(cid:1221)u này do trên m(cid:1245)t máy có th(cid:1223) có nhi(cid:1221)u (cid:1261)ng (cid:71)(cid:1257)ng cùng ch(cid:1189)y

và cùng s(cid:1265) d(cid:1257)ng trùng s(cid:1237) c(cid:1241)ng. Do c(cid:1241)ng là m(cid:1245)t giá tr(cid:1231) nguyên 2

bytes nân (cid:69)(cid:1189)n có th(cid:1223) s(cid:1265) d(cid:1257)ng kho(cid:1191)ng 65000 c(cid:1241)ng (cid:255)(cid:1223) t(cid:1269) do (cid:255)(cid:1211)t cho

socket. Tr(cid:1263) các s(cid:1237) hi(cid:1227)u c(cid:1241)ng n(cid:1241) ti(cid:1219)ng nh(cid:1133) FTP, Web (cid:255)ã nêu (cid:1251) ph(cid:1195)n

trên (cid:69)(cid:1189)n không nên s(cid:1265) d(cid:1257)ng, còn thì b(cid:1189)n có th(cid:1223) ch(cid:1233)n s(cid:1237) c(cid:1241)ng l(cid:1247)n

(cid:75)(cid:1131)n 1024(cid:3)(cid:255)(cid:1223) m(cid:1251) cho socket (cid:70)(cid:1259)a (cid:1261)ung (cid:71)(cid:1257)ng.

M(cid:1251) socket theo AF_INET không khác m(cid:1193)y so v(cid:1247)i AF_UNIX

ngoài vi(cid:1227)c (cid:255)(cid:1211)t tên và ch(cid:1229) (cid:255)(cid:1231)nh s(cid:1237) hi(cid:1227)u c(cid:1241)ng. Ví d(cid:1257):

/* M(cid:871) socket theo k(cid:839)t n(cid:857)i IP */

server_sockfd = socket (AF_INET, SOCK_STREAM, 0);

server_address.sin_family = AF_INET;

server_address.sin_addr.s_addr = inet_addr(“127.0.0.1”);

45

server_address.sin_port = 1234;

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

Ngoài vùng giao ti(cid:1219)p AF_UNIX và AF_INET, (cid:69)(cid:1189)n còn có th(cid:1223)

g(cid:1211)p AF_ISO dành cho chu(cid:1197)n giao th(cid:1261)c (cid:80)(cid:1189)ng theo ISO hay AF_NS

dành cho h(cid:1227) th(cid:1237)ng (cid:80)(cid:1189)ng Xerox, tuy nhiên chúng không (cid:255)(cid:1133)(cid:1255)c s(cid:1265)

(cid:71)(cid:1257)ng th(cid:1133)(cid:1249)ng xuyên, cho nên ta (cid:86)(cid:1217) không (cid:255)(cid:1221) c(cid:1201)p (cid:255)(cid:1219)n chi ti(cid:1219)t.

5.3.1.2. Ki(cid:1223)u socket(type)

V(cid:1247)i m(cid:1243)i vùng domain (cid:70)(cid:1259)a socket, (cid:69)(cid:1189)n có th(cid:1223) có nhi(cid:1221)u cách

giao ti(cid:1219)p. Có hai ki(cid:1223)u giao ti(cid:1219)p ki(cid:1223)u giao ti(cid:1219)p (cid:255)i(cid:1223)n hình (cid:255)s là giao

ti(cid:1219)p m(cid:1245)t chi(cid:1221)u (SOCK_DGRAM) và giao ti(cid:1219)p (cid:69)(cid:1191)o (cid:255)(cid:1191)m hai chi(cid:1221)u

(SOCK_STREAM). D(cid:1267) li(cid:1227)u khi chuy(cid:1223)n (cid:255)i (cid:255)(cid:1133)(cid:1255)c (cid:255)óng thành t(cid:1263)ng

gói (data package hay datagram). SOCK_STREAM và

SOCK_DGRAM qui (cid:255)(cid:1231)nh cách chuy(cid:1223)n gói d(cid:1267) li(cid:1227)u theo hai cách

nh(cid:1133) sau:

SOCK_STREAM luôn gi(cid:1267) k(cid:1219)t n(cid:1237)i và b(cid:1191)o (cid:255)(cid:1191)m gói thông tin

g(cid:1265)i (cid:255)i (cid:255)(cid:1133)(cid:1255)c chuy(cid:1223)n (cid:255)(cid:1219)n (cid:255)ích và nh(cid:1201)n (cid:255)(cid:1195)y (cid:255)(cid:1259). Sau khi nh(cid:1201)n xong d(cid:1267)

li(cid:1227)u, n(cid:1131)i nh(cid:1201)n (cid:86)(cid:1217) g(cid:1265)i thông tin ph(cid:1191)n h(cid:1239)i cho n(cid:1131)i g(cid:1265)i và quá trình g(cid:1265)i

ch(cid:1229) (cid:255)(cid:1133)(cid:1255)c xác nh(cid:1201)n hoàn t(cid:1193)t khi nh(cid:1201)n (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1195)y (cid:255)(cid:1259) th(cid:1239)ng tin g(cid:1265)i nh(cid:1201)n

(cid:1251) c(cid:1191) hai phía khách ch(cid:1259). Ki(cid:1223)u truy(cid:1221)n d(cid:1267) li(cid:1227) socket này trong vùng

giao th(cid:1261)c (cid:80)(cid:1189)ng Internet AF_INET (cid:255)(cid:1133)(cid:1255)c (cid:74)(cid:1233) là giao th(cid:1261)c truy(cid:1221)n

TCP. Khi k(cid:1219)t h(cid:1255)p v(cid:1247)i c(cid:1131) ch(cid:1219) (cid:255)(cid:1231)nh tuy(cid:1219)n theo (cid:255)(cid:1231)a ch(cid:1229) IP chúng (cid:255)(cid:1133)(cid:1255)c

(cid:74)(cid:1233)i t(cid:1203)t là TCP/IP. K(cid:1219)t n(cid:1237)i và truy(cid:1221)n d(cid:1267) li(cid:1227)u theo cách này tuy (cid:69)(cid:1191)o

(cid:255)(cid:1191)m nh(cid:1133)ng t(cid:1237)n nhi(cid:1221)u tài nguyên (cid:70)(cid:1259)a h(cid:1227) th(cid:1237)ng do k(cid:1219)t n(cid:1237)i ph(cid:1191)i duy

trì và theo dõi th(cid:1133)(cid:1249)ng xuyên.

SOCK_DGRAM cách g(cid:1265)i nh(cid:1189)n d(cid:1267) li(cid:1227)u này ch(cid:1229) di(cid:1225)n ra m(cid:1245)t

chi(cid:1221)u. Trình khách, n(cid:1131)i g(cid:1265)i d(cid:1267) li(cid:1227)u (cid:255)i không c(cid:1195)n bi(cid:1219)t trình ch(cid:1229) (n(cid:1131)i

nh(cid:1201)n) có nh(cid:1201)n (cid:255)(cid:1133)(cid:1255)c gói d(cid:1267) li(cid:1227)u (cid:255)(cid:1195)y (cid:255)(cid:1259) hay không. Trình ch(cid:1259) khi

nh(cid:1201)n (cid:255)(cid:1133)(cid:1255)c d(cid:1267) li(cid:1227)u (cid:70)(cid:458)ng không c(cid:1195)n thông báo hay xác nh(cid:1201)n v(cid:1247)i trình

46

khách là d(cid:1267) li(cid:1227)u (cid:255)ã nh(cid:1201)n xong. Cách g(cid:1265)i này có v(cid:1215) không an toàn

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

nh(cid:1133)ng bù l(cid:1189)i th(cid:1269)c hi(cid:1227)n nhanh và không tiêu t(cid:1237)n nhi(cid:1221)u tài nguyên (cid:255)(cid:1223)

duy trì k(cid:1219)t n(cid:1237)i và ki(cid:1223)m tra d(cid:1267) li(cid:1227)u nh(cid:1201)n g(cid:1265)i. Ki(cid:1223)u truy(cid:1221)n d(cid:1267) li(cid:1227)u

socket này trong vùng giao th(cid:1261)c (cid:80)(cid:1189)ng Internet AF_INET (cid:255)(cid:1133)(cid:1255)c (cid:74)(cid:1233)i

là giao th(cid:1261)c truy(cid:1221)n UDP (User Datagram Protocol). Khi k(cid:1219)t h(cid:1255)p v(cid:1247)i

(cid:70)(cid:1131) ch(cid:1219) (cid:255)(cid:1231)nh tuy(cid:1219)n theo (cid:255)(cid:1231)c ch(cid:1229) IP chúng (cid:255)(cid:1133)(cid:1255)c (cid:74)(cid:1233)i t(cid:1203)t là UDP/IP. Do

tính ch(cid:1193)t không (cid:255)(cid:1191)m (cid:69)(cid:1191)o nên UDP (cid:255)(cid:1133)(cid:1255)c dùng nhi(cid:1221)u trong (cid:80)(cid:1189)ng v(cid:1247)i

(cid:80)(cid:1257)c (cid:255)ích thông báo hay g(cid:1265)i tin tin (cid:255)(cid:1219)n m(cid:1245)t nhóm máy tính nào (cid:255)ó

trong (cid:80)(cid:1189)ng. Nó ít khi (cid:255)(cid:1133)(cid:1255)c dùng trong các (cid:71)(cid:1231)ch (cid:89)(cid:1257) c(cid:1195)n s(cid:1269) chính xác

cao nh(cid:1133) g(cid:1265)i nh(cid:1201)n file hay k(cid:1219)t nói c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u.

4.3.1.3. Giao th(cid:1261)c (cid:70)(cid:1259)a socket( protocol)

Giao th(cid:1261)c là cách qui (cid:1133)(cid:1247)c g(cid:1265)i nh(cid:1201)n d(cid:1267) li(cid:1227)u gii(cid:1267)a hai hay nhi(cid:1221)u

máy tính trong m(cid:1189)ng. Tùy theo m(cid:1243)i ki(cid:1223)u g(cid:1265)i nh(cid:1201)n d(cid:1267) li(cid:1227)u mà ta có

các giao th(cid:1261)c khác nhau. Hi(cid:1227)n nay ki(cid:1223)u g(cid:1265)i nh(cid:1201)n theo giao th(cid:1261)c

TCP và UDP là s(cid:1265) d(cid:1257)ng nhi(cid:1221)u nh(cid:1193)t. Tuy nhiên (cid:255)i(cid:1221)u này không b(cid:1203)t

bu(cid:1245)c, TCP và UDP ch(cid:1229) là cách cài (cid:255)(cid:1211)t cho vùng socket AF_INET

theo giao ti(cid:1219)p Internet mà thôi. Ví d(cid:1257), ban có th(cid:1223) cài (cid:255)(cid:1211)t m(cid:1245)t giao

th(cid:1261)c khác thay cho UDP áp (cid:71)(cid:1257)ng cho cách chuy(cid:1223)n d(cid:1267) li(cid:1227)u không

(cid:69)(cid:1191)o (cid:255)(cid:1191)m. Mõi ki(cid:1223)u socket (cid:255)(cid:1221)u có giao th(cid:1261)c m(cid:1211)c (cid:255)(cid:1231)nh áp (cid:71)(cid:1257)ng cho

nó. Trong t(cid:1193)t (cid:70)(cid:1191) các hàm socket sau này, tùy ch(cid:1233)n protocol n(cid:1219)u có

yêu c(cid:1195)u (cid:69)(cid:1189)n có th(cid:1223) (cid:255)(cid:1211)t giá tr(cid:1231) 0(cid:3)(cid:255)(cid:1223) yêu c(cid:1195)u s(cid:1265) d(cid:1257)ng giao th(cid:1261)c m(cid:1211)c

(cid:255)(cid:1231)nh.

Trong các ví d(cid:1257)(cid:3)(cid:1251) ph(cid:1195)n sau ta ch(cid:1229) t(cid:1201)p trung nghiên c(cid:1261)u v(cid:1221) vùng

socket AF_INET và (cid:255)(cid:1231)a ch(cid:1229) IP thay cho vùng AF_UNIX. V(cid:1247)i

AF_INET (cid:80)(cid:1233)i (cid:1261)ng (cid:71)(cid:1257)ng (cid:80)(cid:1189)ng (cid:70)(cid:1259)a (cid:69)(cid:1189)n (cid:255)(cid:1221)u có th(cid:1223) giao ti(cid:1219)p (cid:255)(cid:1133)(cid:1255)c

47

v(cid:1247)i nhau b(cid:1193)t k(cid:1223) chúng (cid:255)ang ch(cid:1189)y trên Windows, Linux hay UNIX.

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

4.3.2. T(cid:1189)o socket

H(cid:1227) th(cid:1237)ng cung c(cid:1193)p cho (cid:69)(cid:1189)n hàm socket() (cid:255)(cid:1223) t(cid:1189)o m(cid:1247)i m(cid:1245)t socket.

Hàm socket() tr(cid:1191) v(cid:1221) s(cid:1237) nguyên int cho bi(cid:1219)t s(cid:1237) mô (cid:87)(cid:1191) hay (cid:255)(cid:1231)nh danh dùng

(cid:255)(cid:1223) truy c(cid:1201)p socket sau này.

#include

#include

int socket(int domain, int type, int protocol);

Tham s(cid:1237) domain ch(cid:1229) (cid:255)(cid:1231)nh vùng hay (cid:75)(cid:1233) (cid:255)(cid:1231)a ch(cid:1229) áp (cid:255)(cid:1211)t cho socket.

domain có th(cid:1223) nh(cid:1201)n m(cid:1245)t trong các giá tr(cid:1231) sau:

AF_UNIX M(cid:871) socket k(cid:839)t n(cid:857)i theo giao th(cid:881)c file (xu(cid:813)t nh(cid:821)p socket d(cid:889)a

trên xu(cid:813)t nh(cid:821)p (file) (cid:70)(cid:879)a UNIX/Linux

AF_INET M(cid:871) socket theo giao th(cid:881)c Internet (s(cid:885) d(cid:877)ng (cid:255)(cid:851)a ch(cid:849) IP (cid:255)(cid:843) k(cid:839)t

n(cid:857)i)

AF_IPX Vùng giao th(cid:881)c IPX ((cid:80)(cid:809)ng Novell)

AF_IS Chu(cid:817)n giao th(cid:881)c ISO

AF_NS Giao th(cid:881)c Xerox Network System

(cid:37)(cid:1191)ng 4-1 Các giá tr(cid:1231) c(cid:1259)a domain

H(cid:1195)u nh(cid:1133) (cid:69)(cid:1189)n ch(cid:1229) s(cid:1265) d(cid:1257)ng AF_UNIX và AF_INET là chính. Các

vùng giao th(cid:1261)c khác (cid:255)ã l(cid:1243)i th(cid:1249)i và hi(cid:1227)n nay ít còn (cid:255)(cid:1133)(cid:1255)c s(cid:1265) d(cid:1257)ng.

Tham s(cid:1237) type trong hàm socket() dùng ch(cid:1229) (cid:255)(cid:1231)nh ki(cid:1223)u giao tiép hay

truy(cid:1221)n d(cid:1267) li(cid:1227)u (cid:70)(cid:1259)a socket. (cid:37)(cid:1189)n có th(cid:1223) ch(cid:1229) (cid:255)(cid:1231)nh b(cid:1205)ng SOCK_STREAM

dùng cho truy(cid:1221)n d(cid:1267) li(cid:1227)u (cid:69)(cid:1191)o (cid:255)(cid:1191)m ho(cid:1211)c SOCK_GRAM dùng cho truy(cid:1221)n

48

không (cid:69)(cid:1191)o (cid:255)(cid:1191)m.

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

Tham s(cid:1237) protocol dùng (cid:255)(cid:1223) ch(cid:1233)n giao th(cid:1261)c áp (cid:71)(cid:1257)ng cho ki(cid:1223)u socket(

trong tr(cid:1133)(cid:1249)ng h(cid:1255)p có nhi(cid:1221)u giao th(cid:1261)c áp (cid:71)(cid:1257)ng cho m(cid:1245)t ki(cid:1223)u truy(cid:1221)n). Tuy

nhiên (cid:69)(cid:1189)n ch(cid:1229) c(cid:1195)n (cid:255)(cid:1211)t giá tr(cid:1231) 0 (l(cid:1193)y giao th(cid:1261)c m(cid:1211)c (cid:255)(cid:1231)nh). AF_INET ch(cid:1229) cài

(cid:255)(cid:1211)t m(cid:1245)t giao th(cid:1261)cduy nh(cid:1193)t cho các ki(cid:1223)u truy(cid:1221)n SOCK_STREAM và

SOCK_DGRAM (cid:255)ó là TCP và UDP.

N(cid:1219)u (cid:87)(cid:1189)o socket thành công, hàm (cid:86)(cid:1217) tr(cid:1191) v(cid:1221) s(cid:1237) (cid:255)(cid:1231)nh danh socket(

descriptor). (cid:37)(cid:1189)n s(cid:1265) d(cid:1257)ng s(cid:1237) (cid:255)(cid:1231)nh danh này trong t(cid:1193)t (cid:70)(cid:1191) các l(cid:1249)i (cid:74)(cid:1233)i truy

xu(cid:1193)t socket khác nh(cid:1133) read/write. S(cid:1237) này t(cid:1133)(cid:1131)ng t(cid:1269) nh(cid:1133) s(cid:1237) (cid:255)(cid:1231)nh danh file

mà b(cid:1189)n th(cid:1133)(cid:1249)ng dùng (cid:255)(cid:1223) (cid:255)(cid:1233)c và ghi file. (cid:264)(cid:1233)c/ ghi vào socket (cid:70)(cid:458)ng (cid:255)(cid:1239)ng

ngh(cid:429)a v(cid:1247)i g(cid:1265)i và nh(cid:1201)n d(cid:1267) li(cid:1227)u gi(cid:1267)a trình khách và trình ch(cid:1259).

4.3.3. (cid:264)(cid:1231)nh (cid:255)(cid:1231)a ch(cid:1229) cho socket

Khi socket (cid:255)ã (cid:255)(cid:1133)(cid:1255)c (cid:87)(cid:1189)o ra, (cid:69)(cid:1189)n ch(cid:1229) c(cid:1195)n ch(cid:1229) (cid:255)(cid:1231)nh (cid:255)(cid:1231)a ch(cid:1229) và tên cho

socket. M(cid:1245)t socket c(cid:1195)n ph(cid:1191)i có (cid:255)(cid:1231)a ch(cid:1229) và tên (cid:255)(cid:1223) các trình khách có th(cid:1223)

tham chi(cid:1219)u (cid:255)(cid:1219)n. Tùy m(cid:1243)i vùng giao th(cid:1261)c mà cách (cid:255)ánh (cid:255)(cid:1231)a ch(cid:1229) có th(cid:1223)

khác nhau.

Ví d(cid:1257) khi (cid:69)(cid:1189)n dùng vùng giao th(cid:1261)c AF_UNIX d(cid:1269)a trên h(cid:1227) th(cid:1237)ng t(cid:1201)p

tin, (cid:255)(cid:1231)a ch(cid:1229) socket (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1231)nh ngh(cid:429)a trong c(cid:1193)u trúc sockaddr_un (cid:70)(cid:1259)a file

include sys/un.h nh(cid:1133) sau:

struct sockaddr_un{

sa_family_t sun_family; /* AF_UNIX */

char sun_path []; /* (cid:255)(cid:753)(cid:869)ng d(cid:819)n */

49

};

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

Trong Linux sa_family_t (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1231)nh ngh(cid:429)a là ki(cid:1223)u short. sun_path là

(cid:255)(cid:1133)(cid:1249)ng d(cid:1199)n (cid:255)(cid:1223) t(cid:1189)o t(cid:1201)p tin socket.

Vùng AF_UNIX (cid:255)(cid:1133)(cid:1255)c s(cid:1265) d(cid:1257)ng nhi(cid:1221)u trong các (cid:1261)ng (cid:71)(cid:1257)ng (cid:70)(cid:1257)c b(cid:1245)

trên (cid:80)(cid:1233)t máy vì nó ph(cid:1257) thu(cid:1245)c vào (cid:255)(cid:1133)(cid:1249)ng d(cid:1199)n t(cid:1201)p tin tuy(cid:1227)t (cid:255)(cid:1237)i (cid:70)(cid:1259)a h(cid:1227)

(cid:255)i(cid:1221)u hành.

Th(cid:1269)c t(cid:1219) b(cid:1189)n (cid:86)(cid:1217) dùng AF_INET v(cid:1247)i c(cid:1193)u trúc (cid:255)(cid:1231)a ch(cid:1229) (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1231)nh ngh(cid:429)a

trong sockadd_in (cid:70)(cid:1259)a file include netinet/in.h nh(cid:1133) sau:

struct sockadd_in{

short in sin_family; /* AF_INET */

unsigned short int sin_port; /* s(cid:857) c(cid:861)ng */

struct in_addr sin_addr; /* (cid:264)(cid:851)a ch(cid:849) IP */

};

C(cid:1193)u trúc in_addr mô (cid:87)(cid:1191) (cid:255)(cid:1231)a ch(cid:1229) IP (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1231)nh ngh(cid:429)a nh(cid:1133) sau:

struct in_addr{

unsigned long int s_addr;

};

Nh(cid:1133) (cid:69)(cid:1189)n th(cid:1193)y (cid:255)(cid:1231)a ch(cid:1229) IP là m(cid:1245)t s(cid:1237) long (4 bytes hay 32 bits). (cid:264)ây

(cid:70)(cid:458)ng chính là c(cid:1193)u trúc (cid:255)(cid:1231)a ch(cid:1229) cho m(cid:1245)t ch(cid:1133)(cid:1131)ng trình giao ti(cid:1219)p v(cid:1247)i nhau

qua (cid:80)(cid:1189)ng Internet.

Trên quan (cid:255)i(cid:1223)m (cid:70)(cid:1259)a l(cid:1201)p trình (cid:1261)ng (cid:71)(cid:1257)ng, cho dù socket có (cid:255)(cid:1231)nh (cid:255)(cid:1231)a

ch(cid:1229) theo vùng nào (cid:255)i ch(cid:259)ng n(cid:1267)a m(cid:1245)t khi (cid:255)ã m(cid:1251) (cid:255)(cid:1133)(cid:1255)c socket, (cid:69)(cid:1189)n ch(cid:1229) c(cid:1195)n

xem socket nh(cid:1133) m(cid:1245)t t(cid:1201)p tin và th(cid:1269)c hi(cid:1227)n thao tác read/write trên (cid:255)ó(

50

(cid:87)(cid:1133)(cid:1131)ng (cid:1261)ng v(cid:1247)i send và receive trên Winsock (cid:70)(cid:1259)a Microsoft).

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

4.3.4. (cid:264)(cid:1211)t tên cho socket

Sau khi (cid:255)ã (cid:255)(cid:1231)nh (cid:255)(cid:1231)a ch(cid:1229), (cid:69)(cid:1189)n ch(cid:1229) c(cid:1195)n (cid:255)(cid:1211)t tên cho socket. (cid:264)(cid:1237)i v(cid:1247)i

AF_UNIX (cid:255)(cid:1231)c ch(cid:1229) chính là (cid:255)(cid:1133)(cid:1249)ng d(cid:1199)n, còn tên chính là tên t(cid:1201)p tin (cid:255)(cid:1223) t(cid:1189)o

socket. (cid:264)(cid:1237)i v(cid:1247)i vùng giao th(cid:1261)c AF_INET (cid:255)(cid:1231)a ch(cid:1229) chính là s(cid:1237) IP còn tên

chính là s(cid:1237) hi(cid:1227)u c(cid:1241)ng (sin_port) trong c(cid:1193)u trúc sockaddr_in. Khi (cid:255)ã gán

thông tin (cid:255)(cid:1195)y (cid:255)(cid:1259) cho socket (cid:69)(cid:1189)n c(cid:1195)n (cid:74)(cid:1233)i hàm bind() (cid:255)(cid:1223) rabgd bu(cid:1245)c nh(cid:1267)ng

thông tin này cho socket (cid:255)ã m(cid:1251) ra tr(cid:1133)(cid:1247)c (cid:255)ó.

#include

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

Hàm h(cid:1227) th(cid:1237)ng bind() s(cid:1265) d(cid:1257)ng các thông tin trong c(cid:1193)u trúc address

(cid:255)(cid:1223) gán cho socket s(cid:1237) (cid:255)(cid:1231)nh danh socketd tr(cid:1191) v(cid:1221) b(cid:1251)i hàm socket() tr(cid:1133)(cid:1247)c (cid:255)ó.

Tham s(cid:1237) address_len cho bi(cid:1219)t chièu dài (cid:70)(cid:1259)a c(cid:1193)u trúc (struct sockaddr*)

truy(cid:1221)n vào hàm. (cid:37)(cid:1189)n l(cid:1133)u ý sockaddr là c(cid:1193)u trúc t(cid:1241)ng quát cho (cid:70)(cid:1191)

sockaddr_un và sockaddr_in

Khi ràng bu(cid:1245)c thành công bind() (cid:86)(cid:1217) tr(cid:1191) v(cid:1221) tr(cid:1231) 0. N(cid:1219)u không hàm (cid:86)(cid:1217) tr(cid:1191) v(cid:1221)

-1 và errno (cid:86)(cid:1217) ch(cid:1261)a m(cid:1245)t trong các l(cid:1243)i sau:

Mã l(cid:1243)i Mô (cid:87)(cid:1191)

EBADF S(cid:857) mô (cid:87)(cid:811) file không h(cid:875)p l(cid:847)

ENOTSOCK S(cid:857) mô (cid:87)(cid:811) file không dành cho socket

EINVAL S(cid:857) mô (cid:87)(cid:811) file tham chi(cid:839)u (cid:255)(cid:839)n m(cid:865)t socket (cid:255)ã có.

EADDRNOTAVAIL (cid:264)(cid:851)a ch(cid:849) không xác (cid:255)(cid:851)nh

EADDRINUSE (cid:264)(cid:851)a ch(cid:849) và c(cid:861)ng ràng bu(cid:865)c (cid:255)ã b(cid:851) m(cid:865)t socket khác

chi(cid:839)m (cid:71)(cid:877)ng

51

(cid:37)(cid:1191)ng 4-2 Các mã l(cid:1243)i (cid:70)(cid:1259)a hàm bind()

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

N(cid:1219)u (cid:69)(cid:1189)n m(cid:1251) socket thu(cid:1245)c vùng AF_UNIX errno có th(cid:1223) nh(cid:1201)n thêm

các l(cid:1243)i sau:

Mã l(cid:1243)i Mô (cid:87)(cid:1191)

EACCESS Không th(cid:843) t(cid:809)o file cho socket do không có

quy(cid:841)n (cid:87)(cid:809)o file

ENOTDIR, Tên file không h(cid:875)p l(cid:847)

ENAMETOOLONG

(cid:37)(cid:1191)ng 4-3 Các mã l(cid:1243)i (cid:70)(cid:1259)a domain AF_UNIX

Ràng bu(cid:1245)c tên socket là b(cid:1133)(cid:1247)c quan tr(cid:1233)ng nh(cid:1193)t (cid:255)(cid:1223) socket (cid:70)(cid:1259)a (cid:69)(cid:1189)n có

kh(cid:1191) (cid:81)(cid:259)ng nhìn th(cid:1193)y và truy xu(cid:1193)t (cid:255)(cid:1133)(cid:1255)c t(cid:1263) các (cid:1261)ng (cid:71)(cid:1257)ng bên ngoài.

M(cid:1245)t socket n(cid:1219)u ch(cid:1133)a (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1211)t tên (cid:74)(cid:1233)i là socket vô danh ( unnamed

socket).

4.3.5. (cid:55)(cid:1189)o hàng (cid:255)(cid:1255)i cho socket

(cid:264)(cid:1223) (cid:255)ón nh(cid:1201)n các k(cid:1219)t n(cid:1237)i chuy(cid:1223)n (cid:255)(cid:1219)n, socket trình ch(cid:1259) ph(cid:1191)i (cid:87)(cid:1189)o ra

m(cid:1245)t hàng (cid:255)(cid:1255)i (queue). (cid:48)(cid:1257)c (cid:255)ích (cid:70)(cid:1259)a hành (cid:255)(cid:1255)i là (cid:79)(cid:1133)u (cid:79)(cid:1189)i các k(cid:1219)t n(cid:1237)i ch(cid:1133)a

(cid:255)(cid:1133)(cid:1255)c trình ch(cid:1259) x(cid:1265) lý k(cid:1231)p. Hàm h(cid:1227) th(cid:1237)ng listen() (cid:86)(cid:1217) th(cid:1269)c hi(cid:1227)n công vi(cid:1227)c

này.

#include

int listen(int socketd, int backlog);

Tham s(cid:1237) socketd cho bi(cid:1219)t s(cid:1237) mô (cid:87)(cid:1191) socket c(cid:1195)n (cid:87)(cid:1189)o hàng (cid:255)(cid:1255)i. backlog

là s(cid:1237) k(cid:1219)t n(cid:1237)i t(cid:1237)i (cid:255)a (cid:255)(cid:1133)(cid:1255)c phép (cid:255)(cid:1133)a vào hàng (cid:255)(cid:1255)i. N(cid:1219)u m(cid:1245)t k(cid:1219)t n(cid:1237)i (cid:255)(cid:1219)n

trình ch(cid:1259) trong khi (cid:255)ã có backlog k(cid:1219)t n(cid:1237)i tr(cid:1133)(cid:1247)c (cid:255)ó ch(cid:1133)a x(cid:1265) lý thì k(cid:1219)t n(cid:1237)i

này (cid:86)(cid:1217) b(cid:1231) th(cid:1193)t (cid:69)(cid:1189)i. Lý do hàng (cid:255)(cid:1255)i (cid:255)ã (cid:255)(cid:1195)y, trình ch(cid:1259) server không mu(cid:1237)n

nh(cid:1201)n thêm k(cid:1219)t n(cid:1237)i n(cid:1267)a. Thông th(cid:1133)(cid:1249)ng backlog mang giá tr(cid:1231) 5 là s(cid:1237) trung

52

bình kh(cid:1191) thi nh(cid:1193)t.

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

Hàm listen() (cid:86)(cid:1217) tr(cid:1191) v(cid:1221) 0 n(cid:1219)u (cid:87)(cid:1189)o hàng (cid:255)(cid:1255)i thành công, n(cid:1219)u th(cid:1193)t (cid:69)(cid:1189)i tr(cid:1231)

tr(cid:1191) v(cid:1221) s(cid:1217) là -1 và bi(cid:1219)n errno (cid:86)(cid:1217) ch(cid:1261)a tr(cid:1231) EBADF, EINVAL, ho(cid:1211)c

ENOTSOCK.

4.3.6. Ch(cid:1249) và ch(cid:1193)p nh(cid:1201)n k(cid:1219)t n(cid:1237)i

M(cid:1245)t khi (cid:255)ã t(cid:1189)o (cid:255)(cid:1133)(cid:1255)c socket, (cid:255)(cid:1211)t tên cho nó và chu(cid:1197)n (cid:69)(cid:1231) xong hàng

(cid:255)(cid:1255)i (cid:255)(cid:1223) ti(cid:1219)p nh(cid:1201)n k(cid:1219)t n(cid:1237)i, công vi(cid:1227)c sau cùng là ch(cid:1249) k(cid:1219)t n(cid:1237)i (cid:70)(cid:1259)a trình

khách g(cid:1265)i (cid:255)(cid:1219)n. (cid:37)(cid:1189)n (cid:74)(cid:1233)i hàm accept() (cid:255)(cid:1223) th(cid:1269)c hi(cid:1227)n công vi(cid:1227)c này.

#include

int accept(int socketd, struct sockaddr *address, size_t

*address_len);

Hàm h(cid:1227) th(cid:1237)ng accept() (cid:86)(cid:1217) tr(cid:1251) v(cid:1221) khi có m(cid:1245)t trình khách mu(cid:1237)n k(cid:1219)t

n(cid:1237)i v(cid:1247)i (cid:1241) c(cid:1203)m socket ch(cid:1229) (cid:255)(cid:1231)nh s(cid:1237) mô (cid:87)(cid:1191) socketd. K(cid:1219)t n(cid:1237)i (cid:70)(cid:1259)a trình khách

tr(cid:1133)(cid:1247)c h(cid:1219)t (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1211)t vào hàng (cid:255)(cid:1255)i. Khi accept() phát hi(cid:1227)n ra có socket

trong hàng (cid:255)(cid:1255)i, nó s(cid:1217) t(cid:1269) (cid:255)(cid:1245)ng l(cid:1193)y (cid:255)(cid:1231)a ch(cid:1229) c(cid:1259)a máy khách (cid:255)(cid:1211)t vào c(cid:1193)u trúc

address, chi(cid:1221)u dài th(cid:1201)t s(cid:1269) c(cid:1259)a c(cid:1193)u trúc (cid:255)(cid:1231)a ch(cid:1229) tr(cid:1191) v(cid:1221) trong bi(cid:1219)n

address_len. Ti(cid:1219)p (cid:255)(cid:1219)n accept() (cid:87)(cid:1189)o ra m(cid:1245)t socket vô danh. K(cid:1219)t qu(cid:1191) tr(cid:1191) v(cid:1221)

(cid:70)(cid:1259)a accept() là s(cid:1237) mô (cid:87)(cid:1191) cho socket vô danh, (cid:69)(cid:1189)n có th(cid:1223) s(cid:1265) d(cid:1257)ng s(cid:1237) này

(cid:255)(cid:1223) liên (cid:79)(cid:1189)c v(cid:1247)i trình khách. Socket vô danh m(cid:1247)i này có cùng ki(cid:1223)u v(cid:1247)i

socket (cid:255)(cid:1211)t tên (cid:255)ang l(cid:1203)ng nghe trên hàng (cid:255)(cid:1255)i.

Do c(cid:1193)u trúc struct sockaddr không có (cid:255)(cid:1231)nh cho nên (cid:69)(cid:1189)n c(cid:1195)n thi(cid:1219)t l(cid:1201)p

kích th(cid:1133)(cid:1247)c v(cid:1263)a (cid:255)(cid:1259)(cid:3) (cid:255)(cid:1223) ti(cid:1219)p nh(cid:1201)n (cid:255)(cid:1231)a ch(cid:1229) trình khách. N(cid:1219)u (cid:255)(cid:1231)a ch(cid:1229) trình

khách dài h(cid:1131)n không gian (cid:69)(cid:1189)n dành cho c(cid:1193)u trúc sockaddr, ph(cid:1195)n d(cid:1133) ra (cid:86)(cid:1217)

53

(cid:69)(cid:1231) c(cid:1203)t (cid:69)(cid:1235) .

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

N(cid:1219)u ch(cid:1133)a có k(cid:1219)t n(cid:1237)i nào trong hàng (cid:255)(cid:1255)i, accept() (cid:86)(cid:1217) d(cid:1263)ng (cid:79)(cid:1189)i ch(cid:1249) –

block( trình ch(cid:1259) s(cid:1217) không th(cid:1269)c thi các l(cid:1227)nh k(cid:1219) ti(cid:1219)p) cho (cid:255)(cid:1219)n khi có k(cid:1219)t

n(cid:1237)i (cid:70)(cid:1259)a client g(cid:1265)i (cid:255)(cid:1219)n. Bàn có th(cid:1223) thay (cid:255)(cid:1241)i c(cid:1131) ch(cid:1219) ch(cid:1249) này b(cid:1205)ng cách (cid:74)(cid:1233)i

hàm fcntl() (cid:255)i(cid:1221)u ch(cid:1229)nh và thêm vào c(cid:1249) O_NONBLOCK cho socket nh(cid:1133)

sau:

int flags=fcntl(socketd, F_GETFL, 0);

fcntl(socketd, F_SETFL, O_NONBLOCK | flags);

Sau khi (cid:255)(cid:1211)t c(cid:1249) này cho socket, hàm accept() (cid:86)(cid:1217) không d(cid:1263)ng (cid:79)(cid:1189)i ch(cid:1249)

khi (cid:69)(cid:1189)n (cid:74)(cid:1233)i nó. accept() (cid:86)(cid:1217) tr(cid:1191) v(cid:1221) ngay s(cid:1237) mô (cid:87)(cid:1191) cho socket n(cid:1219)u có k(cid:1219)t n(cid:1237)i

trong hàng (cid:255)(cid:1255)i, n(cid:1219)u không nó s(cid:1217) tr(cid:1191) v(cid:1221) -1 và th(cid:1269)c thi dòng l(cid:1227)nh k(cid:1219) ti(cid:1219)p.

4.3.7. Yêu c(cid:1195)u k(cid:1219)t n(cid:1237)i

Trình ch(cid:1259) c(cid:1259)a (cid:69)(cid:1189)n th(cid:1133)(cid:1249)ng th(cid:1269)c hi(cid:1227)n ch(cid:1261)ac n(cid:259)ng (cid:87)(cid:1189)o, (cid:255)(cid:1211)t tên, ch(cid:1249) k(cid:1219)t

n(cid:1237)i b(cid:1205)nh các hàm socket(), bind(), và accept(). Tuy nhiên phía trình

khách (cid:255)(cid:1131)n gi(cid:1191)n h(cid:1133)n, (cid:69)(cid:1189)n ch(cid:1229) c(cid:1195)n (cid:74)(cid:1233)i hàm connect() (cid:255)(cid:1223) yêu c(cid:1195)u k(cid:1219)t n(cid:1237)i

v(cid:1247)i trình ch(cid:1259). connect() (cid:255)(cid:1133)(cid:1255)c khai báo nh(cid:1133) sau:

#include

int connnect(int socketd, const struct sockaddr *address,

size_t address_len);

Tham s(cid:1237) socketd là s(cid:1237) mô (cid:87)(cid:1191) tr(cid:1191) v(cid:1221) b(cid:1251)i hàm socket(). address là c(cid:1193)u

trúc (cid:255)(cid:1231)a ch(cid:1229) tr(cid:1235)(cid:3) (cid:255)(cid:1219)n socket (cid:70)(cid:1259)a trình ch(cid:1259). address_len là chi(cid:1221)u dài (cid:70)(cid:1259)a

bi(cid:1219)n c(cid:1193)u trúc address. K(cid:1219)t qu(cid:1191) tr(cid:1191) v(cid:1221) c(cid:1259)a hàm là 0 n(cid:1219)u thành công và

ng(cid:1133)(cid:1255)c (cid:79)(cid:1189)i là -1. Trong tr(cid:1133)(cid:1249)ng h(cid:1255)p -1, bi(cid:1219)n errno (cid:86)(cid:1217) ch(cid:1261)a m(cid:1245)t trong nh(cid:1267)ng

54

tr(cid:1231) sau:

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

Mã l(cid:1243)i Mô (cid:87)(cid:1191)

EBADF S(cid:857) mô (cid:87)(cid:811) socket truy(cid:841)n cho hàm không h(cid:875)p l(cid:847)

EALREADY Kêt n(cid:857)i (cid:255)ã (cid:255)(cid:753)(cid:875)c thi(cid:839)t l(cid:821)p tr(cid:753)(cid:867)c (cid:255)ó

ETIMEOUT Quá th(cid:869)i gian ch(cid:869) k(cid:839)t n(cid:857)i

ECONNREFUSED Trình ch(cid:879) server t(cid:883) ch(cid:857)i k(cid:839)t n(cid:857)i

(cid:37)(cid:1191)ng 4-4 Mã l(cid:1243)i (cid:70)(cid:1259)a hàm connect()

N(cid:1219)u k(cid:1219)t n(cid:1237)i không thành công hàm connect() (cid:86)(cid:1217) có g(cid:1203)ng ch(cid:1249) k(cid:1219)t n(cid:1237)i

(cid:79)(cid:1189)i. N(cid:1219)u sau m(cid:1245)t s(cid:1237) l(cid:1195)n k(cid:1219)t n(cid:1237)i không thành công connect() (cid:86)(cid:1217) tr(cid:1191) v(cid:1221) l(cid:1243)i

ETIMEOUT.

(cid:55)(cid:1133)(cid:1131)ng t(cid:1269) accept() (cid:69)(cid:1189)n có th(cid:1223) (cid:255)(cid:1241)i ch(cid:1219) (cid:255)(cid:1245) ch(cid:1249) c(cid:1259)a hàm connect()

b(cid:1205)ng cách (cid:74)(cid:1233)i fcntl() (cid:255)(cid:1211)t (cid:79)(cid:1189)i c(cid:1249) ENONBLOCK. B(cid:1205)ng cách này, khi k(cid:1219)t

n(cid:1237)i không thành công (cid:1251) l(cid:1195)n (cid:255)(cid:1195)u tiên, hàm connect() (cid:86)(cid:1217) không ch(cid:1249)(cid:3)(cid:255)(cid:1223) l(cid:1201)p

(cid:79)(cid:1189)i k(cid:1219)t n(cid:1237)i. Hàm (cid:86)(cid:1217) k(cid:1219)t thúc và tr(cid:1191) v(cid:1221) mã l(cid:1243)i ngay l(cid:1201)p t(cid:1261)c.

4.3.8. (cid:264)óng k(cid:1219)t n(cid:1237)i

(cid:55)(cid:1133)(cid:1131)ng t(cid:1269) nh(cid:1133) x(cid:1265) lý trên file. (cid:37)(cid:1189)n có trách nhi(cid:1227)m (cid:255)óng các k(cid:1219)t n(cid:1237)i

(cid:255)ã t(cid:1189)o ra b(cid:1205)ng cách g(cid:1233) hàm close(). (cid:264)óng k(cid:1219)t nói (cid:86)(cid:1217) gi(cid:1191)i phóng tài

nguyên và b(cid:1191)o (cid:255)(cid:1191)m d(cid:1267) li(cid:1227)u (cid:255)ã chuy(cid:1223)n (cid:87)(cid:1191)i hoàn t(cid:1193)t (cid:1251) c(cid:1191) hai (cid:255)(cid:1195)u g(cid:1265)i và

nh(cid:1201)n.

#include

int close(int sockd);

(cid:264)(cid:1237)i v(cid:1247)i (cid:70)(cid:1191) hai phía trình khách và trình ch(cid:1259), (cid:69)(cid:1189)n nên (cid:74)(cid:1233)i close()

55

(cid:255)óng socket khi l(cid:1227)nh read tr(cid:1191) v(cid:1221) tr(cid:1231) 0 (không còn d(cid:1267) li(cid:1227)u (cid:255)(cid:1223) (cid:255)(cid:1233)c).

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

Th(cid:1133)(cid:1249)ng thì close() tr(cid:1251) v(cid:1221) ngay t(cid:1261)c kh(cid:1203)c, tuy nhiên có th(cid:1223) close() (cid:86)(cid:1217) (cid:85)(cid:1131)i

vào tr(cid:1189)ng thái ch(cid:1249) (block) n(cid:1219)u scoket (cid:70)(cid:1259)a (cid:69)(cid:1189)n thi(cid:1219)t l(cid:1201)p ki(cid:1223)u k(cid:1219)t n(cid:1237)i hai

chi(cid:1221)u (SOCK_STREAM) cùng v(cid:1247)i tùy ch(cid:1233)n SOCK_LINGER và d(cid:1267) li(cid:1227)u

(cid:255)ang (cid:1251) tr(cid:1189)nh thái ch(cid:1133)a chuy(cid:1223)n h(cid:1219)t. Tùy ch(cid:1233)n SOCK_LINER (cid:86)(cid:1217) (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1221)

c(cid:1201)p sau.

4.3.9. Giao ti(cid:1219)p b(cid:1205)ng socket

Chúng ta v(cid:1263)a xem qua các hàm h(cid:1227) th(cid:1237)ng dùng (cid:87)(cid:1189)o và x(cid:1265) lý socket,

gi(cid:1249) (cid:255)ây ta có th(cid:1223) tr(cid:1251) l(cid:1189)i nh(cid:1267)ng ví d(cid:1257) v(cid:1221) s(cid:1265) d(cid:1257)ng socket (cid:70)(cid:1257) th(cid:1223) (cid:75)(cid:1131)n.

Nh(cid:1133)(cid:3)(cid:255)ã nêu, (cid:69)(cid:1189)n nên s(cid:1265) d(cid:1257)ng socket theo vùng AF_INET thay cho

AF_UNIX. Socket d(cid:1269)a trên h(cid:1227) th(cid:1237)ng file th(cid:1133)(cid:1249)ng g(cid:1211)p ph(cid:1191)i m(cid:1245)t s(cid:1237) v(cid:1193)n (cid:255)(cid:1221)

nh(cid:1133) chúng ch(cid:1229) (cid:255)(cid:1133)(cid:1255)c truy xu(cid:1193)t trên h(cid:1227) th(cid:1237)ng file ch(cid:1229) (cid:255)(cid:1231)nh (cid:70)(cid:1259)a

UNIX/Linux. Vi(cid:1227)c phân quy(cid:1221)n cho phép (cid:255)(cid:1233)c ghi file (cid:70)(cid:458)ng là m(cid:1245)t v(cid:1193)n (cid:255)(cid:1221).

Th(cid:1133)(cid:1249)ng file socket (cid:87)(cid:1189)o ra trong th(cid:1133) (cid:80)(cid:1257)c hi(cid:1227)n hành ho(cid:1211)c th(cid:1133) (cid:80)(cid:1257)c (cid:87)(cid:1189)m

/tmp và b(cid:1189)n ph(cid:1191)i cho phép h(cid:1195)u nh(cid:1133) toàn quy(cid:1221)n truy c(cid:1201)p các th(cid:1133) (cid:80)(cid:1257)c này

(cid:255)(cid:1223) socket ho(cid:1189)t (cid:255)(cid:1245)ng. V(cid:1247)i AF_INET thì v(cid:1193)n (cid:255)(cid:1221) này không phát sinh,

AF_INET d(cid:1269)a vào c(cid:1241)ng và (cid:255)(cid:1231)a ch(cid:1229) IP (cid:255)(cid:1223) k(cid:1219)t n(cid:1237)i. (cid:1260)ng (cid:71)(cid:1257)ng (cid:70)(cid:1259)a (cid:69)(cid:1189)n trên

Linux s(cid:1265) d(cid:1257)ng AF_INET (cid:86)(cid:1217) d(cid:1225) chuy(cid:1223)n (cid:255)(cid:1241)i sang Windows h(cid:1131)n là

AF_UNIX.

Trong AF_INET, khi (cid:87)(cid:1189)o m(cid:1247)i m(cid:1245)t socket trên trình ch(cid:1259), (cid:69)(cid:1189)n ph(cid:1191)i

ch(cid:1233)n m(cid:1245)t s(cid:1237) hi(cid:1227)u c(cid:1241)ng (cid:255)(cid:1211)t cho socket. Vi(cid:1227)c ch(cid:1233)n s(cid:1237) hi(cid:1227)u c(cid:1241)ng ph(cid:1191)i lo(cid:1189)i

tr(cid:1263) nh(cid:1267)ng c(cid:1241)ng (cid:255)ã (cid:255)(cid:1133)(cid:1255)c các (cid:1261)ng (cid:71)(cid:1257)ng khác s(cid:1265) d(cid:1257)ng. (cid:37)(cid:1189)n có th(cid:1223) tham

kh(cid:1191)o t(cid:1201)p tin /etc/services, (cid:255)ây là t(cid:1201)p tin v(cid:259)n (cid:69)(cid:1191)n li(cid:1227)t kê danh sách các

(cid:71)(cid:1231)ch (cid:89)(cid:1257) và c(cid:1241)ng (cid:255)ã (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1223) dành s(cid:1265) d(cid:1257)ng, s(cid:1237) c(cid:1241)ng (cid:70)(cid:1259)a (cid:69)(cid:1189)n không nên

trùng v(cid:1247)i nh(cid:1267)ng s(cid:1237) (cid:255)ã có trong danh sách này. Ban (cid:70)(cid:458)ng không th(cid:1223) s(cid:1265)

(cid:71)(cid:1257)ng các c(cid:1241)ng nh(cid:1235) (cid:75)(cid:1131)n 1024, chúng dành cho các (cid:71)(cid:1231)ch (cid:89)(cid:1257) c(cid:1259)a h(cid:1227) th(cid:1237)ng.

Giao ti(cid:1219)p (cid:80)(cid:1189)ng không (cid:255)òi (cid:75)(cid:1235)i ph(cid:1191)i k(cid:1219)t n(cid:1237)i v(cid:1247)i m(cid:1245)t h(cid:1227) th(cid:1237)ng (cid:80)(cid:1189)ng

56

th(cid:1201)t s(cid:1269). Ngay trên m(cid:1245)t máy, (cid:69)(cid:1189)n có th(cid:1223) s(cid:1265) d(cid:1257)ng giao ti(cid:1219)p (cid:80)(cid:1189)ng (cid:255)(cid:1223) liên

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)p trình socket

(cid:79)(cid:1189)c gi(cid:1267)a các ti(cid:1219)n trình (cid:255)ang ch(cid:1189)y. N(cid:1219)u c(cid:1195)n s(cid:1237) (cid:255)(cid:1231)a ch(cid:1229) IP, (cid:69)(cid:1189)n có th(cid:1223) s(cid:1265)

(cid:71)(cid:1257)ng s(cid:1237) 127.0.0.1, (cid:255)ây là (cid:255)(cid:1231)a ch(cid:1229) IP “h(cid:1239)i qui” (loop back) th(cid:1133)(cid:1249)ng dùng

cho các (cid:1261)ng (cid:71)(cid:1257)ng (cid:70)(cid:1257)c b(cid:1245). V(cid:1247)i (cid:255)(cid:1231)a ch(cid:1229) này, d(cid:1267) li(cid:1227)u g(cid:1265)i (cid:255)i (cid:86)(cid:1217) quay v(cid:1221) (cid:255)úng

(cid:255)(cid:1231)a ch(cid:1229) ban (cid:255)(cid:1195)u, có ngh(cid:429)a là máy g(cid:1265)i và máy nh(cid:1201)n (cid:255)(cid:1133)(cid:1255)c xem là m(cid:1245)t. Do

tính ch(cid:1193)t (cid:255)(cid:1211)c bi(cid:1227)t này, n(cid:1219)u trình khách trên máy (cid:70)(cid:1257)c b(cid:1245) g(cid:1265)i d(cid:1267) li(cid:1227)u (cid:255)(cid:1219)n

trình ch(cid:1259) theo IP 127.0.0.1 thì trình ch(cid:1259) c(cid:458)ng trên máy này (cid:86)(cid:1217) nh(cid:1201)n (cid:255)(cid:1133)(cid:1255)c

d(cid:1267) li(cid:1227)u và h(cid:1239)i âm (cid:79)(cid:1189)i. N(cid:1219)u máy (cid:69)(cid:1189)n hòa (cid:80)(cid:1189)ng, (cid:69)(cid:1189)n nên (cid:75)(cid:1235)i ng(cid:1133)(cid:1249)i qu(cid:1191)n tr(cid:1231)

(cid:80)(cid:1189)ng (cid:255)(cid:1223) xin m(cid:1245)t (cid:255)(cid:1231)a ch(cid:1229) IP thích h(cid:1255)p.

(cid:264)(cid:1231)a ch(cid:1229) m(cid:1189)ng IP th(cid:1133)(cid:1249)ng khó nh(cid:1247), (cid:69)(cid:1189)n có th(cid:1223) yêu c(cid:1195)u socket ti(cid:1219)p

nh(cid:1201)n m(cid:1245)t tên g(cid:1255)i nh(cid:1247) khách thay cho s(cid:1237) IP. Ch(cid:1207)ng (cid:75)(cid:1189)n localhost hay

my.computer.home thay cho 127.0.0.1. T(cid:1201)p tin v(cid:259)n (cid:69)(cid:1191)n /etc/hosts ch(cid:1261)a

các danh sách chuy(cid:1223)n (cid:255)(cid:1241)i này. Ví d(cid:1257), (cid:69)(cid:1189)n có th(cid:1223) dùng trình so(cid:1189)n th(cid:1191)o vi

hay gnotepad s(cid:1265)a n(cid:1245)i dung t(cid:1201)p tin này nh(cid:1133) sau:

127.0.0.1 localhost

127.0.0.1 my.computer.home

207.46.131.91 www.microsoft.com

Nh(cid:1133) (cid:69)(cid:1189)n th(cid:1193)y, m(cid:1245)t (cid:255)(cid:1231)a ch(cid:1229) IP có th(cid:1223) ánh (cid:91)(cid:1189) b(cid:1205)ng nhi(cid:1221)u tên khác

nhau ((cid:255)(cid:1231)a ch(cid:1229) IP và tên th(cid:1133)(cid:1249)ng cách nhau b(cid:1205)ng kho(cid:1191)ng tr(cid:1203)ng hay tab).

Th(cid:1133)(cid:1249)ng (cid:255)(cid:1231)a ch(cid:1229) IP 127.0.0.1 (cid:255)(cid:1133)(cid:1255)c (cid:74)(cid:1233)i là localhost và không có gì tr(cid:1251)

ng(cid:1189)i n(cid:1219)u (cid:69)(cid:1189)n d(cid:1269) (cid:255)(cid:1231)nh (cid:255)(cid:1211)t cho nó m(cid:1245)t cái tên khác ch(cid:1207)ng (cid:75)(cid:1189)n nh(cid:1133)

my.computer.home. Các (cid:255)(cid:1231)a ch(cid:1229) Web mà b(cid:1189)n th(cid:1133)(cid:1249)ng th(cid:1193)y nh(cid:1133)

www.yahoo.com hay www.microsoft.com là các (cid:255)(cid:1231)a ch(cid:1229) toàn c(cid:1195)u (cid:255)(cid:1133)(cid:1255)c

qu(cid:1191)n lý b(cid:1251)i t(cid:1241) ch(cid:1261)c qu(cid:1237)c t(cid:1219) InterNIC. (cid:264)(cid:1223) bi(cid:1219)t m(cid:1245)t tên (cid:74)(cid:1233)i (cid:1261)ng v(cid:1247)i m(cid:1245)t

57

(cid:255)(cid:1231)a ch(cid:1229) IP có t(cid:1239)n (cid:87)(cid:1189)i hay không, (cid:69)(cid:1189)n có th(cid:1223) g(cid:1233)i l(cid:1227)nh ping nh(cid:1133) sau:

Ch(cid:1133)(cid:1131)ng 4: L(cid:1201)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(cid:1265) d(cid:1257)ng socket trong (cid:1261)ng (cid:71)(cid:1257)ng minh (cid:75)(cid:1233)a

Ph(cid:1195)n l(cid:1201)p trình socket này (cid:86)(cid:1217) (cid:255)(cid:1133)(cid:1255)c s(cid:1265) d(cid:1257)ng (cid:255)(cid:1223) th(cid:1269)c hi(cid:1227)n vi(cid:1227)c trao (cid:255)(cid:1241)i

thông tin gi(cid:1267)a thành ph(cid:1195)n client và server trong ph(cid:1195)n (cid:1261)ng (cid:71)(cid:1257)ng minh

(cid:75)(cid:1233)a.

(cid:38)(cid:1257) th(cid:1223) thành ph(cid:1195)n client (cid:86)(cid:1217) dùng socket k(cid:1219)t n(cid:1237)i (cid:255)(cid:1219)n thành ph(cid:1195)n

server. Sau khi k(cid:1219)t n(cid:1237)i thành công client (cid:86)(cid:1217) g(cid:1265)i các l(cid:1227)nh nh(cid:1133) Start

Capture, Stop Capture, Get Filter... (cid:255)(cid:1219)n server, server nh(cid:1201)n các l(cid:1227)nh này,

th(cid:1269)c hi(cid:1227)n xong nó s(cid:1217) tr(cid:1191) l(cid:1249)i k(cid:1219)t qu(cid:1191) th(cid:1269)c hi(cid:1227)n là thành công hay th(cid:1193)t (cid:69)(cid:1189)i

58

cho client.

Ph(cid:1195)n 3: Xây d(cid:1269)ng (cid:1261)ng d(cid:1257)ng th(cid:1265) nghi(cid:1227)m PacketCap

PH(cid:1194)N 3: XÂY D(cid:1268)NG (cid:1260)NG (cid:39)(cid:1256)NG TH(cid:1264) NGHI(cid:1226)M PACKETCAP

Ch(cid:1133)(cid:1131)ng 5. Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

Ch(cid:1133)(cid:1131)ng 6. Cài (cid:255)(cid:1211)t và th(cid:1265) nghi(cid:1227)m

59

Ch(cid:1133)(cid:1131)ng 7. T(cid:1241)ng k(cid:1219)t

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.1. Kh(cid:1191)o sát hi(cid:1227)n t(cid:85)(cid:1189)ng

Hi(cid:1227)n nay có r(cid:1193)t nhi(cid:1221)u ph(cid:1195)m m(cid:1221)m b(cid:1203)t gói tin nh(cid:1133) Tcpdump, Microsoft

Network Monitor, Ethereal...Trong (cid:255)ó ph(cid:1195)n m(cid:1221)m ngu(cid:1239)n m(cid:1251) Ethereal n(cid:1241)i b(cid:1201)t

v(cid:1247)i nhi(cid:1221)u (cid:1133)u (cid:255)i(cid:1223)m nh(cid:1133) ch(cid:1189)y trên nhi(cid:1221)u h(cid:1227) (cid:255)i(cid:1221)u hành, h(cid:1241) tr(cid:1255) b(cid:1203)t gói tin theo

nhi(cid:1221)u giao th(cid:1261)c khác nhau...

Các ph(cid:1195)n m(cid:1221)m này có h(cid:1189)n ch(cid:1219) chung là khi chúng (cid:255)ang b(cid:1203)t các gói tin

thì chúng ta không th(cid:1223) (cid:255)(cid:1233)c, phân tích các thông tin b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c, hay nói cách

khác khi k(cid:1219)t thúc quá trình b(cid:1203)t các gói tin r(cid:1239)i thì m(cid:1247)i phân tích các thông tin

này (cid:255)(cid:1133)(cid:1255)c.

Nh(cid:1267)ng ph(cid:1195)n m(cid:1221)m này không h(cid:1241) tr(cid:1255) vi(cid:1227)c ghi k(cid:1219)t qu(cid:1191) vào c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u,

mà ch(cid:1229) (cid:79)(cid:1133)u vào các file có c(cid:1193)u trúc theo (cid:255)(cid:1231)nh (cid:71)(cid:1189)ng riêng (cid:70)(cid:1259)a chúng. N(cid:1219)u file

này có kích th(cid:1133)(cid:1247)c l(cid:1247)n thì vi(cid:1227)c tìm ki(cid:1219)m, x(cid:1265) lý các thông tin (cid:255)(cid:1223) phân tích (cid:86)(cid:1217) r(cid:1193)t

ch(cid:1201)m.

Nh(cid:1267)ng ph(cid:1195)n m(cid:1221)m này ch(cid:1229) ch(cid:1189)y trên môi tr(cid:1133)(cid:1249)ng desktop là ch(cid:1259) y(cid:1219)u do (cid:255)ó

không cho phép c(cid:1193)u hình t(cid:1263) xa (ví d(cid:1257): (cid:255)(cid:76)(cid:1221)u ch(cid:1229)nh b(cid:1245) l(cid:1233)c , thi(cid:1219)t l(cid:1201)p (cid:255)(cid:1133)(cid:1249)ng d(cid:1199)n

(cid:79)(cid:1133)u tr(cid:1267) trên m(cid:1189)ng ….t(cid:1263) xa. Hi(cid:1227)n nay các ph(cid:1195)n m(cid:1221)m này (cid:255)ang (cid:255)(cid:1133)(cid:1255)c phát tri(cid:1223)n

sang mô hình client/server).

Trong khi (cid:255)ó thì nhu c(cid:1195)u ng(cid:1133)(cid:1249)i qu(cid:1191)n tr(cid:1231) m(cid:1189)ng r(cid:1193)t (cid:255)a d(cid:1189)ng:

• (cid:38)(cid:1195)n có thông tin v(cid:1221) l(cid:1133)u l(cid:1133)(cid:1255)ng m(cid:1189)ng (cid:255)(cid:1223)(cid:3) (cid:255)(cid:76)(cid:1221)u ch(cid:1229)nh b(cid:259)ng thông theo yêu c(cid:1195)u c(cid:1259)a khách hàng c(cid:458)ng nh(cid:1133) phát hi(cid:1227)n tr(cid:1133)(cid:1247)c các s(cid:1269) c(cid:1237) n(cid:1219)u (cid:255)(cid:1133)(cid:1255)c.

• Theo dõi hành (cid:255)(cid:1245)ng truy c(cid:1201)p và xâm nh(cid:1201)p m(cid:1189)ng b(cid:1193)t h(cid:1255)p

pháp.

• (cid:55)(cid:1193)t c(cid:1191) hành (cid:255)(cid:1245)ng trên nên là online (phân tích và (cid:255)(cid:76)(cid:1221)u

60

khi(cid:1223)n) n(cid:1219)u (cid:255)(cid:1133)(cid:1255)c.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.2. Phân tích và xác (cid:255)(cid:1231)nh yêu c(cid:1195)u

5.2.1. Phân tích

Vi(cid:1227)c trao (cid:255)(cid:1241)i thông tin trên m(cid:1189)ng ngày càng nhi(cid:1221)u, nhu c(cid:1195)u c(cid:1259)a các

nhà qu(cid:1191)n tr(cid:1231) m(cid:1189)ng (cid:255)òi h(cid:1235)i ngày càng (cid:255)a d(cid:1189)ng, c(cid:1195)n thi(cid:1219)t có m(cid:1245)t ch(cid:1133)(cid:1131)ng

trình có th(cid:1223) b(cid:1203)t gói tin cho phép phân tích, trích l(cid:1233)c thông tin ngay trong

khi b(cid:1203)t (các ph(cid:1195)n m(cid:1221)m b(cid:1203)t gói tin hi(cid:1227)n nay không cho phép các nhà qu(cid:1191)n

tr(cid:1231) s(cid:1265) d(cid:1257)ng thông tin thu th(cid:1201)p (cid:255)(cid:1133)(cid:1255)c khi quá trình b(cid:1203)t gói tin (cid:255)ang th(cid:1269)c

hi(cid:1227)n).(cid:3)(cid:1260)ng (cid:71)(cid:1257)ng này (cid:86)(cid:1217) l(cid:1193)y tên là PacketCap.

Trên c(cid:1131) s(cid:1251) (cid:255)ó, m(cid:1245)t h(cid:1227) th(cid:1237)ng phân tán b(cid:1203)t gói tin, trích l(cid:1233)c và luu tr(cid:1267)

vào c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u trên m(cid:1189)ng (cid:255)(cid:1133)(cid:1255)c xây d(cid:1269)ng (cid:255)(cid:1223) kh(cid:1203)c ph(cid:1257)c ph(cid:1195)n nào

khuy(cid:1219)t (cid:255)(cid:76)(cid:1223)m trên. H(cid:1227) th(cid:1237)ng cho phép nhà qu(cid:1191)n tr(cid:1231) s(cid:1265) d(cid:1269)ng thông tin

ngay trong khi b(cid:1203)t, tùy ch(cid:1233)n v(cid:1231) trí l(cid:1133)u thông tin và cho phép c(cid:1193)u hình t(cid:1263)

xa vi(cid:1227)c filter các gói tin.Các nhà qu(cid:1191)n tr(cid:1231) m(cid:1189)ng c(cid:458)ng có th(cid:1223) dùng h(cid:1227)

thông này làm c(cid:1131) s(cid:1251)(cid:3)(cid:255)(cid:1223) phát tri(cid:1223)n ti(cid:1219)p các (cid:1261)ng d(cid:1257)ng v(cid:1221) qu(cid:1191)n tr(cid:1231) m(cid:1189)ng.

5.2.2. Xác (cid:255)(cid:1231)nh yêu c(cid:1195)u

(cid:48)(cid:1257)c tiêu (cid:70)(cid:1259)a (cid:255)(cid:1221) tài là m(cid:1245)t xây d(cid:1269)ng (cid:1261)ng (cid:71)(cid:1257)ng phân tán b(cid:1203)t các gói

tin, (cid:1261)ng này (cid:86)(cid:1217) cung c(cid:1193)p cho qu(cid:1191)n tr(cid:1231) m(cid:1189)ng nh(cid:1267)ng thông tin ph(cid:1257)c (cid:89)(cid:1257) cho

vi(cid:1227)c theo dõi và phân tích thông tin (cid:80)(cid:1189)ng, d(cid:1269)a trên nh(cid:1267)ng thông tin (cid:255)(cid:1133)(cid:1255)c

cung c(cid:1193)p này cho phép qu(cid:1191)n tr(cid:1231) m(cid:1189)ng có th(cid:1223) xác (cid:255)(cid:1231)nh (cid:255)(cid:1133)(cid:1255)c tình tr(cid:1189)ng (cid:70)(cid:1259)a

61

toàn b(cid:1245) h(cid:1227) th(cid:1237)ng (cid:80)(cid:1189)ng.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

(cid:1260)ng (cid:71)(cid:1257)ng PacketCap này (cid:86)(cid:1217) bao g(cid:1239)m các ch(cid:1261)c n(cid:259)ng:

STT Ch(cid:1261)c n(cid:259)ng

B(cid:1203)t và phân tích (cid:255)(cid:1133)(cid:1255)c các gói tin (cid:70)(cid:1259)a nh(cid:1267)ng protocol thông (cid:71)(cid:1257)ng 1 nh(cid:1133) TCP, UDP, ICMP, ARP...

Cho phép l(cid:1133)u tr(cid:1267) thông tin b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c d(cid:1133)(cid:1247)i (cid:71)(cid:1189)ng c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u và 2 ch(cid:1233)n h(cid:1227) qu(cid:1191)n tr(cid:1231) (cid:70)(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u (cid:255)(cid:1223) (cid:79)(cid:1133)u tr(cid:1267).

Cho phép l(cid:1133)u tr(cid:1267) thông tin b(cid:1203)t theo c(cid:1193)u trúc file (cid:70)(cid:1259)a Ethereal ho(cid:1211)c 3 các ph(cid:1195)n m(cid:1221)m b(cid:1203)t gói tin khác.

(cid:264)i(cid:1221)u khi(cid:1223)n t(cid:1263) xa vi(cid:1227)c b(cid:1203)t các gói tin, bao g(cid:1239)m:

4

• Kh(cid:1251)i (cid:255)(cid:1245)ng b(cid:1203)t gói tin • D(cid:1263)ng b(cid:1203)t gói tin • L(cid:1193)y b(cid:1245) l(cid:1233)c hi(cid:1227)n th(cid:1249)i • K(cid:1219)t thúc ch(cid:1133)(cid:1131)ng trình b(cid:1203)t gói tin

62

(cid:37)(cid:1191)ng 5-1 Xác (cid:255)(cid:1231)nh yêu c(cid:1195)u

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.3. Các h(cid:1133)(cid:1247)ng xây d(cid:1269)ng (cid:1261)ng (cid:71)(cid:1257)ng PacketCap

Hi(cid:1227)n nay có r(cid:1193)t nhi(cid:1221)u ph(cid:1195)n m(cid:1221)m b(cid:1203)t gói tin có mã ngu(cid:1239)n m(cid:1251) nh(cid:1133)

TCPTrace, TcpDump, WinDump, Ethereal,..trong s(cid:1237) này thì Ethereal là ph(cid:1195)n

m(cid:1221)m t(cid:1237)t nh(cid:1193)t. Nó h(cid:1241) tr(cid:1255) r(cid:1193)t nhi(cid:1221)u protocol, h(cid:1241) tr(cid:1255) các (cid:255)(cid:1231)nh d(cid:1189)ng l(cid:1133)(cid:1133) tr(cid:1267) c(cid:1259)a

các ph(cid:1195)n m(cid:1221)m b(cid:1203)t gói tin khác, tích h(cid:1255)p thêm ph(cid:1195)n phân tích thông tin b(cid:1203)t

(cid:255)(cid:1133)(cid:1255)c.

Các ph(cid:1195)n m(cid:1221)m ngu(cid:1239)n m(cid:1251) này (cid:255)(cid:1221)u s(cid:1265) d(cid:1257)ng th(cid:1133) vi(cid:1227)n l(cid:1201)p trình libcap ho(cid:1211)c

winpcap(tên (cid:70)(cid:1259)a phiên (cid:69)(cid:1191)n libpcap ch(cid:1189)y trên h(cid:1227) (cid:255)i(cid:1221)u hành Windows).

Do có r(cid:1193)t nhi(cid:1221)u ph(cid:1195)n m(cid:1221)m ngu(cid:1239)n m(cid:1251) h(cid:1241) tr(cid:1255) b(cid:1203)t gói tin nên (cid:86)(cid:1217) có 2

h(cid:1133)(cid:1247)ng l(cid:1269)a ch(cid:1233)n (cid:255)(cid:1223) phát tri(cid:1223)n (cid:1261)ng (cid:71)(cid:1257)ng PacketCap:

(cid:216) H(cid:1133)(cid:1247)ng 1: Tìm hi(cid:1223)u c(cid:1193)u trúc (cid:70)(cid:1259)a ph(cid:1195)n m(cid:1221)m Ethereal, tích h(cid:1255)p thêm

ch(cid:1261)c n(cid:259)ng l(cid:1133)u các gói tin vào c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u và c(cid:1193)u hình t(cid:1263) xa vào

ph(cid:1195)n m(cid:1221)m Ethereal.

(cid:216) (cid:43)(cid:1133)óng 2: S(cid:1265) d(cid:1257)ng th(cid:1133) vi(cid:1227)n l(cid:1201)p trình (cid:80)(cid:1189)ng libpcap (cid:255)(cid:1223) vi(cid:1219)t l(cid:1189)i toàn b(cid:1245)

(cid:1261)ng d(cid:1257)ng.

5.3.1. Phân tích h(cid:1133)(cid:1247)ng phát tri(cid:1223)n d(cid:1269)a trên Ethereal

• Thu(cid:1201)n l(cid:1255)i

o Source code c(cid:1259)a Ethereal m(cid:1251) có th(cid:1223) d(cid:1223) dàng download trên

nhi(cid:1221)u trang web. (www.ethereal.com)

o Không c(cid:1195)n xây d(cid:1269)ng l(cid:1189)i các module b(cid:1203)t gói tin và filter cho

(cid:1261)ng d(cid:1257)ng.

• Khó kh(cid:259)n

o Mã ngu(cid:1239)n Ethereal r(cid:1193)t nhi(cid:1221)u và khó hi(cid:1223)u rõ (cid:255)(cid:1133)(cid:1255)c do (cid:255)ó vi(cid:1227)c

tích h(cid:1255)p thêm ch(cid:1261)c n(cid:259)ng vào Ethereal là r(cid:1193)t ph(cid:1261)c t(cid:1189)p.

o Ethereal ch(cid:1229) cung c(cid:1193)p free user guide không cung c(cid:1193)p

developer guide do (cid:255)ó mu(cid:1237)n tìm hi(cid:1223)u v(cid:1221) ethereal ph(cid:1191)i (cid:255)(cid:1233)c

63

(cid:87)(cid:1193)t c(cid:1191) source code.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.3.2. Phân tích h(cid:1133)(cid:1247)ng phát tri(cid:1223)n d(cid:1269)a trên libcap

• Thu(cid:1201)n l(cid:1255)i :

o Th(cid:1133) vi(cid:1227)n mã ngu(cid:1239)n m(cid:1251) libpcap download mi(cid:1225)n phí, (cid:255)(cid:1133)(cid:1255)c

nhi(cid:1221)u nhà phát tri(cid:1223)n s(cid:1265) d(cid:1257)ng. Ph(cid:1195)n m(cid:1221)m b(cid:1203)t gói tin

Tcpdump là m(cid:1245)t (cid:255)i(cid:1223)n hình.

o Có nhi(cid:1221)u tài li(cid:1227)u h(cid:1133)(cid:1247)ng d(cid:1199)n l(cid:1201)p trình

o Có th(cid:1223) d(cid:1225) dàng xây d(cid:1269)ng ch(cid:1133)(cid:1131)ng trình theo ý mu(cid:1237)n

• Khó kh(cid:259)n

o Ph(cid:1191)i vi(cid:1219)t l(cid:1189)i t(cid:1193)t c(cid:1191) các module capture và filtering tr(cid:1133)(cid:1247)c khi

thêm vào các yêu c(cid:1195)u c(cid:1259)a lu(cid:1201)n v(cid:259)n.

5.3.3. L(cid:1269)a ch(cid:1233)n h(cid:1133)(cid:1247)ng phát tri(cid:1223)n PacketCap

T(cid:1263) nh(cid:1267)ng phân tích khó kh(cid:259)n và thu(cid:1201)n l(cid:1255)i (cid:70)(cid:1259)a 2 h(cid:1133)(cid:1247)ng phát tri(cid:1223)n

(cid:1261)ng (cid:71)(cid:1257)ng PacketCap, chúng em quy(cid:1219)t (cid:255)(cid:1231)nh l(cid:1269)a phát tri(cid:1223)n PacketCap theo

h(cid:1133)(cid:1247)ng th(cid:1261) 2, ngh(cid:429)a là s(cid:1217) xây d(cid:1269)ng t(cid:1263) (cid:255)(cid:1195)u (cid:1261)ng (cid:71)(cid:1257)ng b(cid:1203)t gói tin PacketCap

64

d(cid:1269)a trên th(cid:1133) vi(cid:1227)n libpcap.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.4. Các thành ph(cid:1195)n PacketCap

PacketCap có h(cid:1241) ch(cid:1261)c n(cid:259)ng (cid:255)i(cid:1221)u khi(cid:1223)n xa nên nó s(cid:1217) (cid:255)(cid:1133)(cid:1255)c xây d(cid:1269)ng theo

mô hình (cid:1261)ng (cid:71)(cid:1257)ng Client/ Server.

PacketCap g(cid:1239)m 3 thành ph(cid:1195)n:

• Thành ph(cid:1195)n th(cid:1269)c hi(cid:1227)n vi(cid:1227)c l(cid:1203)ng nghe yêu c(cid:1195)u t(cid:1263) phía client và

b(cid:1203)t gói tin: PCServer( PacketCap Server) • Thành ph(cid:1195)n (cid:255)i(cid:1221)u khi(cid:1223)n t(cid:1263) xa: PCManager. • Thành ph(cid:1195)n l(cid:1133)u tr(cid:1267): PCStore, thành ph(cid:1195)n này ch(cid:1229) là (cid:81)(cid:1131)i l(cid:1133)u tr(cid:1267)

d(cid:1267) li(cid:1227)u b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c. PCStore th(cid:1223) là m(cid:1245)t máy tính b(cid:1193)t kì có ch(cid:1189)y h(cid:1227)

qu(cid:1191)n tr(cid:1231) (cid:70)(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u MySQL.

Trong mô hình client/ server thì PCServer là thành ph(cid:1195)n server, còn

PCManager là client.

PCServer m(cid:1251) c(cid:1241)ng 8088 và ch(cid:1249) k(cid:1219)t n(cid:1237)i, nh(cid:1201)n yêu c(cid:1195)u và th(cid:1269)c hi(cid:1227)n yêu

c(cid:1195)u khi (cid:255)ã có client k(cid:1219)t n(cid:1237)i vào.

PCManager (cid:86)(cid:1217) k(cid:1219)t n(cid:1237)i (cid:255)(cid:1219)n PCServer và (cid:255)i(cid:1221)u khi(cid:1223)n (cid:80)(cid:1233)i ho(cid:1189)t (cid:255)(cid:1245)ng (cid:70)(cid:1259)a

PCServer.

65

Hình 5-1 Các thành ph(cid:1195)n (cid:70)(cid:1259)a PacketCap

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.5. Xây d(cid:1269)ng mô hình use case

5.5.1. Xác (cid:255)(cid:1231)nh Actor và use case

• Actor là ng(cid:1133)(cid:1249)i dùng ch(cid:1133)(cid:1131)ng trình PCManager (client) • Use case

o Connect: Dùng PCManager k(cid:1219)t n(cid:1237)i vào PCServer

o StartCapture: Yêu c(cid:1195)u PCServer b(cid:1203)t (cid:255)(cid:1195)u th(cid:1269)c hi(cid:1227)n vi(cid:1227)c b(cid:1203)t

gói tin.

o StopCapture: Yêu c(cid:1195)u PCServer d(cid:1263)ng vi(cid:1227)c b(cid:1203)t gói tin

o GetFilter: l(cid:1193)y b(cid:1245) l(cid:1233)c hi(cid:1227)n (cid:87)(cid:1189)i

o Terminate: yêu c(cid:1195)u PCServer k(cid:1219)t thúc.

5.5.2. Mô hình use case

66

Hình 5-2 Mô hình use case

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.6. (cid:264)(cid:1211)t (cid:87)(cid:1191) use case

5.6.1. Connect

• Tên use case: Connect • Mô (cid:87)(cid:1191)

Use-case này mô t(cid:1191) quá trình qu(cid:1191)n tr(cid:1231) viên yêu c(cid:1195)u

o Dòng s(cid:1269) ki(cid:1227)n chính

PCManager(client) k(cid:1219)t n(cid:1237)i (cid:255)(cid:1223) qu(cid:1191)n tr(cid:1231) vi(cid:1227)c b(cid:1203)t gói tin (cid:1251) máy server. • Dòng s(cid:1269) ki(cid:1227)n

Use-case b(cid:1203)t (cid:255)(cid:1195)u khi có yêu c(cid:1195)u t(cid:1263) máy client xin k(cid:1219)t

(cid:81)(cid:1237)i. Máy client g(cid:1265)i yêu c(cid:1195)u (cid:255)(cid:1219)n máy server.

Sau khi máy server nh(cid:1201)n (cid:255)(cid:1133)(cid:1255)c yêu c(cid:1195)u, n(cid:1219)u ch(cid:1193)p

nh(cid:1201)n yêu c(cid:1195)u máy server s(cid:1217) g(cid:1265)i v(cid:1221) s(cid:1237) port (cid:255)(cid:1223) giao

ti(cid:1219)p, k(cid:1219)t n(cid:1237)i thanh công.

(cid:49)(cid:1219)u máy sever không nh(cid:1201)n yêu c(cid:1195)u ho(cid:1211)c có sai sót

o Dòng s(cid:1269) ki(cid:1227)n ph(cid:1257)

thì client thông báo l(cid:1243)i.

o Các dòng s(cid:1269) ki(cid:1227)n khác

Không có

• Các yêu c(cid:1195)u (cid:255)(cid:1211)c bi(cid:1227)t.

o Không có. • (cid:264)(cid:76)(cid:1221)u ki(cid:1227)n tiên quy(cid:1219)t.

o Ph(cid:1191)i (cid:255)(cid:259)ng nh(cid:1201)p quy(cid:1221)n qu(cid:1191)n tr(cid:1231) m(cid:1247)i (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c hi(cid:1227)n Use-

Case này.

o Máy sever c(cid:1195)n k(cid:1219)t n(cid:1237)i ph(cid:1191)i s(cid:1209)n sàng.

• (cid:264)(cid:76)(cid:1223)m m(cid:1251) r(cid:1245)ng

67

o Không có.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.6.2. StartCapture

• Tên use case: StartCapture • Mô (cid:87)(cid:1191)

Use-case này mô t(cid:1191) quá trình qu(cid:1191)n tr(cid:1231) viên yêu c(cid:1195)u máy client

g(cid:1265)i l(cid:1227)nh y(cid:1219)u c(cid:1195)u server b(cid:1203)t (cid:255)(cid:1195)u vi(cid:1227)c b(cid:1203)t gói tin.

• Dòng s(cid:1269) ki(cid:1227)n

o Dòng s(cid:1269) ki(cid:1227)n chính

Use-case b(cid:1203)t (cid:255)(cid:1195)u khi có yêu c(cid:1195)u t(cid:1263) máy client. Máy client

g(cid:1265)i yêu c(cid:1195)u (cid:255)(cid:1219)n máy server.

Sau khi máy server nh(cid:1201)n (cid:255)(cid:1133)(cid:1255)c yêu c(cid:1195)u s(cid:1217) ki(cid:1223)m tra ti(cid:1219)n

trình b(cid:1203)t gói tin (cid:255)ã (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c thi ch(cid:1133)a.

(cid:49)(cid:1219)u ti(cid:1219)n trình ch(cid:1133)a th(cid:1269)c thi thì th(cid:1269)c thi vi(cid:1227)c b(cid:1203)t gói tin

(cid:79)(cid:1133)u vào c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u, thông báo v(cid:1221) máy client yêu c(cid:1195)u

(cid:255)ã (cid:255)(cid:1133)(cid:1255)c (cid:255)áp (cid:1261)ng.

(cid:49)(cid:1219)u ti(cid:1219)n trình (cid:255)ã (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c thi thì g(cid:1265)i thông báo l(cid:1243)i v(cid:1221).

o Dòng s(cid:1269) ki(cid:1227)n ph(cid:1257)

Ki(cid:1223)m tra CSDL ngày (cid:255)ó (cid:255)ã có ch(cid:1133)a. N(cid:1219)u có r(cid:1239)i thì m(cid:1251)

(cid:70)(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u (cid:255)(cid:1223) l(cid:1133)u. N(cid:1219)u ch(cid:1133)a có thì t(cid:1189)o c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u

(cid:80)(cid:1247)i.

Qu(cid:1191)n tr(cid:1231) viên ch(cid:1229)nh s(cid:1265)a các thông tin liên quan (cid:255)(cid:1219)n

phòng ban, r(cid:1239)i c(cid:1201)p nh(cid:1201)t l(cid:1133)u l(cid:1189)i. Use-case k(cid:1219)t thúc.

Máy client yêu c(cid:1195)u qu(cid:1191)n tr(cid:1231) nh(cid:1201)p c(cid:1193)u trúc filter gói tin.

68

Ki(cid:1223)m tra tính h(cid:1255)p l(cid:1227) c(cid:1259)a c(cid:1193)u trúc filter.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

o Các dòng s(cid:1269) ki(cid:1227)n khác

Không có

• Các yêu c(cid:1195)u (cid:255)(cid:1211)c bi(cid:1227)t

o Không có. • (cid:264)(cid:76)(cid:1221)u ki(cid:1227)n tiên quy(cid:1219)t

o Ph(cid:1191)i (cid:255)(cid:259)ng nh(cid:1201)p quy(cid:1221)n qu(cid:1191)n tr(cid:1231) m(cid:1247)i (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c hi(cid:1227)n Use-

Case này. • (cid:264)(cid:76)(cid:1223)m m(cid:1251) r(cid:1245)ng

o Không có.

5.6.3. StopCapture

• Tên use case: StopCapture • Mô (cid:87)(cid:1191):

Use-case này mô t(cid:1191) quá trình qu(cid:1191)n tr(cid:1231) viên yêu c(cid:1195)u máy

client g(cid:1265)i (cid:255)(cid:1219)n server yêu c(cid:1195)u k(cid:1219)t thúc b(cid:1203)t gói tin.

• Dòng s(cid:1269) ki(cid:1227)n

o Dòng s(cid:1269) ki(cid:1227)n chính

Use-case b(cid:1203)t (cid:255)(cid:1195)u khi có yêu c(cid:1195)u t(cid:1263) máy client. Máy

client g(cid:1265)i yêu c(cid:1195)u ng(cid:1133)ng b(cid:1203)t gói tin (cid:255)(cid:1219)n máy

server.

Sau khi máy server nh(cid:1201)n (cid:255)(cid:1133)(cid:1255)c yêu c(cid:1195)u s(cid:1217) ki(cid:1223)m tra

ti(cid:1219)n trình b(cid:1203)t gói tin (cid:255)ã (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c thi ch(cid:1133)a.

(cid:49)(cid:1219)u ti(cid:1219)n trình ch(cid:1133)a th(cid:1269)c thi thì th(cid:1269)c thi thì ng(cid:1133)ng

(cid:69)(cid:1203)t gói tin, thông báo v(cid:1221) máy client yêu c(cid:1195)u (cid:255)ã

(cid:255)(cid:1133)(cid:1255)c (cid:255)áp (cid:1261)ng.

(cid:49)(cid:1219)u ti(cid:1219)n trình ch(cid:1133)a (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c thi thì g(cid:1265)i thông báo

69

(cid:79)(cid:1243)i v(cid:1221).

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

o Dòng s(cid:1269) ki(cid:1227)n ph(cid:1257)

(cid:264)óng c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u

• Các dòng s(cid:1269) ki(cid:1227)n khác

o Không có. • Các yêu c(cid:1195)u (cid:255)(cid:1211)c bi(cid:1227)t

o Không có. • (cid:264)(cid:76)(cid:1221)u ki(cid:1227)n tiên quy(cid:1219)t

Ph(cid:1191)i (cid:255)(cid:259)ng nh(cid:1201)p quy(cid:1221)n qu(cid:1191)n tr(cid:1231) m(cid:1247)i (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c hi(cid:1227)n Use-Case

này.

• (cid:264)(cid:76)(cid:1223)m m(cid:1251) r(cid:1245)ng

o Không có.

5.6.4. GetFilter

• Tên use case: GetFilter • Mô (cid:87)(cid:1191)

Use-case này mô t(cid:1191) quá trình qu(cid:1191)n tr(cid:1231) viên yêu c(cid:1195)u máy client

g(cid:1265)i yêu c(cid:1195)u cho server tr(cid:1191) l(cid:1249)i b(cid:1245) l(cid:1233)c hi(cid:1227)n th(cid:1249)i.

• Dòng s(cid:1269) ki(cid:1227)n

o Dòng s(cid:1269) ki(cid:1227)n chính

Use-case b(cid:1203)t (cid:255)(cid:1195)u khi có yêu c(cid:1195)u t(cid:1263) máy client yêu

(cid:70)(cid:1195)u thay l(cid:1193)y filter hi(cid:1227)n (cid:87)(cid:1189)i (cid:255)ang dùng (cid:255)(cid:1223) b(cid:1203)t gói tin.

Sau khi máy server nh(cid:1201)n (cid:255)(cid:1133)(cid:1255)c yêu c(cid:1195)u s(cid:1217) ki(cid:1223)m tra

ti(cid:1219)n trình b(cid:1203)t gói tin (cid:255)ã (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c thi ch(cid:1133)a.

(cid:49)(cid:1219)u ti(cid:1219)n trình (cid:255)ã th(cid:1269)c thi thì nó s(cid:1217) g(cid:1265)i tr(cid:1191) l(cid:1249)i cho

client

(cid:49)(cid:1219)u ti(cid:1219)n trình ch(cid:1133)a (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c thi thì g(cid:1265)i thông báo

70

(cid:79)(cid:1243)i v(cid:1221) cho client.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

o Dòng s(cid:1269) ki(cid:1227)n ph(cid:1257)

(cid:264)óng c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u

o Các dòng s(cid:1269) ki(cid:1227)n khác

• Các yêu c(cid:1195)u (cid:255)(cid:1211)c bi(cid:1227)t

o Không có. • (cid:264)(cid:76)(cid:1221)u ki(cid:1227)n tiên quy(cid:1219)t:

o Không có • (cid:264)(cid:76)(cid:1223)m m(cid:1251) r(cid:1245)ng:

o Không có.

5.6.5. Terminate

• Tên use case: Terminate • Mô (cid:87)(cid:1191):

Use-case này mô t(cid:1191) quá trình qu(cid:1191)n tr(cid:1231) viên yêu c(cid:1195)u máy

client g(cid:1265)i (cid:255)(cid:1219)n server yêu c(cid:1195)u server k(cid:1219)t thúc( thoát).

• Dòng s(cid:1269) ki(cid:1227)n

o Dòng s(cid:1269) ki(cid:1227)n chính

Use-case b(cid:1203)t (cid:255)(cid:1195)u khi có yêu c(cid:1195)u t(cid:1263) máy client. Máy

client g(cid:1265)i yêu c(cid:1195)u k(cid:1219)t thúc ch(cid:1133)(cid:1131)ng trình server.

Sau khi máy server nh(cid:1201)n (cid:255)(cid:1133)(cid:1255)c yêu c(cid:1195)u s(cid:1217) ki(cid:1223)m tra

n(cid:1219)u quá trình b(cid:1203)t gói tin (cid:255)ang ch(cid:1189)y thì nó s(cid:1217) ch(cid:1193)m

d(cid:1261)t.

Thoát ra kh(cid:1235)i ch(cid:1133)(cid:1131)ng trình. (ch(cid:1193)m d(cid:1261)t)

o Dòng s(cid:1269) ki(cid:1227)n ph(cid:1257)

(cid:264)óng c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u

• Các dòng s(cid:1269) ki(cid:1227)n khác

71

o Không có.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

• Các yêu c(cid:1195)u (cid:255)(cid:1211)c bi(cid:1227)t

o Không có. • (cid:264)(cid:76)(cid:1221)u ki(cid:1227)n tiên quy(cid:1219)t

Ph(cid:1191)i (cid:255)(cid:259)ng nh(cid:1201)p quy(cid:1221)n qu(cid:1191)n tr(cid:1231) m(cid:1247)i (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c hi(cid:1227)n Use-Case

này.

• (cid:264)(cid:76)(cid:1223)m m(cid:1251) r(cid:1245)ng

o Không có.

5.7.Thi(cid:1219)t k(cid:1219) d(cid:1267) li(cid:1227)u

5.7.1. Phân tích các h(cid:1133)(cid:1247)ng l(cid:1133)u tr(cid:1267)

Có 3 h(cid:1133)(cid:1247)ng

• (cid:43)(cid:1133)(cid:1247)ng 1: Các máy client b(cid:1203)t gói tin trên các m(cid:1189)ng khác nhau và

(cid:71)(cid:1267) li(cid:1227)u (cid:255)(cid:1133)(cid:1255)c truy(cid:1221)n v(cid:1221) l(cid:1133)u tr(cid:1267) trên m(cid:1245)t máy server.

72

Hình 5-3 Mô hình l(cid:1133)u tr(cid:1267) 1

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

o (cid:1132)u (cid:255)(cid:76)(cid:1223)m :

(cid:39)(cid:1267) li(cid:1227)u (cid:255)(cid:1133)(cid:1255)c l(cid:1133)u t(cid:1201)p trung d(cid:1225) dàng cho vi(cid:1227)c x(cid:1265) lý sau này.

o Khuy(cid:1219)t (cid:255)(cid:76)(cid:1223)m

Khi s(cid:1237) l(cid:1133)(cid:1255)ng các gói tin b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c quá nhi(cid:1219)u vi(cid:1227)c truy(cid:1221)n d(cid:1267)

li(cid:1227)u v(cid:1221) máy server có th(cid:1223) làm b(cid:1201)n (cid:255)(cid:1133)(cid:1249)ng truy(cid:1221)n c(cid:1259)a m(cid:1189)ng.

(cid:264)òi h(cid:1235)i dung l(cid:1133)(cid:1255)ng l(cid:1133)u tr(cid:1267) r(cid:1193)t l(cid:1247)n (cid:1251) máy server. • (cid:43)(cid:1133)(cid:1247)ng 2 : Gi(cid:1237)ng nh(cid:1133) h(cid:1133)(cid:1247)ng 1 nh(cid:1133)ng thi(cid:1219)t l(cid:1201)p thêm m(cid:1245)t m(cid:1189)ng

LAN gi(cid:1267)a các máy client và sever (cid:255)(cid:1223) truy(cid:1221)n d(cid:1267) li(cid:1227)u.

Hình 5-4 Mô hình l(cid:1133)u tr(cid:1267) 2

o (cid:1132)u (cid:255)(cid:76)(cid:1223)m :

Kh(cid:1203)c ph(cid:1257)c (cid:255)(cid:1133)(cid:1255)c khuy(cid:1219)t (cid:255)(cid:76)(cid:1223)m c(cid:1259)a h(cid:1133)(cid:1247)ng 1

o Khuy(cid:1219)t (cid:255)(cid:76)(cid:1223)m

T(cid:1237)n kém trong vi(cid:1227)c thi(cid:1219)t l(cid:1201)p m(cid:1189)ng LAN.

Vi(cid:1227)c thi(cid:1219)t l(cid:1201)p m(cid:1189)ng LAN có th(cid:1223) g(cid:1211)p khó kh(cid:259)n trong tr(cid:1133)(cid:1249)ng

(cid:75)(cid:1255)p các máy client (cid:1251) quá xa nhau.

73

(cid:264)òi h(cid:1235)i dung l(cid:1133)(cid:1255)ng l(cid:1133)u tr(cid:1267) r(cid:1193)t l(cid:1247)n (cid:1251) máy server.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

• (cid:43)(cid:1133)(cid:1247)ng 3 : L(cid:1133)u phân tán trên các máy client và ch(cid:1229) truy(cid:1221)n d(cid:1267) li(cid:1227)u

(cid:89)(cid:1221) theo yêu c(cid:1195)u c(cid:1259)a client.

Hình 5-5 Mô hình l(cid:1133)u tr(cid:1267) 3

o (cid:1132)u (cid:255)(cid:76)(cid:1223)m:

Ch(cid:1229) truy(cid:1221)n nh(cid:1267)ng d(cid:1267) li(cid:1227)u (cid:255)(cid:1133)(cid:1255)c client yêu c(cid:1195)u nên ph(cid:1195)n

nào kh(cid:1203)c ph(cid:1257)c (cid:255)(cid:1133)(cid:1255)c khuy(cid:1219)t (cid:255)(cid:76)(cid:1223)m c(cid:1259)a h(cid:1133)(cid:1247)ng 1.

Vi(cid:1227)c l(cid:1133)u tr(cid:1267) phân tán s(cid:1217) không (cid:255)òi h(cid:1235)i dung l(cid:1133)(cid:1255)ng l(cid:1133)u tr(cid:1267)

(cid:79)(cid:1247)n (cid:1251) m(cid:1245)t máy.

Vi(cid:1227)c xây d(cid:1269)ng ch(cid:1133)(cid:1131)ng trình th(cid:1269)c hi(cid:1227)n l(cid:1133)u tr(cid:1267) phân tán s(cid:1217)

(cid:71)(cid:1225) dàng h(cid:1131)n.

o Khuy(cid:1219)t (cid:255)i(cid:1223)m

74

(cid:1260)ng (cid:71)(cid:1257)ng PacketCap cho phép l(cid:1133)u tr(cid:1267) theo (cid:70)(cid:1191) 3 h(cid:1133)óng trên.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.7.2. Thi(cid:1219)t k(cid:1219) (cid:70)(cid:1131) s(cid:1251) (cid:71)(cid:1133) li(cid:1227)u

5.7.2.1. Danh sách các (cid:255)(cid:1241)i t(cid:1133)(cid:1255)ng (table)

STT Tên (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng Mô (cid:87)(cid:1191)

PACKET Thông tin chung t(cid:1193)t c(cid:1191) các gói tin b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c 1

IP Thông tin v(cid:1221) IP header c(cid:1259)a gói tin 2

TCP Thông tin chi ti(cid:1219)t v(cid:1221) gói tin TCP 3

UDP Thông tin chi ti(cid:1219)t v(cid:1221) gói tin UDP 4

ICMP Thông tin chi ti(cid:1219)t v(cid:1221) gói tin ICMP 5

IGMP Thông tin chi ti(cid:1219)t v(cid:1221) gói tin IGMP 6

ARP Thông tin chi ti(cid:1219)t v(cid:1221) gói tin ARP 7

(cid:37)(cid:1191)ng 5-2 Danh sách các (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng

Sau (cid:255)ây là mô t(cid:1191) chi ti(cid:1219)t m(cid:1245)t s(cid:1237) l(cid:1247)p (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng quan tr(cid:1233)ng c(cid:1259)a h(cid:1227)

th(cid:1237)ng.

5.7.2.2 Table PACKET

Ràng ST Tên thu(cid:1245)c tính Ki(cid:1223)u d(cid:1267) li(cid:1227)u Ý ngh(cid:429)a bu(cid:1245)c T

1 Ma Chu(cid:1243)i (10) (cid:264)(cid:1231)nh danh gói tin

(cid:264)(cid:1231)a ch(cid:1229) mac c(cid:1259)a máy g(cid:1265)i 2 Source Mac Chu(cid:1243)i (10) gói tin

Dest Mac (cid:264)(cid:1231)a ch(cid:1229) mac c(cid:1259)a máy Chu(cid:1243)i (10) 3 nh(cid:1201)n gói tin

Packetlength Chu(cid:1243)i (10) chi(cid:1221)u dài gói tin 4

Time Chu(cid:1243)i (20) Th(cid:1249)i gian nh(cid:1201)n gói tin 5

Data Chu(cid:1243)i (1000) D(cid:1267) li(cid:1227)u c(cid:1259) gói tin 6

75

(cid:37)(cid:1191)ng 5-3 Table PACKET

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

6.7.2.4. Table IP

Ràng ST Tên thu(cid:1245)c tính Ki(cid:1223)u d(cid:1267) li(cid:1227)u Ý ngh(cid:429)a bu(cid:1245)c T

Ma Chu(cid:1243)i (10) (cid:264)(cid:1231)a ch(cid:1229) mac c(cid:1259)a máy g(cid:1265)i 1

Service Chu(cid:1243)i (10) Service c(cid:1259)a gói tin 2

ID Chu(cid:1243)i (10) ID c(cid:1259)a gói tin 3

TTL Chu(cid:1243)i (20) Time to live 4

ChecksumIP Chu(cid:1243)i (20) Checksum c(cid:1259)a IP 5

SourceIP Chu(cid:1243)i (20) (cid:264)(cid:1231)a ch(cid:1229) IP ngu(cid:1239)n 6

Dest IP Chu(cid:1243)i (20) (cid:264)(cid:1231)a ch(cid:1229) IP (cid:255)ích 7

(cid:37)(cid:1191)ng 5-4 Table IP

5.7.2.5. Table TCP

Ràng ST Tên thu(cid:1245)c tính Ki(cid:1223)u d(cid:1267) li(cid:1227)u Ý ngh(cid:429)a bu(cid:1245)c T

Ma Chu(cid:1243)i (10) (cid:264)(cid:1231)nh danh gói tin 1

Source Port Chu(cid:1243)i (10) Port ngu(cid:1239)n 2

Dest Port Chu(cid:1243)i (10) Port (cid:255)ích 3

Seg No Chu(cid:1243)i (20) S(cid:1237) segment 4

Ack No Chu(cid:1243)i (20) Ack 5

Winsize Chu(cid:1243)i (20) Winsize 6

checksumTCP Chu(cid:1243)i (20) Checksum c(cid:1259)a TCP 7

8 Type Chu(cid:1241)i (20)

(cid:37)(cid:1191)ng 5-5 Table TCP

76

Type : {"FIN ","SYN ","RST ","PUSH ","ACK ","URG ","ECE ","CWR "}

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.7.2.6. Table UDP

ST Ràng Tên thu(cid:1245)c tính Ki(cid:1223)u d(cid:1267) li(cid:1227)u Ý ngh(cid:429)a T bu(cid:1245)c

1 Ma Chu(cid:1243)i (10) (cid:264)(cid:1231)nh danh gói tin

2 Source Port Chu(cid:1243)i (10) Port ngu(cid:1239)n

3 Dest Port Chu(cid:1243)i (10) Port (cid:255)ích

4 ChecksumUDP Chu(cid:1243)i (20) Checksum c(cid:1259)a UDP

(cid:37)(cid:1191)ng 5-6 Table UDP

5.7.2.7 Table ICMP

ST Ràng Tên thu(cid:1245)c tính Ki(cid:1223)u d(cid:1267) li(cid:1227)u Ý ngh(cid:429)a T bu(cid:1245)c

1 Ma Chu(cid:1243)i (10) (cid:264)(cid:1231)nh danh gói tin

ICMP message 2 Chu(cid:1243)i (10) group

3 Type Chu(cid:1243)i (10)

4 Code Chu(cid:1243)i (20)

5 Id Chu(cid:1243)i (20)

6 Seg No Chu(cid:1243)i (20)

(cid:37)(cid:1191)ng 5-7 Table ICMP

Các h(cid:1205)ng và ý ngh(cid:429)a c(cid:1259)a ICMP message group

( 0, "Echo Reply"},

{ 3, "Destination Unreachable"},

{ 4, "Source Quench"},

77

{ 5, "Redirect Message"},

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

{ 6, "Alternate Host Address"},

{ 8, "Echo Request"},

{ 9, "Router Advertisement"},

{ 10, "Router Selection"},

{ 11, "Time Exceeded"},

{ 12, "Parameter Problem"},

{ 13, "Timestamp Request"},

{ 14, "Timestamp Reply"},

{ 15, "Information Request"},

{ 16, "Information Reply"},

{ 17, "Address Mask Request"},

{ 18, "Address Mask Reply"},

5.7.2.8 Table IGMP

ST Ràng Tên thu(cid:1245)c tính Ki(cid:1223)u d(cid:1267) li(cid:1227)u Ý ngh(cid:429)a T bu(cid:1245)c

1 Ma Chu(cid:1243)i (10) (cid:264)(cid:1231)nh danh gói tin

IGMP message 2 Chu(cid:1243)i (10) group

3 Type Chu(cid:1243)i (10)

4 Response Time Chu(cid:1243)i (20)

5 Checksum Chu(cid:1243)i (20)

6 Group Addr Chu(cid:1243)i (20)

78

(cid:37)(cid:1191)ng 5-8 Table IGMP

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

Các h(cid:1205)ng và ý ngh(cid:429)a c(cid:1259)a IGMP message group:

{ 0x11 ," Group Membership Query."},

{0x12 ,"IGMPv1 Membership Report." },

{0x13 ,"DVMRP. "},

{0x14 ,"PIMv1. "},

{0x15 ,"Cisco Trace Messages. "},

{0x16 ,"IGMPv2 Membership Report. "},

{0x17 ,"IGMPv2 Leave Group." },

{0x1E ,"Multicast Traceroute Response. "},

{0x1F ,"Multicast Traceroute. "},

{0x22 ,"IGMPv3 Membership Report. "},

{0x24 ,"Multicast Router Advertisement. "},

{0x25 ,"Multicast Router Solicitation. "},

79

{0x26 ,"Multicast Router Termination. "}

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.7.2.9. Table ARP

Ràng ST Tên thu(cid:1245)c tính Ki(cid:1223)u d(cid:1267) li(cid:1227)u Ý ngh(cid:429)a bu(cid:1245)c T

1 Ma Chu(cid:1243)i (10) (cid:264)(cid:1231)nh danh gói tin

2 ARP type Chu(cid:1243)i (10)

3 ARP Source IP Chu(cid:1243)i (10)

4 ARPDest IP Chu(cid:1243)i (20)

5 Group Addr Chu(cid:1243)i (20)

(cid:37)(cid:1191)ng 5-9 Table ARP ARP type:

ARP Request frame

ARP Reply frame

RARP Request frame

RARP Reply frame

80

Unknown ARP

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.8. Xây d(cid:1269)ng PCServer( server), PCManager(client)

5.8.1. L(cid:1133)u (cid:255)(cid:1239) PCServer

81

Hình 5-6 L(cid:1133)u (cid:255)(cid:1239) PCServer

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.8.2. L(cid:1133)u (cid:255)(cid:1239) PCManager( Client)

82

Hình 5-7 L(cid:1133)u (cid:255)(cid:1239) PCManager

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

5.8.3. C(cid:1193)u trúc d(cid:1267) li(cid:1227)u trao (cid:255)(cid:1241)i gi(cid:1267)a PCServer và PCManager

Sau khi Client k(cid:1219)t n(cid:1237)i thành công v(cid:1247)i PCServer, PCManager và

PCServer (cid:86)(cid:1217) trao (cid:255)(cid:1241)i các thông (cid:255)i(cid:1227)p v(cid:1247)i nhau. (cid:38)(cid:1257) th(cid:1223) là PCManger s(cid:1217)

g(cid:1265)i yêu c(cid:1195)u lên cho PCServer và sau khi th(cid:1269)c hi(cid:1227)n yêu c(cid:1195)u (cid:70)(cid:1259)a

PCManager, Server (cid:86)(cid:1217) g(cid:1265)i tr(cid:1191) l(cid:1249)i k(cid:1219)t qu(cid:1191) th(cid:1269)c hi(cid:1227)n cho Client.

C(cid:1193)u trúc (cid:70)(cid:1259)a m(cid:1243)i thông (cid:255)i(cid:1227)p nh(cid:1133) sau:

struct tagCMD

{

int CmdCode;

int IPFilterType;

int b1,b2,b3,b4;//4 parts of IP address(for filter)

int PortFilterType;

int Port;

int ProtocolFilter;//TCP, UDP, ICMP..

int mb1,mb2,mb3,mb4;//MySQL

int NumberPacket;

};

V(cid:1247)i CmdCode là mã l(cid:1227)nh c(cid:1195)n g(cid:1265)i, các mã l(cid:1227)nh mày (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1231)nh

83

ngh(cid:429)a b(cid:1205)ng các h(cid:1205)ng (cid:255)(cid:1223) d(cid:1225) dàng cho vi(cid:1227)c l(cid:1201)p trình.

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

IPFilterType xác (cid:255)(cid:1231)nh ki(cid:1223)u (cid:79)(cid:1233)c theo (cid:255)(cid:1231)a ch(cid:1229) IP, giá tr(cid:1231) c(cid:1259)a nó (cid:255)(cid:1133)(cid:1255)c

(cid:255)(cid:1231)nh ngh(cid:429)a nh(cid:1133) sau:

#define NO_FILTER 0

#define SOURCE_FILTER 1

#define DEST_FILTER 2

#define SOURCE_OR_DEST_FILTER 3

#define SOURCE_AND_DEST_FILTER 4

N(cid:1219)u IPFilterType=NO_FILTER ngh(cid:429)a là không th(cid:1269)c hi(cid:1227)n vi(cid:1227)c

(cid:79)(cid:1233)c các gói tin theo (cid:255)(cid:1231)a ch(cid:1229) IP, n(cid:1219)u IPFilterType khác 0 thì lúc (cid:255)ó

b1,b2,b3,b4 s(cid:1217) là (cid:255)(cid:1231)a ch(cid:1229) IP c(cid:1195)n (cid:79)(cid:1233)c. B(cid:1237)n s(cid:1237) nguyên này (cid:86)(cid:1217) hình thành

(cid:255)(cid:1231)a ch(cid:1229) IP theo (cid:71)(cid:1189)ng b1.b2.b3.b4

SOURCE_FILTER l(cid:1233)c theo (cid:255)(cid:1231)a ch(cid:1229) IP ngu(cid:1239)n, các gói tin có (cid:255)(cid:1231)a

ch(cid:1229) ngu(cid:1239)n (n(cid:1131)i g(cid:1265)i) b(cid:1205)ng b1.b2.b3.b4 (cid:86)(cid:1217) (cid:255)(cid:1133)(cid:1255)c b(cid:1203)t (cid:79)(cid:1189)i.

DEST_FILTER l(cid:1233)c theo (cid:255)(cid:1231)a ch(cid:1229) (cid:255)ích, các gói tin có (cid:255)(cid:1231)a ch(cid:1229) (cid:255)ích

(n(cid:1131)i (cid:255)(cid:1219)n) b(cid:1205)ng b1.b2.b3.b4 s(cid:1217) (cid:255)(cid:1133)(cid:1255)c b(cid:1203)t (cid:79)(cid:1189)i.

PortFilterType xác (cid:255)(cid:1231)nh ki(cid:1223)u (cid:79)(cid:1233)c theo Port (cid:70)(cid:1259)a (cid:1261)ng (cid:71)(cid:1257)ng, giá tr(cid:1231) c(cid:1259)a

nó (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1231)nh ngh(cid:429)a nh(cid:1133) (cid:70)(cid:1259)a IPFilterType.

SOURCE_OR_DEST nh(cid:1267)ng gói tin có (cid:255)(cid:1231)a ch(cid:1229) ngu(cid:1239)n ho(cid:1211)c (cid:255)ích

b(cid:1205)ng b1.b2.b3.b4 (cid:86)(cid:1217) (cid:255)(cid:1133)(cid:1255)c b(cid:1203)t.

SOURCE_AND_DEST nh(cid:1267)ng gói tin có (cid:255)(cid:1231)a ch(cid:1229) ngu(cid:1239)n b(cid:1205)ng

b1.b2.b3.b4 (cid:86)(cid:1217) (cid:255)(cid:1133)(cid:1255)c b(cid:1203)t và nh(cid:1267)ng gói tin có (cid:255)(cid:1231)a ch(cid:1229) (cid:255)ích b(cid:1205)ng

b1.b2.b3.b4 (cid:86)(cid:1217) (cid:255)(cid:1133)(cid:1255)c b(cid:1203)t.

T(cid:1133)(cid:1131)ng t(cid:1269) (cid:89)(cid:1131)í IPFilterType là PortFilterType

Protocol là giao th(cid:1261)c c(cid:1195)n (cid:79)(cid:1233)c, 0 có ngh(cid:429)a là không (cid:79)(cid:1233)c, 1 là l(cid:1233)c theo

84

TCP...

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

Mb1, mb2, mb3,mb4 là 4 thành ph(cid:1195)n (cid:70)(cid:1259)a (cid:255)(cid:1231)a ch(cid:1229) IP (cid:70)(cid:1259)a máy tính

ch(cid:1189)y h(cid:1227) qu(cid:1191)n tr(cid:1231) (cid:70)(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u mà ta mu(cid:1237)n l(cid:1133)u thông tin b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c vào (cid:255)ó.

NumberPacket xác (cid:255)(cid:1231)nh s(cid:1237) gói tin c(cid:1195)n b(cid:1203)t.

5.9.Thi(cid:1219)t k(cid:1219) giao di(cid:1227)n PCManager( phiên (cid:69)(cid:1191)n ch(cid:1189)y trên Windows)

Mô (cid:87)(cid:1191)

Tên (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng

Ghi chú

Ki(cid:1223)u (cid:255)(cid:1237)i (cid:87)(cid:1133)(cid:1255)ng

(cid:54)(cid:1237) th(cid:1261) (cid:87)(cid:1269) 1

IDC_STATIC Label IP

2 IDC_IPADDR_SOURCE IP Address Nh(cid:1201)p IP c(cid:1195)n filter

3 CboFilterIP Combobox L(cid:1269)a ch(cid:1233)n ki(cid:1223)u filter theo IP

4 IDC_STATIC Label Port

5 IDC_SOURCEPORT Textbox Nh(cid:1201)p port c(cid:1195)n filter

85

6 CboFilterPORT Combobox L(cid:1269)a ch(cid:1233)n ki(cid:1223)u filter theo IP

Ch(cid:1133)(cid:1131)ng 5: Phân tích và thi(cid:1219)t k(cid:1219) PacketCap

7 IDC_STATIC Label Protocol

8 CboProtocol Combobox Ch(cid:1233)n protocol c(cid:1195)n filter

9 IDC_STATIC Label Thông báo nh(cid:1201)p IP

10 IDC_IPADDR_MYSQL IP Address Ch(cid:1233)n máy ch(cid:1189)y MySQL

11 IDC_STATIC Label Number of packet

12 IDC_NUMBER (cid:54)(cid:1237) l(cid:1133)(cid:1255)ng packet c(cid:1195)n b(cid:1203)t

Combo box

13 IDC_STATIC Label Server IP

14 IDC_IPADDR_SERVER Textbox IP máy

Nh(cid:1201)p (cid:255)(cid:1231)a ch(cid:1229) PCServer c(cid:1195)n (cid:255)(cid:76)(cid:1221)u khi(cid:1223)n

15 IDC_STATUS Label Báo tình tr(cid:1189)ng k(cid:1219)t n(cid:1237)i

16 BtnStart button B(cid:1203)t (cid:255)(cid:1195)u b(cid:1203)t gói tin

17 BtnStop Button K(cid:1219)t thúc vi(cid:1227)c b(cid:1203)t gói tin

18 BtnGetFilter Button

L(cid:1193)y thông tin filter hi(cid:1227)n th(cid:1249)i

19 BtnTermServer Button K(cid:1219)t thúc liên k(cid:1219)t v(cid:1237) server

20 BtnConnect Button K(cid:1219)t n(cid:1237)i (cid:255)(cid:1219)n ma1y server

21 BtnExit Button Thoát kh(cid:1235)i ch(cid:1133)(cid:1131)ng trình

86

(cid:37)(cid:1191)ng 5-10 Mô (cid:87)(cid:1191) màn hình PCManager

Ch(cid:1133)(cid:1131)ng 6: Cài (cid:255)(cid:1211)t và th(cid:1265) nghi(cid:1227)m

Ch(cid:1133)(cid:1131)ng 6: Cài (cid:255)(cid:1211)t và th(cid:1265) nghi(cid:1227)m

6.1. Cài (cid:255)(cid:1211)t

Ph(cid:1195)n PCServer (cid:86)(cid:1217) (cid:255)(cid:1133)(cid:1255)c cài (cid:255)(cid:1211)t trên môi tr(cid:1133)(cid:1249)ng Linux, PCManager (cid:86)(cid:1217) (cid:255)(cid:1133)(cid:1255)c cài (cid:255)(cid:1211)t trên (cid:70)(cid:1191) 2 môi tr(cid:1133)(cid:1249)ng Linux và Windows.

• Môi tr(cid:1133)(cid:1249)ng cài (cid:255)(cid:1211)t (cid:1261)ng (cid:71)(cid:1257)ng

o Windows XP Professional o Linux Redhat 9.0

• Môi tr(cid:1133)(cid:1249)ng l(cid:1201)p trình

o C for Linux o Visual C++ 6.0

• Môi tr(cid:1133)(cid:1249)ng cài (cid:255)(cid:1211)t th(cid:1265) nghi(cid:1227)m

o PCServer: Linux Redhat 9.0 o PCManager: Windows XP Professional o PCManager: Linux Redhat 9.0

87

• Các ph(cid:1195)n m(cid:1221)m h(cid:1241) tr(cid:1255) PCServer : MySQL, th(cid:1133) vi(cid:1227)n libpap

Ch(cid:1133)(cid:1131)ng 6: Cài (cid:255)(cid:1211)t và th(cid:1265) nghi(cid:1227)m

6.2. Th(cid:1265) nghi(cid:1227)m

6.2.1. Mô hình th(cid:1265) nghi(cid:1227)m 1

Hình 6-1 Mô hình th(cid:1265) nghi(cid:1227)m 1

• Mô (cid:87)(cid:1191): PCServer và PCStore cùng ch(cid:1189)y trên m(cid:1245)t máy,

PCManager và PCServer cùng trong m(cid:1245)t LAN segment

• K(cid:1219)t qu(cid:1191):

o PCManager k(cid:1219)t n(cid:1237)i vào PCServer thành công

o PCServer th(cid:1269)c hi(cid:1227)n t(cid:1237)t t(cid:1193)t (cid:70)(cid:1191) các yêu c(cid:1195)u do PCManager

g(cid:1265)i (cid:255)(cid:1219)n

o PCServer ghi k(cid:1219)t qu(cid:1191) b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c vào c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u MySQL

88

thành công.

Ch(cid:1133)(cid:1131)ng 6: Cài (cid:255)(cid:1211)t và th(cid:1265) nghi(cid:1227)m

6.2.2. Mô hình th(cid:1265) nghi(cid:1227)m 2

Hình 6-2 Mô hình th(cid:1265) nghi(cid:1227)m 2

• Mô (cid:87)(cid:1191): PCServer và PCStore có th(cid:1223) l(cid:1269)a ch(cid:1233)n ch(cid:1189)y trên cùng 1

máy ho(cid:1211)c (cid:1251) 2 máy khác nhau.

• K(cid:1219)t qu(cid:1191):

o PCManager k(cid:1219)t n(cid:1237)i vào PCServer thành công

o PCServer th(cid:1269)c hi(cid:1227)n t(cid:1237)t t(cid:1193)t (cid:70)(cid:1191) các yêu c(cid:1195)u do PCManager

g(cid:1265)i (cid:255)(cid:1219)n

o PCServer ghi k(cid:1219)t qu(cid:1191) b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c vào c(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u MySQL

89

thành công.

Ch(cid:1133)(cid:1131)ng 6: Cài (cid:255)(cid:1211)t và th(cid:1265) nghi(cid:1227)m

6.2.3. Mô hình th(cid:1265) nghi(cid:1227)m 3

Hình 6-3 Mô hình th(cid:1265) nghi(cid:1227)m 3

• Mô (cid:87)(cid:1191)

PCServer và PCManager ch(cid:1189)y trên 2 (cid:80)(cid:1189)ng LAN khác nhau

(cid:255)(cid:1133)(cid:1255)c n(cid:1237)i qua 1 router.

• K(cid:1219)t qu(cid:1191)

90

Ch(cid:1133)a th(cid:1265) nghi(cid:1227)m (cid:255)(cid:1133)(cid:1255)c mô hình này do không có thi(cid:1219)t (cid:69)(cid:1231).

Ch(cid:1133)(cid:1131)ng 7: T(cid:1241)ng k(cid:1219)t

Ch(cid:1133)(cid:1131)ng 7: T(cid:1241)ng k(cid:1219)t

7.1. K(cid:1219)t lu(cid:1201)n

7.1.1. K(cid:1219)t qu(cid:1191) (cid:255)(cid:1189)t (cid:255)(cid:1133)(cid:1255)c

Sau khi th(cid:1269)c hi(cid:1227)n xong (cid:255)(cid:1221) tài, chúng em (cid:255)ã thu (cid:255)(cid:1133)(cid:1255)c m(cid:1245)t s(cid:1237) k(cid:1219)t

qu(cid:1191): • Tìm hi(cid:1223)u (cid:255)(cid:1133)(cid:1255)c th(cid:1133) vi(cid:1227)n mã ngu(cid:1239)n m(cid:1251) libpcap và vi(cid:1219)t (cid:255)(cid:1133)(cid:1255)c (cid:1261)ng

(cid:71)(cid:1257)ng b(cid:1203)t gói tin d(cid:1269)a vào th(cid:1133) vi(cid:1227)n này. (cid:264)ây là b(cid:1245) th(cid:1133) vi(cid:1227)n mã

ngu(cid:1239)n m(cid:1251) h(cid:1241) tr(cid:1255) l(cid:1201)p trình (cid:80)(cid:1189)ng c(cid:1193)p th(cid:1193)p (cid:255)(cid:1133)(cid:1255)c s(cid:1265) d(cid:1257)ng r(cid:1193)t nhi(cid:1221)u

trong các ph(cid:1195)n m(cid:1221)m h(cid:1241) tr(cid:1255) b(cid:1203)t gói tin nh(cid:1133) TcpDump, TCPFlow,

Ethereal...

• Tìm hi(cid:1223)u h(cid:1227) qu(cid:1191)n tr(cid:1231) (cid:70)(cid:1131) s(cid:1251) d(cid:1267) li(cid:1227)u mã ngu(cid:1239)n m(cid:1251) MySQL. • Tìm hi(cid:1223)u v(cid:1193)n (cid:255)(cid:1221) l(cid:1201)p trình socket, multithread trên môi tr(cid:1133)(cid:1249)ng

Linux.

• Xây d(cid:1269)ng (cid:255)(cid:1133)(cid:1255)c (cid:1261)ng (cid:71)(cid:1257)ng phân tán b(cid:1203)t các gói tin ph(cid:1257)c (cid:89)(cid:1257) cho

vi(cid:1227)c phân tích thông tin (cid:80)(cid:1189)ng.

7.1.2. (cid:43)(cid:1189)n ch(cid:1219)

• Ch(cid:1133)a th(cid:1223) b(cid:1203)t gói tin (cid:255)(cid:1239)ng trên nhi(cid:1221)u card (cid:80)(cid:1189)ng • (cid:54)(cid:1237) l(cid:1133)(cid:1255)ng protocol có th(cid:1223) phân tích và trích (cid:79)(cid:1233)c thông tin không

nhi(cid:1221)u

• Ch(cid:1133)a h(cid:1243) tr(cid:1255) ch(cid:1261)c n(cid:259)ng phân tích thông tin t(cid:1263) nh(cid:1267)ng d(cid:1267) li(cid:1227)u (cid:255)ã

91

b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c.

Ch(cid:1133)(cid:1131)ng 7: T(cid:1241)ng k(cid:1219)t

7.2. H(cid:1133)(cid:1247)ng phát tri(cid:1223)n

Trong t(cid:1133)(cid:1131)ng lai, (cid:1261)ng (cid:71)(cid:1257)ng PacketCap (cid:86)(cid:1217) (cid:255)(cid:1133)(cid:1255)c phát tri(cid:1223)n thêm nh(cid:1267)ng

ch(cid:1261)c n(cid:259)ng m(cid:1247)i và nâng c(cid:1193)p ch(cid:1261)c n(cid:259)ng hi(cid:1227)n (cid:87)(cid:1189)i ch(cid:1133)a (cid:255)(cid:1133)(cid:1255)c t(cid:1237)t. • H(cid:1241) tr(cid:1255) b(cid:1203)t các gói tin (cid:255)(cid:1239)ng th(cid:1249)i trên nhi(cid:1221)u card (cid:80)(cid:1189)ng • (cid:55)(cid:259)ng thêm s(cid:1237) l(cid:1133)(cid:1255)ng protocol mà ch(cid:1133)(cid:1131)ng trình có th(cid:1223) phân tích và

trích (cid:79)(cid:1233)c thông tin.

• (cid:43)(cid:1243) tr(cid:1255) (cid:79)(cid:1133)u thông tin b(cid:1203)t (cid:255)(cid:1133)(cid:1255)c theo các (cid:255)(cid:1231)nh (cid:71)(cid:1189)ng (cid:70)(cid:1259)a Ethereal,

92

TcpDump..

Ph(cid:1257) L(cid:1257)c

PH(cid:1256) L(cid:1256)C H(cid:1133)(cid:1247)ng d(cid:1199)n s(cid:1265) d(cid:1257)ng PacketCap

1.Ch(cid:1133)(cid:1131)ng trình PCServer

(cid:264)(cid:1223) ch(cid:1189)y ch(cid:1133)(cid:1131)ng trình Server (cid:69)(cid:1189)n ch(cid:1229) c(cid:1195)n vào th(cid:1133) (cid:80)(cid:1257)c ch(cid:1261)a ch(cid:1133)(cid:1131)ng trình

server và gõ l(cid:1227)nh ./pcserver thì ch(cid:1133)(cid:1131)ng trình (cid:86)(cid:1217) (cid:255)(cid:1133)(cid:1255)c th(cid:1269)c thi.

(cid:264)(cid:1223) thoát kh(cid:1235)i ch(cid:1133)(cid:1131)ng trình PCServer (cid:69)(cid:1189)n có th(cid:1223) dùng ch(cid:1133)(cid:1131)ng trình

Client g(cid:1265)i yêu c(cid:1195)u k(cid:1219)t thúc ch(cid:1133)(cid:1131)ng trình PCServer, ho(cid:1211)c nh(cid:1193)n t(cid:1241) h(cid:1255)p phím

Ctrl-C trên console (cid:255)ang ch(cid:1189)y PCserver.

2. Ch(cid:1133)(cid:1131)ng trình PCManager

2.1. PCManager trên môi tr(cid:1133)(cid:1249)ng Linux

(cid:55)(cid:1133)(cid:1131)ng t(cid:1269) nh(cid:1133) khi ch(cid:1189)y PCServer, (cid:69)(cid:1189)n vào th(cid:1133) (cid:80)(cid:1257)c có ch(cid:1261)a ch(cid:1133)(cid:1131)ng

trình PCManager r(cid:1239)i gõ l(cid:1227)nh ./pcman.Ch(cid:1133)(cid:1131)ng trình (cid:86)(cid:1217) yêu c(cid:1195)u nh(cid:1201)p (cid:255)(cid:1231)a

ch(cid:1229) IP (cid:70)(cid:1259)a máy ch(cid:1189)y PCServer. N(cid:1219)u k(cid:1219)t n(cid:1237)i thành công thì ch(cid:1133)(cid:1131)ng trình

(cid:86)(cid:1217) hi(cid:1223)n th(cid:1231) các dòng thông báo, (cid:69)(cid:1189)n ch(cid:1229) c(cid:1195)n nh(cid:1201)p các giá tr(cid:1231) hi(cid:1223)n th(cid:1231) trên

93

màn hình là có th(cid:1223) (cid:255)i(cid:1221)u khi(cid:1223)n (cid:255)(cid:1133)(cid:1255)c ho(cid:1189)t (cid:255)(cid:1245)ng (cid:70)(cid:1259)a PCServer.

Ph(cid:1257) L(cid:1257)c

2.2. PCManager trên môi tr(cid:1133)(cid:1249)ng Windows

Double click chu(cid:1245)t vào file PCManager.exe, giao di(cid:1227)n (cid:70)(cid:1259)a ch(cid:1133)(cid:1131)ng trình

Hình 7-1 Màn hình PCManager

(cid:264)ánh (cid:255)(cid:1231)a ch(cid:1229) IP (cid:70)(cid:1259)a PCServer vào (cid:80)(cid:1257)c PCServerIP, click chu(cid:1245)t vào

nút Connect n(cid:1219)u k(cid:1219)t n(cid:1237)i thành công thì dòng tr(cid:1189)ng thái phía d(cid:1133)(cid:1247)i nút

Connect (cid:86)(cid:1217) thông báo k(cid:1219)t qu(cid:1191) k(cid:1219)t n(cid:1237)i thành công hay không.

N(cid:1219)u thành k(cid:1219)t n(cid:1237)i thành công thì các nút l(cid:1227)nh (cid:86)(cid:1217) có hi(cid:1227)u l(cid:1269)c. Lúc

này ta m(cid:1247)i có th(cid:1223) th(cid:1269)c hi(cid:1227)n các thao tác (cid:255)i(cid:1221)u khi(cid:1223)n (cid:255)(cid:1133)(cid:1255)c.

Ví d(cid:1257)(cid:3)(cid:255)(cid:1223) b(cid:1203)t t(cid:1193)t (cid:70)(cid:1191) các gói tin (cid:255)i qua card (cid:80)(cid:1189)ng( (cid:70)(cid:1259)a máy (cid:255)ang ch(cid:1189)y

PCServer) và (cid:79)(cid:1133)u k(cid:1219)t qu(cid:1191) vào chính máy tính (cid:255)ang ch(cid:1189)y PCServer thì ch(cid:1229)

c(cid:1195)n click chu(cid:1245)t vào nút StartCapture

(cid:264)(cid:1223) k(cid:1219)t thúc ch(cid:1133)(cid:1131)ng trình PCServer thì click chu(cid:1245)t vào nút

94

Terminate Server.

Tài li(cid:1227)u tham kh(cid:1191)o

TÀI LI(cid:1226)U THAM KH(cid:1190)O

[1] Nguy(cid:1225)n Ph(cid:1133)(cid:1131)ng Lan – Hoàng (cid:264)(cid:1261)c (cid:43)(cid:1191)i, L(cid:1201)p trình Linux t(cid:1201)p 1, NXBGiáo

D(cid:1257)c, H(cid:1239) Chí Minh, 2001

[2] Sams, Linux Programming Unleashed, 1999

Website

[3] VietNam OpenSource Forum, www.vnoss.org

[4] MySQL, www.mysql.com

[5] libpcap, www.tcpdump.org

95

[6] SourceForge, www.sourceforge.net