Xây dựng ứng dụng bắt gói tin cho việc phân tích thông tin mạng phục vụ quản lý

Tài liệu Xây dựng ứng dụng bắt gói tin cho việc phân tích thông tin mạng phục vụ quản lý: TR??NG ??I H?C KHOA H?C T? NHIÊN KHOA CÔNG NGH? THÔNG TIN ?? MÔN CÔNG NGH? PH?N M?M GIANG QU?C MINH – H? PH?M THÁI VINH XÂY D?NG ?NG ??NG B?T GÓI TIN CHO VI?C PHÂN TÍCH THÔNG TIN ??NG PH?C ?? QU?N LÝ KHOÁ LU?N C? NHÂN TIN H?C TP. HCM, ??M 2005 TR??NG ??I H?C KHOA H?C T? NHIÊN KHOA CÔNG NGH? THÔNG TIN ?? MÔN CÔNG NGH? PH?N M?M GIANG QU?C MINH - 0112016 H? PH?M THÁI VINH - 0112081 XÂY D?NG ?NG ??NG B?T GÓI TIN CHO VI?C PHÂN TÍCH THÔNG TIN ??NG PH?C ?? QU?N LÝ KHÓA LU?N C? NHÂN TIN H?C GIÁO VIÊN H??NG D?N GVC CAO ??NG TÂN NIÊN KHÓA 2001 – 2005 NH?N XÉT ??A GIÁO VIÊN H??NG D?N ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ......................

pdf91 trang | Chia sẻ: Khủng Long | Lượt xem: 799 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Xây dựng ứng dụng bắt gói tin cho việc phân tích thông tin mạng phục vụ quản lý, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TR??NG ??I H?C KHOA H?C T? NHIÊN KHOA CÔNG NGH? THÔNG TIN ?? MÔN CÔNG NGH? PH?N M?M GIANG QU?C MINH – H? PH?M THÁI VINH XÂY D?NG ?NG ??NG B?T GÓI TIN CHO VI?C PHÂN TÍCH THÔNG TIN ??NG PH?C ?? QU?N LÝ KHOÁ LU?N C? NHÂN TIN H?C TP. HCM, ??M 2005 TR??NG ??I H?C KHOA H?C T? NHIÊN KHOA CÔNG NGH? THÔNG TIN ?? MÔN CÔNG NGH? PH?N M?M GIANG QU?C MINH - 0112016 H? PH?M THÁI VINH - 0112081 XÂY D?NG ?NG ??NG B?T GÓI TIN CHO VI?C PHÂN TÍCH THÔNG TIN ??NG PH?C ?? QU?N LÝ KHÓA LU?N C? NHÂN TIN H?C GIÁO VIÊN H??NG D?N GVC CAO ??NG TÂN NIÊN KHÓA 2001 – 2005 NH?N XÉT ??A GIÁO VIÊN H??NG D?N ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... Tp.HCM, ngày..tháng.n?m 2005 NH?N XÉT ??A GIÁO VIÊN PH?N BI?N ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... Tp.HCM, ngày..tháng.n?m 2005 L?I CÁM ?N Chúng em xin chân thành cám ?n Ban giám hi?u, quý Th?y cô ??a tr??ng ??i H?c Khoa H?c T? Nhiên TP. H? Chí Minh, ??c bi?t là các Th?y cô trong Khoa Công ngh? Thông tin ?ã t?n tình gi?ng ??y, trang ?? cho chúng em nh?ng ki?n th?c c?n thi?t, b? ích trong su?t nh?ng n?m ??c t?p ??i tr??ng. Chúng em xin chân thành ??m ?n Th?y Cao ??ng Tân, ng??i Th?y ?ã t?n tình quan tâm h??ng d?n, giúp ?? chúng em trong su?t th?i gian làm lu?n ??n này. Chúng con xin g?i lòng bi?t ?n sâu s?c và s? kính tr?ng ??n ông bà, cha ??, cùng toàn th? gia ?ình, nh?ng ng??i ?ã nuôi ??y chúng con tr??ng thành nh? ngày hôm nay. Chúng tôi xin chân thành cám ?n s? giúp ??, ??ng viên, nh?n xét, ?óng góp ý ki?n c?a các anh ch?, ??n bè trong quá trình th?c hi?n lu?n v?n này. TP. H? Chí Minh, 7/2005 Nhóm sinh viên th?c hi?n Giang Qu?c Minh – H? Ph?m Thái Vinh B? C?C ??A LU?N V?N Lu?n v?n g?m có 3 ph?n và 7 ch??ng PH?N 1: T?NG QUAN Ch??ng 1 Gi?i thi?u v???? tài PH?N 2: TÌM HI?U CÁC V?N ?? L?P TRÌNH. Ph?n này gi?i thi?u các v?n ?? l?p trình c? ??n nh?t ?? xây d?ng 1??ng ??ng có kh? ??ng b?t các gói tin và cho phép ng??i dùng có th? ?i?u khi?n t? xa qua môi tr??ng ??ng. Ch??ng 2. Tìm hi?u th? vi?n l?p trình m?ng c?p th?p libpcap, ?ây là “trái tim” ??a h?u h?t các ?ng ??ng b?t gói tin mã ngu?n m? hi?n nay. Ch??ngg 3. Gi?i thi?u MySQL, m?t h? qu?n tr? ?? s? d? li?u t?m trung ???c s? d?ng ph? bi?n nh?t hi?n nay. Ch??ng 4. Tìm hi?u ?? thu?t l?p trình socket ?? vi?t các ?ng ??ng trên môi tr??ng ??ng Ph?n 3 Xây ??ng ?ng ??ng PacketCap. Ph?n này ?? s? d?ng các ki?n th?c ?ã tìm hi?u ? ch??ng 2, 3, 4 ?? xây d?ng m?t ?ng ??ng b?t gói tin, ??u các k?t qu? b?t ???c vào c? s? d? li?u ?? phân tích các thông tin ??ng. Ch??ng 5. Phân tích, thi?t k???ng ??ng PacketCap Ch??ng 6. Cài ??t và th? nghi?m PacketCap Ch??ng 7. T?ng k?t. Ch??ng này trình bày nh?ng k?t qu? ??t ???c, nh?ng ??n ch? và h??ng phát tri?n PacketCap trong t??ng lai. Các danh??c 11 M?C ??C DANH SÁCH HÌNH.................................................................................... 14 DANH SÁCH ??NG .................................................................................. 15 PH?N 1: T?NG QUAN .............................................................................. 16 Ch??ng 1: Gi?i thi?u ?? tài .......................................................................... 17 1.1. ??t v?n ?? .......................................................................................... 17 1.2. Gi?i thi?u ?? tài.................................................................................. 18 1.3. Yêu c?u ??a ?? tài .............................................................................. 19 PH?N 2: TÌM HI?U CÁC V?N ?? L?P TRÌNH ...................................... 20 Ch??ng 2 : Th? vi?n l?p trình ??ng libpcap ................................................ 21 2.1. Gi?i thi?u libpcap............................................................................... 21 2.2. Cài ??t th? vi?n libpcap ..................................................................... 21 3.3. Các b??c xây d?ng ch??ng trình s? d?ng libpcap.............................. 22 3.4. Chi ti?t các b??c ................................................................................ 23 3.4.1. Ch?n Interface( card ??ng) ......................................................... 23 3.4.2. M? device ?? l?ng nghe( sniff) d? li?u......................................... 24 3.4.3. ??c traffic .................................................................................... 25 Ch??ng 3: H? qu?n tr? ?? s? d? li?u MySQL ............................................... 34 3.1. Gi?i thi?u v? MySQL......................................................................... 34 3.2. Cài ??t MySQL.................................................................................. 34 3.2.1. Cài ??t MySQL t? các gói nh? phân ............................................ 34 3.2.2. Cài ??t t? mã ngu?n..................................................................... 35 3.3. S? d?ng MySQL ................................................................................ 36 3.3.1. L?nh mysql .................................................................................. 36 3.3.2. L?nh mysqladmin ........................................................................ 36 3.3.3. L?nh mysqlshow.......................................................................... 36 3.3.4. L?nh grant.................................................................................... 37 3.3.5. L?nh Revoke................................................................................ 38 3.3.6. Ví d? v? t?o m?t c? s? d? li?u ..................................................... 38 3.4. L?p trình MySQL trên ngôn ng? 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??c 12 Ch??ng 4: L?p trình socket .......................................................................... 42 4.1. Gi?i thi?u v? l?p trình socket ............................................................. 42 4.2. Nguyên lý ho?t ??ng ??a socket......................................................... 42 4.3. L?p trình v?i socket ........................................................................... 44 4.3.1. Các thu?c tính ??a socket............................................................. 44 4.3.1.1. Vùng( domain) ...................................................................... 44 5.3.1.2. Ki?u socket(type)................................................................... 46 4.3.1.3. Giao th?c ??a socket( protocol) ............................................. 47 4.3.2. ??o socket.................................................................................... 48 4.3.3. ??nh ??a ch? cho socket................................................................ 49 4.3.4. ??t tên cho socket........................................................................ 51 4.3.5. ??o hàng ??i cho socket .............................................................. 52 4.3.6. Ch? và ch?p nh?n k?t n?i............................................................. 53 4.3.7. Yêu c?u k?t n?i ............................................................................ 54 4.3.8. ?óng k?t n?i ................................................................................ 55 4.3.9. Giao ti?p b?ng socket................................................................... 56 4.4. S? d?ng socket trong ?ng ??ng minh ??a ....................................... 58 PH?N 3: XÂY D?NG ?NG ??NG TH? NGHI?M PACKETCAP ......... 59 Ch??ng 5: Phân tích và thi?t k? PacketCap .................................................. 60 5.1. Kh?o sát hi?n tr?ng ............................................................................ 60 5.2. Phân tích và xác ??nh yêu c?u ............................................................ 61 5.2.1. Phân tích ...................................................................................... 61 5.2.2. Xác ??nh yêu c?u ......................................................................... 61 5.3. Các h??ng xây d?ng ?ng ??ng PacketCap......................................... 63 5.3.1. Phân tích h??ng phát tri?n d?a trên Ethereal................................ 63 5.3.2. Phân tích h??ng phát tri?n d?a trên libcap ................................... 64 5.3.3. L?a ch?n h??ng phát tri?n PacketCap ......................................... 64 5.4. Các thành ph?n PacketCap ................................................................. 65 5.5. Xây d?ng mô hình use case................................................................ 66 5.5.1. Xác ??nh Actor và use case .......................................................... 66 5.5.2. Mô hình use case ......................................................................... 66 5.6. ??t ?? 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??c 13 5.7.Thi?t k? d? li?u ................................................................................... 72 5.7.1. Phân tích các h??ng l?u tr? ......................................................... 72 5.7.2. Thi?t k? ?? s? ?? li?u................................................................... 75 5.7.2.1. Danh sách các ??i t??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?ng PCServer( server), PCManager(client)............................... 81 5.8.1. L?u ?? PCServer ......................................................................... 81 5.8.2. L?u ?? PCManager( Client)......................................................... 82 5.8.3. C?u trúc d? li?u trao ??i gi?a PCServer và PCManager............... 83 5.9.Thi?t k? giao di?n PCManager( phiên ??n ch?y trên Windows) .......... 85 Ch??ng 6: Cài ??t và th? nghi?m................................................................. 87 6.1. Cài ??t................................................................................................ 87 6.2. Th? nghi?m........................................................................................ 88 6.2.1. Mô hình th? nghi?m 1.................................................................. 88 6.2.2. Mô hình th? nghi?m 2.................................................................. 89 6.2.3. Mô hình th? nghi?m 3.................................................................. 90 Ch??ng 7: T?ng k?t ..................................................................................... 91 7.1. K?t lu?n.............................................................................................. 91 7.1.1. K?t qu? ??t ???c.......................................................................... 91 7.1.2. ??n ch?........................................................................................ 91 7.2. H??ng phát tri?n ................................................................................ 92 PH? L?C H??ng d?n s? d?ng PacketCap ................................................... 93 1.Ch??ng trình PCServer.......................................................................... 93 2. Ch??ng trình PCManager ..................................................................... 93 2.1. PCManager trên môi tr??ng Linux ................................................. 93 2.2. PCManager trên môi tr??ng Windows............................................ 94 TÀI LI?U THAM KH?O............................................................................ 95 Các danh??c 14 DANH SÁCH HÌNH Hình 5-1 Các thành ph?n ??a PacketCap...................................................... 65 Hình 5-2 Mô hình use case ........................................................................... 66 Hình 5-3 Mô hình l?u tr? 1 .......................................................................... 72 Hình 5-4 Mô hình l?u tr? 2 .......................................................................... 73 Hình 5-5 Mô hình l?u tr? 3 .......................................................................... 74 Hình 5-6 L?u ?? PCServer........................................................................... 81 Hình 5-7 L?u ?? PCManager ....................................................................... 82 Hình 6-1 Mô hình th? nghi?m 1 ................................................................... 88 Hình 6-2 Mô hình th? nghi?m 2 ................................................................... 89 Hình 6-3 Mô hình th? nghi?m 3 ................................................................... 90 Các danh??c 15 DANH SÁCH ??NG ??ng 4-1 Các giá tr? c?a domain .................................................................. 48 ??ng 4-2 Các mã l?i ??a hàm bind() ............................................................ 51 ??ng 4-3 Các mã l?i ??a domain AF_UNIX ................................................ 52 ??ng 4-4 Mã l?i ??a hàm connect().............................................................. 55 ??ng 5-1 Xác ??nh yêu c?u........................................................................... 62 ??ng 5-2 Danh sách các ??i t??ng ............................................................... 75 ??ng 5-3 Table PACKET............................................................................. 75 ??ng 5-4 Table IP ........................................................................................ 76 ??ng 5-5 Table TCP..................................................................................... 76 ??ng 5-6 Table UDP.................................................................................... 77 ??ng 5-7 Table ICMP .................................................................................. 77 ??ng 5-8 Table IGMP.................................................................................. 78 ??ng 5-9 Table ARP .................................................................................... 80 ??ng 5-10 Mô ?? màn hình PCManager ....................................................... 86 Ph?n 1: T?ng quan 16 PH?N 1: T?NG QUAN Ch??ng 1. Gi?i thi?u ?? tài Ch??ng 1: Gi?i thi?u ?? tài 17 Ch??ng 1: Gi?i thi?u ?? tài 1.1. ??t v?n ?? Ngày nay công ngh? thông tin nói chung và Intenet nói riêng ngày càng phát tri?n ??nh ?? và tr? thành không th? thi?u trong cu?c s?ng chúng ta. Xu?t phát t? nhu c?u trao ??i thông tin ngày càng nhanh và nhi?u gi?a các doanh nghi?p, các t? ch?c và công ty trong n?n kinh t? th? tr??ng hôm nay, s? l??ng các doanh nghi?p thi?t l?p các h? th?ng m?ng và k?t n?i Intenet ngày càng nhi?u. Vi?c Công ngh? thông tin và m?ng Intenet phát tri?n và ngày càng nhi?u các thông tin quan tr?ng ???c trao ??i trên m?ng làm n?y sinh m?t s? v?n ?? quan tr?ng là b?o m?t thông tin trên m?ng ?? tránh rò r? hay ng?n không cho truy c?p vào các d? li?u không cho phép gây thi?t h?i kinh t?, qu?n lý b?ng thông ?? t?ng kh? n?ng ?áp ?ng thông tin, giao d?ch v?i khách hàng ??ng th?i tránh ???c tình tr?ng ngh?n m?ch l?u thông trên m?ng. Vi?c phân tích l?u l??ng m?ng ?òi h?i n?ng l?c tính toán r?t l?n, vì v?y mu?n làm ???c vi?c này c?n ph?i trang b? các siêu máy tính ?? th?c hi?n bài toán này. Trong ???u ki?n kinh t? n??c ta thì không th? trang b? nh?ng h? th?ng này ???c vì chúng quá ??t ??. Ch??ng 1: Gi?i thi?u ?? tài 18 ??y gi?i pháp nào ?? gi?i quy?t bài toán này ? · Grid Computing là h? th?ng tính toán song song và phân tán cho phép chúng ta th?c hi?n nh?ng bài toán l?n d?a trên các ?? th?ng nh? g?m nhi?u máy tính ???c n?i m?ng v?i nhau. · Hi?n nay chúng ta l?i có r?t nhi?u h? th?ng máy tính n?i ??ng nh?ng ch?a s? d?ng ???c h?t kh? n?ng tính toán c?a chúng. · ??i s? l??ng các máy tính ?? l?n thì vi?c tri?n khai Grid Computing s? cho chúng ta m?t h? th?ng tính toán c?c kì ??nh g?p nhi?u l?n 1 siêu máy tính ( lúc ?ó các siêu máy tính có th? ch? là m?t node trong h? th?ng Grid Computing). ??i nh?ng ?u ???m trên chúng tôi ch?n ?? tài “?ng d?ng th? nghi?m Grid Computing trong vi?c phân tích thông tin m?ng ph?c v? qu?n lý”. 1.2. Gi?i thi?u ?? tài ?? tài “?ng ??ng th? nghi?m Grid Computing trong vi?c phân tích thông tin ??ng ph?c ?? qu?n lý” là m?t ?? l?n g?m 2 nhóm th?c hi?n. Nhóm th? 1 ?? xây d?ng ?ng d?ng phân tán trên m?ng cho phép thi?t l?p t? xa ch???? l?c và b?t các gói tin, trích l?c và l?u vào các c? s? d? li?u trên ??ng??? ph?c ?? cho vi?c theo dõi và phân tích thông tin??ng (Ph?n I). Nhóm th? 2 ?? tìm hi?u Grid Computing và xây d?ng ?ng ??ng ?? phân tích hi?n tr?ng c?a m?ng d?a trên thông tin t? ?? s? d? li?u do nhóm th? 1 xây d?ng (Ph?n II). Ch??ng 1: Gi?i thi?u ?? tài 19 1.3. Yêu c?u ??a ?? tài · Xây d?ng ?ng d?ng phân tán th? nghi?m cho phép b?t các gói tin dùng ?? phân tích thông tin??ng ph?c ?? qu?n lý. · Các gói tin sau khi b?t, ???c trích thông tin và l?u vào các c? s? d? li?u phân tán trên m?ng theo nhu c?u c?a ng??i qu?n tr?. · ?? th?ng cho phép c?u hình ?ng d?ng t? xa. · H? tr? ??u k?t qu? b?t ???c theo ??nh ??ng ??a các ?ng ??ng b?t gói tin khác nh? Ethereal, TCPDump... Ph?n 2: Tìm hi?u các v?n ?? l?p trình 20 PH?N 2: TÌM HI?U CÁC V?N ?? L?P TRÌNH Ch??ng 2. Th? vi?n l?p trình ??ng libpcap Ch??ng 3. H? qu?n tr? ?? s? d? li?u MySQL Ch??ng 4. L?p trình socket Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 21 Ch??ng 2 : Th? vi?n l?p trình ??ng libpcap 2.1. Gi?i thi?u libpcap Libpcap là m?t th? vi?n mã ngu?n m? ?? tr? l?p trình ??ng c?p th?p, cho phép b?t các gói tin trên ???ng truy?n theo nhi?u h??ng khác nhau, cho phép phân tích các frame v?a tìm ???c. Th? vi?n libcap ???c s? d?ng r?ng rãi trong các ph?n m?m sniffer packet. Các ph?n m?m s? d?ng libcap ph? bi?n là TCPdump, TCPflow. Hi?n nay phiên ??n m?i nh?t ??a libpcap là 0.9.1. 2.2. Cài ??t th? vi?n libpcap Ch??ng trình ngu?n c?a libpcap có th? download ? ??a ch? www.tcpdump.org , các phiên ??n m?i nh?t ??a libpcap ??u có ? ??a ch? này. Gi? s? b?n ??i v? gói libpcap-0.8.3.tar.tar, ti?nhànhcài ??t: · Gi?i nén gói tar tar –xzvf libpcap-0.8.3.tar.tar · Chuy?n vào th? m?c libpcap cd libpcap-0.8.3 · gõ l?nh ./configure · Gõ l?nh make · Gõ l?nh make install N?u không có l?i gì x?y ra thì quá trình cài ??t ?ã hoàn t?t. Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 22 3.3. Các b??c xây d?ng ch??ng trình s? d?ng libpcap Có 5 b??c chính trong vi?c s? d?ng th? vi?n libpcap · ???c 1: Xác ??nh interface (card ??ng) mà ta mu?n b?t frame vào (Trong Linux, interface th??ng là eth0,eth1..Ta có th? dùng các hàm pcap_lookupdev() c?a th? vi?n libpcap ?? l?y t?t c? các inteface. · ???c 2: Kh?i t?o pcap. Cung c?p cho pcap bi?t interface nào trong ?? các interface ?ã l?y v??? b??c trên s?????c ch?n ?? sniff. · ???c 3: L?c frame .pcap cho chúng ta c? ch? ch?n l?a khi l?c các frame khi b?t (ví d? ch? b?t frame TCP/IP có source IP 192.168.8.8 và port 23 ). ta ph?i t?o ra filter r?i biên ??ch filter này ?? báo cho pcap bi?t b? l?c nó s? dùng. · ???c 4: Pcap th?c thi vi?c sniff frames. · ???c 5: ?óng phiên làm vi?c và k?t thúc ?ng d?ng Trên ?ây là qui trình t?ng quát cách libpcap b?t gói tin trong ?ó b??c 3 là tùy ch?n có th? có ho?c không. Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 23 3.4. Chi ti?t các b??c 3.4.1. Ch?n Interface( card??ng) Có 3 cách thi?t l?p devices ?? sniff các frames d? li?u · Cách 1 : Cho ng??i dùng nh?p tên thi?t b? t? dòng l?nh #include #include int main(int argc , char* argv[]) { Char * dev = argv[1] Printf(?Devices : %s \n?,dev); } Trong ?ó argv[1] là tham s? dòng l?nh ??u tiên · Cách 2 : S? d?ng hàm pcap_lookupdev() c?a libpcap ?? tìm ki?m các interface t?n ??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); } Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 24 Trong tr??ng h?p này, pcap t? tìm ra thi?t b?. errbuf là chu?i ch?a thông báo l?i n?u có. · Cách 3 : Dùng hàm pcap_findalldevs ?? tìm t?t c? thi?t b? sau ?ó ??a vào m?t m?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 && inext,i++) sprintf(devname[i],"%s",d->name); devcount=i; } 3.4.2. M? device ?? l?ng nghe( sniff) d? li?u Kh?i t?o phiên làm vi?c cho các thi?t b? s? d?ng hàm pcap_open_live(). C?u trúc hàm này nh? sau : pcap_t *pcap_open_lives( char* device,int snaplen,int promisc,int yo_ms,char *ebuf) Tham s?: · device là thi?t b???ã ???c ??nh ngh?a ? trên Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 25 · snaplen cho bi?t s? byte l?n nh?t mà pcap có th? b?t frames · promisc n?u ??t b?ng 1 thì interface s? ho?t ??ng trong ch???? promiscuos mode. ?ây là ch???? libpcap s? sniff t?t c? các frame trên dây d?n. N?u ??t b?ng 0 thì interface s? ho?t ??ng ? ch???? non promiscuos mode, trong ch?? ?? này,pcap ch? sniff nh?ng frame g?i ??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à ??nh danh thi?t b?. 3.4.3. ??c traffic Trong tr??ng h?p không b?t t?t c? các gói tin mà ch? b?t các gói tin theo m?t yêu c?u nào ?ó ta thì s? d?ng pcap_compile() pcap_setfilter() có c?u trúc nh? sau: int pcap_compile(pcap_t *p, struct bpf_program *ft, char *str, int optimize, bpf_u_int32 netmask ) Tham s????u tiên là handle c?a phiên làm vi?c (pcap_t). Tham s? th? hai là tham s? ch?? ??n n?i l?u compile version c?a filter. str là chu?i mô t? cho filter bi?t nh?ng gói tin c?n b?t. K????n là s? nguyên cho bi?t str là opyimize hay không (1 là true, 0 là false). Cu?i cùng là netmask c?a ???ng m?ng. Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 26 int pcap_setfilter(pcap_t *p,struct_bpf_program *fp) Tham s? th? nh?t là handle qu?n lý phiên làm vi?c. Tham s? th? hai là tham chi?u ch?? ??n compile version c?a filter (?ã ???c ??nh ngh?a trong pcap_compile()) ??nh d?ng str mô t? cho filter: · Filter theo source ip Ví d? ," src net 172.168.8.8 " · Filter theo dest ip : Ví d? ," dst net 172.168.8.8 " · Filter theo source và dest ip Ví d? ," src and dst net 172.168.8.8 " · Filter theo source hay dest ip Ví d? ," src or dst net 172.168.8.8 " · Filter theo source port : Ví d? ," src port 23 " · Filter theo dest port : Ví d? ," dst port 23 " · Filter theo source và dest port Ví d? ," src and dst port 23 " · Filter theo source hay dest port Ví d? ," src or dst port 172.168.8.8 " Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 27 · Filter theo protocal Ví d? ," tcp " · Ngoài ra còn có th? filter t?ng h?p : Ví d? ," dst net 172.168.8.8 and src port 23 tcp" Ví d? v? filter ??n gi?n #include ??. 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); } Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 28 if(pcap_compile(descr,&fp,? port 23 ?,0,netp) == -1) { fprintf(stderr,"Error calling pcap_compile\n"); exit(1); } pcap_setfilter(descr,&fp) Quá trình b?t frame th?t s? : ???ây ta ??nh ngh?a m?t thi?t b? m?t thi?t b???? chu?n b? sniff frame (thi?t l?p filter n?u c?n). Có 2 k? thu?t chính ???c dùng trong vi?c sniff frame. Chúng ta có th? b?t frame và ??a vào vòng l?p ch? x? lý. ??u tiên ta xem cách b?t frame s? d?ng hàm pcap_next c?a libpcap. Hàm này có c?u trúc sau : u_char *pcap_next(pcap_t *p,struct pcap_hkthdr *h ) Tham s????u tiên là handle qu?n lý phiên làm vi?c. Tham s? th? hai là pointer ch????n c?u trúc l?u gi? thông tin chung v? frame ( th?i gian b?t, chi?u dài frame ). pcap_next tr? v? m?t con tr? có d?ng u_char tr????n frame ???c mô t? b?i c?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) } Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 29 Ví d? v? sniff frame s? d?ng c?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); descr = pcap_open_live(dev,BUFSIZ,0,-1,errbuf); Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 30 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??ng trình này in ra chi?u dài và th?i gian b?t gói tin ??u tiên mà nó b?t ???c. Hàm pcap_close() dùng ????óng phiên làm vi?c. ??t k? thu?t khác ph?c t?p h?n là dùng hàm pcap_loop() c?a libpcap. C?u trúc hai hàm này nh? sau : int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user) Tham s????u tiên là handle qu?n lý phiên làm viêc, tham s? th? hai là s? frame s?????c sniff tr??c khi thoát ra. N?u tham s? này là s? âm thì s? sniff ??n khi nào có l?i x?y ra. Tham s? th? ba là tên c?a hàm callback. Tham s? cu?i cùng ???c s? d?nng trong m?t s?? ?ng d?ng, ??n gi?n hãy d?t là NULL. Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 31 C?u trúc c?a hàm callback : void my_callback(u_char *useless,const struct pcap_pkthdr* pkthdr,const u_char* packet) Tham s????u tiên là tham s? cu?i cùng c?a hàm pcap_loop truy?n vào (th??ng là NULL). Tham s? th? hai là c?u trúc pcap_pkthdr. Ví d? v? cách s? d?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++; } Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 32 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); } Ch??ng 2: Th? vi?n l?p trình ??ng libpcap 33 pcap_loop(descr,atoi(argv[1]),my_callback,NULL); fprintf(stdout,"\nDone processing packets... wheew!\n"); return 0; } Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL 34 Ch??ng 3: H? qu?n tr? ?? s? d? li?u MySQL 3.1. Gi?i thi?u v? MySQL Công ty Tcx mu?n phát tri?n m?t ?ng d?ng web và mu?n s? d?ng c? s? ?? li?u c?a riêng mình. Tcx ?ã d?a trên ti?p c?n l?p trình API c?a mSQL và ngôn ng? SQL ?? phát tri?n nên MySQL MySQL ho?t ??ng theo mô hình client-server, r?t ??n gi?n, không có các tính n?ng cao c?p nh? qu?n lý giao tác, chia s? k?t n?i. ???c s? d?ng r?ng rãi trong Linux ??i v?i các ?ng d?ng cgi hay Perl trong môi tr??ng Web, Internet. ??a ch? download MySQL : 3.2. Cài ??t MySQL 3.2.1. Cài ??t MySQL t? các gói nh? phân Các gói c?n thi?t: · Gói trình ch? (server package): MySQL-version-architecture.rpm · Gói trình khách (client package): MySQL-client-version-architecture.rpm · ?? tr? th? vi?n cho trình khách: MySQL-shared-version-architecture.rpm · Gói phát tri?n ?ng d?ng trên MySQL: MySQL-devel-version-architecture.rpm Ta cài t?ng gói b?ng l?nh rpm –ivh Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL 35 Trình cài ??t script s? t????ng t?o: · ??t CSDL database m?u · Script init.d và mysql ?? kh?i ??ng và d?ng d?ch v? ki?m soát database c?a MySQL. · Script mysql ch?a các khai báo bi?n môi tr??ng cho CSDL cho bi?t v? trí các file CSDL c?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 ?????ng nh?p và kh?i ??ng d?ch ?? daemon c?a trình ch?. Kh?i ??ng trình ch? b?ng tay: · ??ng nh?p quy?n user mysql: $ su mysql · Kh?i ??ng trình ch?: # /etc/rc.d/init.d/mysql start 3.2.2. Cài ??t t? mã ngu?n · G??i nén file ch?a mã ngu?n · Th?c hi?n cài ??t b?ng t? h?p l?nh sau : $ ./configure $ make $ su $ make intall $scripts/mysql_intal.db Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL 36 3.3. S? d?ng MySQL 3.3.1. L?nh mysql ?ây là l?nh thâm nh?p trình qu?n lý c? s? d? li?u và ??a ra các ??nh qu?n tr? khác . Cú pháp mysql ?u username ?p password databasename Ví d? Truy xu?t c? s? d? li?u packet voi username la “pac” va password la “ket”. $ mysql –I pac –p ket packet 3.3.2. L?nh mysqladmin Là công c? chính c?a ng??i qu?n tr? c? s? d? li?u v?i 2 tham s? -u,- p . V?i mysqladmin có m?t s? l?nh qu?n tr? sau · create databasename : t?o csdl · drop database name :xóa c? s? d? li?u · password newpassword : ??i m?t kh?u · status: thông tin v? tr?ng thái hi?n hành c?a trình ch? · version cho bi?t thông tin v? phiên b?n c?a trình ch? my sql 3.3.3. L?nh mysqlshow L?nh này cho bi?t thông tin v? database. N?u không có tham s? s? hi?n th? toàn b? database, ng??c ??i n?u có tham s? là tên database thì hi?n th? t?t c? các b?ng trong database. ??u tham s? là tên database và tên b?ng thì toàn b? tên các c?t trong b?ng s?????c hi?n th? ??u tham s? là tên database,tên b?ng,tên c?t thì thông tin c?a c?t s? ???c li?t kê. Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL 37 3.3.4. L?nh grant ??p quy?n cho ng??i dùng database Cú pháp : grant privilege on object to user[user-password] [opt] · privilege là quy?n c?p cho tài kho?n ng??i dùng bao g?m: § Alter : quy?n thay ??i b?ng và file ch? m?c § Creat : quy?n t?o b?ng vàdatabase § Delete : quy?n xoá d? li?u trong database § Drop : quy?n xoá database § Index : quy?n qu?n lý ch? m?c index § Insert : quy?n chèn d? li?u m?i vào § Select : quy?n xem d? li?u § Update : quy?n c?p nh?t d? li?u § All : t?t c? các quy?n · Object : databasename.table Có th? dùng databasename.* s? tác ??ng ??n m?i b?ng trên databasename. ??u ý: mysql cho phép c?p quy?n trên database ch?a có cho m?t ng??i dùng sau này s? t?o · User : username.host Ví d? rick@”%” · Password : n?u grant ta? m?i user ta ??t password b?ng cách thêm identyfied by password · Ví d? : t?o m?i user khtn v?i password cntt toàn quy?n trên database tên packet(packet có th? ch?a có) mysql>grant all on packet.* to khtn@”%” indentified by cntt Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL 38 3.3.5. L?nh Revoke L?nh này dùng ?? ???c quy?n ng??i dùng Cú pháp: revoke privilege on object from user 3.3.6. Ví d? v? t?o m?t c? s? d? li?u ??o c? s? d? li?u packet v?i username là khtn và password la cntt : $mysql>grant all on packet.* to khtn@??? identified by cntt; ??nh trên ???c th?c hi?n v?i t? cách qu?n tr? root c?a MySQL. (Thoát v? d?u nh?c l?nh $mysql>quit ) R?i gõ ti?p các l?nh sau: $mysql ?u khtn ?p cntt $ mysql>create database packet; $mysql>use packet (s? d?ng database tên packet) Bây gi? m?i truy v?n sql ??u lác ??ng lên database packet. 3.4. L?p trình MySQL trên ngôn ng? C M?t s? hàm th??ng dùng khi l?p trình v?i MySQL 4.4.1 mysql_init Kh?i t?o c?u trúc x? lý k?t n?i Cú pháp : MYSQL *mysql_init (MYSQL *old_connect) Tham s?: · old_connect =NULL :t?o k?t n?i m?i · old_connect khác NULL :tái k?t n?i v?i con tr? old_connect Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL 39 3.4.2 mysql_real_connection Th?c hi?n k?t n?i v?t lý ??n máy ch? n?i Mysql sever ?ang ch?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? : · Connection : tr????n c?u trúc MYSQL ???c kh?i t?o b?i hàm mysqlconnect. · Server_host : ??a ch? IP c?a máy ch? n?i d?ch vu mysql server ?ang ch?y. · sql_username,sql_pass : là ??i s? ch?ng th?c quy?n ??ng nh?p h? th?ng · db_name : tên c?a database · port_num : s? hi?u c?ng mysql dùng (m?c ??nh b?ng 0) · unit_socket_name ki?u socket (m?c ??nh NULL) · flag: ki?u giao th?c s? k?t n?i Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL 40 3.4.3 mysql_query Th?c thi câu l?nh sql query. Cú pháp: int mysql_query(MYSQL *connect,const char* query) Tham s?: · query : câu l?nh sql c?n th?c hi?n K?t qu? tr? v? · B?ng 0 n?u th?c thi thành công · B?ng 1 n?u th?t b?i 3.4.4. mysql_affected_rows Cho bi?t s? dòng b???nh h??ng sau l?nh query Cú pháp : my_ulonglong mysql_affected_rows(MYSQL *connection) Khi s? d?ng hàm này ph?i ép ki?u giá tr? tr? v? là unsigned long 3.4.5. mysql_store_result ??y giá tr? tr? v? sau khi g?i hàm mysql_query ??a vào c?u trúc MYSQL_RES Cú pháp : MYSQL_RES *mysql_store_result(MYSQL -*connection) 3.4.6. mysql_fetch_row ??y ra m?t dònh d? li?u t? MYSQL_RES . B?n c?ng có th? di chuy?n ??n 1 dòng d? li?u b?t kì nh? hai hàm mysql_row_seek và mysql_row_tell. Cú pháp : MYSQL_ROW mysql_fetch_row(MYSQL_RES *result) Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL 41 3.4.7. mysql_row_seek Di chuy?n ??n v? trí offset và tr? v? v? trí con tr? tr??c ?ó Cú pháp : MYSQL_ROW_OFFSET myql_row_seek( MYSQL_RES *result MYSQL_ROW_OFFSET offset) 3.4.8. mysql_free_result Gi?i phóng tài nguyên. Cú pháp: void mysql_free_result (MYSQL_RES *result) Ch??ng 4: L?p trình socket 42 Ch??ng 4: L?p trình socket 4.1. Gi?i thi?u v? l?p trình socket Khi vi?t ?ng ??ng và có nhu c?u t??ng tác v?i m?t ?ng ??ng khác, chúng ta th??ng d?a vào mô hình khách/ ch? (client/server). Theo mô hình này, ?ng ??ng có kh? ??ng ph?c ?? ho?c cung c?p nh?ng thông tin gì ?ó g?i là ?ng ??ng ch? (trình ch? hay server). ?ng ??ng g?i yêu c?u ??n trình ch? ???c ??i là ?ng ??ng khách (trình khách hay client). M? r?ng h?n n?a, server có th? là m?t máy tính v?i c?u hình ??nh còn client là r?t nhi?u máy con khác n?i vào máy ch?. Nh? v?y, tr??c khi yêu c?u m?t ??ch ?? c?a trình ch? th?c hi?n ?i?u gì ?ó, trình khách (client) ph?i có kh? ??ng k?t n?i ???c v?i trình ch?. Quá trình k?t n?i này ???c th?c hi?n thông qua m?t c? ch? tr?u t??ng hóa ??i là socket (??m ??ch là “c? ch??? c?m”). K?t n?i gi?a trình khách và trình ch? ???ng t? nh? vi?c c?m phích ?i?n vào ? c?m ?i?n. Trình khách th??ng ???c coi nh? phích c?m ?i?n, còn trình ch? ???c coi nh? ? c?m ?i?n, m?t ? c?m có th? c?m vào ?ó nhi?u phích ?i?n khác nhau ??ng nh? m?t máy ch? có th? k?t n?i và ph?c ?? cho r?t nhi?u máy khách. N?u k?t n?i thành công thì trình khách và trình ch? có th? trao ??i d? li?u v?i nhau, th?c hi?n các yêu c?u v? trao ??i d? li?u. 4.2. Nguyên lý ho?t ??ng ??a socket ??u tiên server m? m?t ? c?m socket. ?ây ch? là quá trình h? ?i?u hành phân b? tài nguyên ?? chu?n ?? k?t n?i. Dùng hàm socket() ?? t?o “? c?m” cho trình ch? server. Ti?p ??n, ????ng ??ng khách bi?t ??n ? c?m socket ??a trình ch?, ??n ph?i ??t cho server ch? m?t cái tên. N?u trên máy ??c b? và d?a vào h? th?ng file ??a UNIX hay Linux, ??n có th? ??t tên cho socket nh? là m?t tên file Ch??ng 4: L?p trình socket 43 (v?i ??y ?? ???ng d?n). ??n ch? c?n ??t tên còn ???ng d?n th??ng ??t trong th? ??c /tmp hay /usr/tmp. ??i v?i giao ti?p ??ng thông qua giao th?c TCP/IP tên ??a socket ???c thay th? b?ng khái ni?m c?ng (port). C?ng là m?t s? nguyên 2 bytes (kho?ng 65000 c?ng ??n có th? ch?n ??t cho socket) thay th? cho tên t?p tin. N?u trình khách và trình ch? n?m trên hai máy khách nhau, giao th?c TCP/IP còn yêu c?u xác ??nh thêm ??a ch? IP ?? k?t n?i ??n máy ch??? xa. Sau khi ?ã ch? ??nh tên ho?c s? hi?u port cho socket, ??n ??i hàm bind() ?? ràng bu?c hay ??t tên chính th?c cho socket ??a trình ch?. Ti?p ??n là ch? k?t n?i t? phía trình khách, trình ch? s? g?i hàm listen() ?? t?o hàng ??i nh?n các k?t n?i do trình khách ??a ??n. N?u có yêu c?u k?t n?i t? phía trình khách, trình ch? g?i hàm accept() ?? ti?p nh?n yêu c?u ??a trình khách. accept() ?? t?o m?t socket vô danh khác (unnamed socket), c?m k?t n?i ??a trình khách vào socket vô danh này và th?c hi?n quá trình chuy?n d? li?u trao ??i gi?a khách ch?. Socket ???c ??t tên tr??c ?ó v?n ti?p ??c ho?t ??ng ?? ch? nh?n yêu c?u t? trình khách khác. ??i giao ti?p ??c ghi thông qua socket ??ng ??n gi?n nh? vi?c dùng l?nh read/write ?? ??c ghi trên file. N?u file d?a vào s? mô ?? (file descriptor) ?? xác ??nh socket c?n ??c ghi cho hàm read/write. Phía trình khách ch? c?m ??o m?t socket vô danh, ch? ??nh tên và v? trí socket ??a trình ch?. Yêu c?u k?t n?i b?ng hàm connect() và ??c ghi, truy xu?t d? li?u ??a socket b?ng l?nh read/ write ho?c l?nh send/ recv. Ch??ng 4: L?p trình socket 44 4.3. L?p trình v?i socket 4.3.1. Các thu?c tính ??a socket Socket ???c ??nh ngh?a d?a trên 3 thành ph?n thu?c tính( attribute) ?ó là: vùng( domain), ki?u( type) và giao th?c( protocol). Socket còn c?n c? vào m?t ??a ch? k?t h?p v?i nó. ??a ch? này ph? thu?c vào vùng ??a socket và th??ng ???c ??i là dòng giao th?c (protocol family). Ví d? nh? dòng giao th?c theo h? th?ng file ??a Sun th??ng l?y tên file làm ???ng d?n ??a ch?, trong khi giao th?c TCP/IP ??i l?y ??a ch? IP (32 bits) ?? tham chi?u và th?c hi?n k?t n?i v?t lý. 4.3.1.1. Vùng( domain) Vùng dùng xác ??nh ?? t?ng ??ng n?i giao ti?p ??a Socket di?n ra. Vùng giao ti?p Socket thông ??ng nh?t hi?n nay là AF_INET hay gia ti?p socket theo chu?n ??ng Internet. Chu?n này s? d?ng ??a ch? IP ?? xác ??nh nút k?t n?i v?t lý trên ??ng. Ngoài ra, n?u ??n ch? c?n giao ti?p ??c b?, ??n có th? dùng vùng giao ti?p theo chu?n ??a Sun AF_UNIX, ?ó là dùng ???ng d?n và h? th?ng file ?? ??t tên và xác ??nh k?t n?i gi?a hai hay nhi?u ?ng ??ng. Ch?ng ??n nh? ví d? trên, chúng ta ?ã th?c hi?n b?ng cách ??t tên cho socket là server_socket, và Linux ?ã t?o ra file server_socket ngay trên th? ??c hi?n hành (hay trong th? ??c ??m /tmp tùy theo phiên ??n ??a Linux và UNIX). Tuy nhiên vùng giao ti?p AF_UNIX l?i ít ???c s? d?ng trong th?c t?. Ngày nay h?u h?t các ?ng ??ng ??ng s? d?ng socket ??u theo vùng AF_INET là ch? y?u. Chúng ta ?? bàn sâu v? phân vùng này ngay sau ?ây. Vùng AF_INET nh?? ?ã nêu s? d?ng ??c ch? IP (Internet Protocol) là m?t ch? ngh?a s? 32 bits ?? xác ??nh k?t n?i v?t lý. S? này th??ng ???c vi?t ? d?ng nhòm nh? 192.168.1.1, 203.162.42.1 Ch??ng 4: L?p trình socket 45 hay 127.0.0.1 là các ??a ch? IP h?p l?. ??a ch? IP có th? ???c ánh ?? thành m?t tên d? nh? ??n nh? www.yahoo.com hay www.microsoft.com, chúng ???c ??i là tên vùng (domain name). Vi?c ánh ?? ??a ch? IP thành tên vùng th??ng do máy ch? DNS (Domain Name Server) th?c hi?n. Tuy nhiên, ??n ??ng có th? t? ánh ?? tên vùng ngay trên mày ??c b? b?ng cách s? d?ng t?p tin d? li?u /etc/hosts. Socket theo dòng giao th?c IP s? d?ng port (s? hi?u c?ng) ?? ??t tên cho m?t socket. C?ng dùng ?? phân bi?t d? li?u g?i ??n ?? chuy?n cho ?ng ??ng nào. ??n hình dung n?u ??a ch? IP dùng ?? xác ??nh ???c máy hay n?i k?t n?i v?t lý ?? ??a d? li?u ??n thì c?ng là ??a ch? ph? dùng ?? g?i chính xác d? li?u ??n n?i ?ng ??ng c?n. ?i?u này do trên m?t máy có th? có nhi?u ?ng ??ng cùng ch?y và cùng s? d?ng trùng s? c?ng. Do c?ng là m?t giá tr? nguyên 2 bytes nân ??n có th? s? d?ng kho?ng 65000 c?ng ?? t? do ??t cho socket. Tr? các s? hi?u c?ng n? ti?ng nh? FTP, Web ?ã nêu ? ph?n trên ??n không nên s? d?ng, còn thì b?n có th? ch?n s? c?ng l?n ??n 1024??? m? cho socket ??a ?ung ??ng. M? socket theo AF_INET không khác m?y so v?i AF_UNIX ngoài vi?c ??t tên và ch? ??nh s? hi?u c?ng. Ví d?: /* M? socket theo k?t n?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”); server_address.sin_port = 1234; Ch??ng 4: L?p trình socket 46 Ngoài vùng giao ti?p AF_UNIX và AF_INET, ??n còn có th? g?p AF_ISO dành cho chu?n giao th?c ??ng theo ISO hay AF_NS dành cho h? th?ng ??ng Xerox, tuy nhiên chúng không ???c s? ??ng th??ng xuyên, cho nên ta ?? không ?? c?p ??n chi ti?t. 5.3.1.2. Ki?u socket(type) V?i m?i vùng domain ??a socket, ??n có th? có nhi?u cách giao ti?p. Có hai ki?u giao ti?p ki?u giao ti?p ?i?n hình ?s là giao ti?p m?t chi?u (SOCK_DGRAM) và giao ti?p ??o ??m hai chi?u (SOCK_STREAM). D? li?u khi chuy?n ?i ???c ?óng thành t?ng gói (data package hay datagram). SOCK_STREAM và SOCK_DGRAM qui ??nh cách chuy?n gói d? li?u theo hai cách nh? sau: SOCK_STREAM luôn gi? k?t n?i và b?o ??m gói thông tin g?i ?i ???c chuy?n ??n ?ích và nh?n ??y ??. Sau khi nh?n xong d? li?u, n?i nh?n ?? g?i thông tin ph?n h?i cho n?i g?i và quá trình g?i ch? ???c xác nh?n hoàn t?t khi nh?n ???c ??y ?? th?ng tin g?i nh?n ? c? hai phía khách ch?. Ki?u truy?n d? li? socket này trong vùng giao th?c ??ng Internet AF_INET ???c ?? là giao th?c truy?n TCP. Khi k?t h?p v?i c? ch? ??nh tuy?n theo ??a ch? IP chúng ???c ??i t?t là TCP/IP. K?t n?i và truy?n d? li?u theo cách này tuy ??o ??m nh?ng t?n nhi?u tài nguyên ??a h? th?ng do k?t n?i ph?i duy trì và theo dõi th??ng xuyên. SOCK_DGRAM cách g?i nh?n d? li?u này ch? di?n ra m?t chi?u. Trình khách, n?i g?i d? li?u ?i không c?n bi?t trình ch? (n?i nh?n) có nh?n ???c gói d? li?u ??y ?? hay không. Trình ch? khi nh?n ???c d? li?u ??ng không c?n thông báo hay xác nh?n v?i trình khách là d? li?u ?ã nh?n xong. Cách g?i này có v? không an toàn Ch??ng 4: L?p trình socket 47 nh?ng bù l?i th?c hi?n nhanh và không tiêu t?n nhi?u tài nguyên ?? duy trì k?t n?i và ki?m tra d? li?u nh?n g?i. Ki?u truy?n d? li?u socket này trong vùng giao th?c ??ng Internet AF_INET ???c ??i là giao th?c truy?n UDP (User Datagram Protocol). Khi k?t h?p v?i ?? ch? ??nh tuy?n theo ??c ch? IP chúng ???c ??i t?t là UDP/IP. Do tính ch?t không ??m ??o nên UDP ???c dùng nhi?u trong ??ng v?i ??c ?ích thông báo hay g?i tin tin ??n m?t nhóm máy tính nào ?ó trong ??ng. Nó ít khi ???c dùng trong các ??ch ?? c?n s? chính xác cao nh? g?i nh?n file hay k?t nói c? s? d? li?u. 4.3.1.3. Giao th?c ??a socket( protocol) Giao th?c là cách qui ??c g?i nh?n d? li?u gii?a hai hay nhi?u máy tính trong m?ng. Tùy theo m?i ki?u g?i nh?n d? li?u mà ta có các giao th?c khác nhau. Hi?n nay ki?u g?i nh?n theo giao th?c TCP và UDP là s? d?ng nhi?u nh?t. Tuy nhiên ?i?u này không b?t bu?c, TCP và UDP ch? là cách cài ??t cho vùng socket AF_INET theo giao ti?p Internet mà thôi. Ví d?, ban có th? cài ??t m?t giao th?c khác thay cho UDP áp ??ng cho cách chuy?n d? li?u không ??o ??m. Mõi ki?u socket ??u có giao th?c m?c ??nh áp ??ng cho nó. Trong t?t ?? các hàm socket sau này, tùy ch?n protocol n?u có yêu c?u ??n có th? ??t giá tr? 0??? yêu c?u s? d?ng giao th?c m?c ??nh. Trong các ví d??? ph?n sau ta ch? t?p trung nghiên c?u v? vùng socket AF_INET và ??a ch? IP thay cho vùng AF_UNIX. V?i AF_INET ??i ?ng ??ng ??ng ??a ??n ??u có th? giao ti?p ???c v?i nhau b?t k? chúng ?ang ch?y trên Windows, Linux hay UNIX. Ch??ng 4: L?p trình socket 48 4.3.2. T?o socket H? th?ng cung c?p cho ??n hàm socket() ?? t?o m?i m?t socket. Hàm socket() tr? v? s? nguyên int cho bi?t s? mô ?? hay ??nh danh dùng ?? truy c?p socket sau này. #include #include int socket(int domain, int type, int protocol); Tham s? domain ch? ??nh vùng hay ?? ??a ch? áp ??t cho socket. domain có th? nh?n m?t trong các giá tr? sau: AF_UNIX M? socket k?t n?i theo giao th?c file (xu?t nh?p socket d?a trên xu?t nh?p (file) ??a UNIX/Linux AF_INET M? socket theo giao th?c Internet (s? d?ng ??a ch? IP ?? k?t n?i) AF_IPX Vùng giao th?c IPX (??ng Novell) AF_IS Chu?n giao th?c ISO AF_NS Giao th?c Xerox Network System ??ng 4-1 Các giá tr? c?a domain H?u nh? ??n ch? s? d?ng AF_UNIX và AF_INET là chính. Các vùng giao th?c khác ?ã l?i th?i và hi?n nay ít còn ???c s? d?ng. Tham s? type trong hàm socket() dùng ch? ??nh ki?u giao tiép hay truy?n d? li?u ??a socket. ??n có th? ch? ??nh b?ng SOCK_STREAM dùng cho truy?n d? li?u ??o ??m ho?c SOCK_GRAM dùng cho truy?n không ??o ??m. Ch??ng 4: L?p trình socket 49 Tham s? protocol dùng ?? ch?n giao th?c áp ??ng cho ki?u socket( trong tr??ng h?p có nhi?u giao th?c áp ??ng cho m?t ki?u truy?n). Tuy nhiên ??n ch? c?n ??t giá tr? 0 (l?y giao th?c m?c ??nh). AF_INET ch? cài ??t m?t giao th?cduy nh?t cho các ki?u truy?n SOCK_STREAM và SOCK_DGRAM ?ó là TCP và UDP. N?u ??o socket thành công, hàm ?? tr? v? s? ??nh danh socket( descriptor). ??n s? d?ng s? ??nh danh này trong t?t ?? các l?i ??i truy xu?t socket khác nh? read/write. S? này t??ng t? nh? s? ??nh danh file mà b?n th??ng dùng ?? ??c và ghi file. ??c/ ghi vào socket ??ng ??ng ngh?a v?i g?i và nh?n d? li?u gi?a trình khách và trình ch?. 4.3.3. ??nh ??a ch? cho socket Khi socket ?ã ???c ??o ra, ??n ch? c?n ch? ??nh ??a ch? và tên cho socket. M?t socket c?n ph?i có ??a ch? và tên ?? các trình khách có th? tham chi?u ??n. Tùy m?i vùng giao th?c mà cách ?ánh ??a ch? có th? khác nhau. Ví d? khi ??n dùng vùng giao th?c AF_UNIX d?a trên h? th?ng t?p tin, ??a ch? socket ???c ??nh ngh?a trong c?u trúc sockaddr_un ??a file include sys/un.h nh? sau: struct sockaddr_un{ sa_family_t sun_family; /* AF_UNIX */ char sun_path []; /* ???ng d?n */ }; Ch??ng 4: L?p trình socket 50 Trong Linux sa_family_t ???c ??nh ngh?a là ki?u short. sun_path là ???ng d?n ?? t?o t?p tin socket. Vùng AF_UNIX ???c s? d?ng nhi?u trong các ?ng ??ng ??c b? trên ??t máy vì nó ph? thu?c vào ???ng d?n t?p tin tuy?t ??i ??a h? ?i?u hành. Th?c t? b?n ?? dùng AF_INET v?i c?u trúc ??a ch? ???c ??nh ngh?a trong sockadd_in ??a file include netinet/in.h nh? sau: struct sockadd_in{ short in sin_family; /* AF_INET */ unsigned short int sin_port; /* s? c?ng */ struct in_addr sin_addr; /* ??a ch? IP */ }; C?u trúc in_addr mô ?? ??a ch? IP ???c ??nh ngh?a nh? sau: struct in_addr{ unsigned long int s_addr; }; Nh? ??n th?y ??a ch? IP là m?t s? long (4 bytes hay 32 bits). ?ây ??ng chính là c?u trúc ??a ch? cho m?t ch??ng trình giao ti?p v?i nhau qua ??ng Internet. Trên quan ?i?m ??a l?p trình ?ng ??ng, cho dù socket có ??nh ??a ch? theo vùng nào ?i ch?ng n?a m?t khi ?ã m? ???c socket, ??n ch? c?n xem socket nh? m?t t?p tin và th?c hi?n thao tác read/write trên ?ó( ???ng ?ng v?i send và receive trên Winsock ??a Microsoft). Ch??ng 4: L?p trình socket 51 4.3.4. ??t tên cho socket Sau khi ?ã ??nh ??a ch?, ??n ch? c?n ??t tên cho socket. ??i v?i AF_UNIX ??c ch? chính là ???ng d?n, còn tên chính là tên t?p tin ?? t?o socket. ??i v?i vùng giao th?c AF_INET ??a ch? chính là s? IP còn tên chính là s? hi?u c?ng (sin_port) trong c?u trúc sockaddr_in. Khi ?ã gán thông tin ??y ?? cho socket ??n c?n ??i hàm bind() ?? rabgd bu?c nh?ng thông tin này cho socket ?ã m? ra tr??c ?ó. #include int byte (int socket, const struct sockaddr *address, size_t address_len); Hàm h? th?ng bind() s? d?ng các thông tin trong c?u trúc address ?? gán cho socket s? ??nh danh socketd tr? v? b?i hàm socket() tr??c ?ó. Tham s? address_len cho bi?t chièu dài ??a c?u trúc (struct sockaddr*) truy?n vào hàm. ??n l?u ý sockaddr là c?u trúc t?ng quát cho ?? sockaddr_un và sockaddr_in Khi ràng bu?c thành công bind() ?? tr? v? tr? 0. N?u không hàm ?? tr? v? -1 và errno ?? ch?a m?t trong các l?i sau: Mã l?i Mô ?? EBADF S? mô ?? file không h?p l? ENOTSOCK S? mô ?? file không dành cho socket EINVAL S? mô ?? file tham chi?u ??n m?t socket ?ã có. EADDRNOTAVAIL ??a ch? không xác ??nh EADDRINUSE ??a ch? và c?ng ràng bu?c ?ã b? m?t socket khác chi?m ??ng ??ng 4-2 Các mã l?i ??a hàm bind() Ch??ng 4: L?p trình socket 52 N?u ??n m? socket thu?c vùng AF_UNIX errno có th? nh?n thêm các l?i sau: Mã l?i Mô ?? EACCESS Không th? t?o file cho socket do không có quy?n ??o file ENOTDIR, ENAMETOOLONG Tên file không h?p l? ??ng 4-3 Các mã l?i ??a domain AF_UNIX Ràng bu?c tên socket là b??c quan tr?ng nh?t ?? socket ??a ??n có kh? ??ng nhìn th?y và truy xu?t ???c t? các ?ng ??ng bên ngoài. M?t socket n?u ch?a ???c ??t tên ??i là socket vô danh ( unnamed socket). 4.3.5. ??o hàng ??i cho socket ?? ?ón nh?n các k?t n?i chuy?n ??n, socket trình ch? ph?i ??o ra m?t hàng ??i (queue). ??c ?ích ??a hành ??i là ??u ??i các k?t n?i ch?a ???c trình ch? x? lý k?p. Hàm h? th?ng listen() ?? th?c hi?n công vi?c này. #include int listen(int socketd, int backlog); Tham s? socketd cho bi?t s? mô ?? socket c?n ??o hàng ??i. backlog là s? k?t n?i t?i ?a ???c phép ??a vào hàng ??i. N?u m?t k?t n?i ??n trình ch? trong khi ?ã có backlog k?t n?i tr??c ?ó ch?a x? lý thì k?t n?i này ?? b? th?t ??i. Lý do hàng ??i ?ã ??y, trình ch? server không mu?n nh?n thêm k?t n?i n?a. Thông th??ng backlog mang giá tr? 5 là s? trung bình kh? thi nh?t. Ch??ng 4: L?p trình socket 53 Hàm listen() ?? tr? v? 0 n?u ??o hàng ??i thành công, n?u th?t ??i tr? tr? v? s? là -1 và bi?n errno ?? ch?a tr? EBADF, EINVAL, ho?c ENOTSOCK. 4.3.6. Ch? và ch?p nh?n k?t n?i M?t khi ?ã t?o ???c socket, ??t tên cho nó và chu?n ?? xong hàng ??i ?? ti?p nh?n k?t n?i, công vi?c sau cùng là ch? k?t n?i ??a trình khách g?i ??n. ??n ??i hàm accept() ?? th?c hi?n công vi?c này. #include int accept(int socketd, struct sockaddr *address, size_t *address_len); Hàm h? th?ng accept() ?? tr? v? khi có m?t trình khách mu?n k?t n?i v?i ? c?m socket ch? ??nh s? mô ?? socketd. K?t n?i ??a trình khách tr??c h?t ???c ??t vào hàng ??i. Khi accept() phát hi?n ra có socket trong hàng ??i, nó s? t? ??ng l?y ??a ch? c?a máy khách ??t vào c?u trúc address, chi?u dài th?t s? c?a c?u trúc ??a ch? tr? v? trong bi?n address_len. Ti?p ??n accept() ??o ra m?t socket vô danh. K?t qu? tr? v? ??a accept() là s? mô ?? cho socket vô danh, ??n có th? s? d?ng s? này ?? liên ??c v?i trình khách. Socket vô danh m?i này có cùng ki?u v?i socket ??t tên ?ang l?ng nghe trên hàng ??i. Do c?u trúc struct sockaddr không có ??nh cho nên ??n c?n thi?t l?p kích th??c v?a ??? ?? ti?p nh?n ??a ch? trình khách. N?u ??a ch? trình khách dài h?n không gian ??n dành cho c?u trúc sockaddr, ph?n d? ra ?? ?? c?t ?? . Ch??ng 4: L?p trình socket 54 N?u ch?a có k?t n?i nào trong hàng ??i, accept() ?? d?ng ??i ch? – block( trình ch? s? không th?c thi các l?nh k? ti?p) cho ??n khi có k?t n?i ??a client g?i ??n. Bàn có th? thay ??i c? ch? ch? này b?ng cách ??i hàm fcntl() ?i?u ch?nh và thêm vào c? O_NONBLOCK cho socket nh? sau: int flags=fcntl(socketd, F_GETFL, 0); fcntl(socketd, F_SETFL, O_NONBLOCK | flags); Sau khi ??t c? này cho socket, hàm accept() ?? không d?ng ??i ch? khi ??n ??i nó. accept() ?? tr? v? ngay s? mô ?? cho socket n?u có k?t n?i trong hàng ??i, n?u không nó s? tr? v? -1 và th?c thi dòng l?nh k? ti?p. 4.3.7. Yêu c?u k?t n?i Trình ch? c?a ??n th??ng th?c hi?n ch?ac n?ng ??o, ??t tên, ch? k?t n?i b?nh các hàm socket(), bind(), và accept(). Tuy nhiên phía trình khách ??n gi?n h?n, ??n ch? c?n ??i hàm connect() ?? yêu c?u k?t n?i v?i trình ch?. connect() ???c khai báo nh? sau: #include int connnect(int socketd, const struct sockaddr *address, size_t address_len); Tham s? socketd là s? mô ?? tr? v? b?i hàm socket(). address là c?u trúc ??a ch? tr?? ??n socket ??a trình ch?. address_len là chi?u dài ??a bi?n c?u trúc address. K?t qu? tr? v? c?a hàm là 0 n?u thành công và ng??c ??i là -1. Trong tr??ng h?p -1, bi?n errno ?? ch?a m?t trong nh?ng tr? sau: Ch??ng 4: L?p trình socket 55 Mã l?i Mô ?? EBADF S? mô ?? socket truy?n cho hàm không h?p l? EALREADY Kêt n?i ?ã ???c thi?t l?p tr??c ?ó ETIMEOUT Quá th?i gian ch? k?t n?i ECONNREFUSED Trình ch? server t? ch?i k?t n?i ??ng 4-4 Mã l?i ??a hàm connect() N?u k?t n?i không thành công hàm connect() ?? có g?ng ch? k?t n?i ??i. N?u sau m?t s? l?n k?t n?i không thành công connect() ?? tr? v? l?i ETIMEOUT. ???ng t? accept() ??n có th? ??i ch? ?? ch? c?a hàm connect() b?ng cách ??i fcntl() ??t ??i c? ENONBLOCK. B?ng cách này, khi k?t n?i không thành công ? l?n ??u tiên, hàm connect() ?? không ch???? l?p ??i k?t n?i. Hàm ?? k?t thúc và tr? v? mã l?i ngay l?p t?c. 4.3.8. ?óng k?t n?i ???ng t? nh? x? lý trên file. ??n có trách nhi?m ?óng các k?t n?i ?ã t?o ra b?ng cách g? hàm close(). ?óng k?t nói ?? gi?i phóng tài nguyên và b?o ??m d? li?u ?ã chuy?n ??i hoàn t?t ? c? hai ??u g?i và nh?n. #include int close(int sockd); ??i v?i ?? hai phía trình khách và trình ch?, ??n nên ??i close() ?óng socket khi l?nh read tr? v? tr? 0 (không còn d? li?u ?? ??c). Ch??ng 4: L?p trình socket 56 Th??ng thì close() tr? v? ngay t?c kh?c, tuy nhiên có th? close() ?? ??i vào tr?ng thái ch? (block) n?u scoket ??a ??n thi?t l?p ki?u k?t n?i hai chi?u (SOCK_STREAM) cùng v?i tùy ch?n SOCK_LINGER và d? li?u ?ang ? tr?nh thái ch?a chuy?n h?t. Tùy ch?n SOCK_LINER ?? ???c ?? c?p sau. 4.3.9. Giao ti?p b?ng socket Chúng ta v?a xem qua các hàm h? th?ng dùng ??o và x? lý socket, gi? ?ây ta có th? tr? l?i nh?ng ví d? v? s? d?ng socket ?? th? ??n. Nh???ã nêu, ??n nên s? d?ng socket theo vùng AF_INET thay cho AF_UNIX. Socket d?a trên h? th?ng file th??ng g?p ph?i m?t s? v?n ?? nh? chúng ch? ???c truy xu?t trên h? th?ng file ch? ??nh ??a UNIX/Linux. Vi?c phân quy?n cho phép ??c ghi file ??ng là m?t v?n ??. Th??ng file socket ??o ra trong th? ??c hi?n hành ho?c th? ??c ??m /tmp và b?n ph?i cho phép h?u nh? toàn quy?n truy c?p các th? ??c này ?? socket ho?t ??ng. V?i AF_INET thì v?n ?? này không phát sinh, AF_INET d?a vào c?ng và ??a ch? IP ?? k?t n?i. ?ng ??ng ??a ??n trên Linux s? d?ng AF_INET ?? d? chuy?n ??i sang Windows h?n là AF_UNIX. Trong AF_INET, khi ??o m?i m?t socket trên trình ch?, ??n ph?i ch?n m?t s? hi?u c?ng ??t cho socket. Vi?c ch?n s? hi?u c?ng ph?i lo?i tr? nh?ng c?ng ?ã ???c các ?ng ??ng khác s? d?ng. ??n có th? tham kh?o t?p tin /etc/services, ?ây là t?p tin v?n ??n li?t kê danh sách các ??ch ?? và c?ng ?ã ???c ?? dành s? d?ng, s? c?ng ??a ??n không nên trùng v?i nh?ng s? ?ã có trong danh sách này. Ban ??ng không th? s? ??ng các c?ng nh? ??n 1024, chúng dành cho các ??ch ?? c?a h? th?ng. Giao ti?p ??ng không ?òi ??i ph?i k?t n?i v?i m?t h? th?ng ??ng th?t s?. Ngay trên m?t máy, ??n có th? s? d?ng giao ti?p ??ng ?? liên Ch??ng 4: L?p trình socket 57 ??c gi?a các ti?n trình ?ang ch?y. N?u c?n s? ??a ch? IP, ??n có th? s? ??ng s? 127.0.0.1, ?ây là ??a ch? IP “h?i qui” (loop back) th??ng dùng cho các ?ng ??ng ??c b?. V?i ??a ch? này, d? li?u g?i ?i ?? quay v? ?úng ??a ch? ban ??u, có ngh?a là máy g?i và máy nh?n ???c xem là m?t. Do tính ch?t ??c bi?t này, n?u trình khách trên máy ??c b? g?i d? li?u ??n trình ch? theo IP 127.0.0.1 thì trình ch? c?ng trên máy này ?? nh?n ???c d? li?u và h?i âm ??i. N?u máy ??n hòa ??ng, ??n nên ??i ng??i qu?n tr? ??ng ?? xin m?t ??a ch? IP thích h?p. ??a ch? m?ng IP th??ng khó nh?, ??n có th? yêu c?u socket ti?p nh?n m?t tên g?i nh? khách thay cho s? IP. Ch?ng ??n localhost hay my.computer.home thay cho 127.0.0.1. T?p tin v?n ??n /etc/hosts ch?a các danh sách chuy?n ??i này. Ví d?, ??n có th? dùng trình so?n th?o vi hay gnotepad s?a n?i dung t?p tin này nh? sau: 127.0.0.1 localhost 127.0.0.1 my.computer.home 207.46.131.91 www.microsoft.com Nh? ??n th?y, m?t ??a ch? IP có th? ánh ?? b?ng nhi?u tên khác nhau (??a ch? IP và tên th??ng cách nhau b?ng kho?ng tr?ng hay tab). Th??ng ??a ch? IP 127.0.0.1 ???c ??i là localhost và không có gì tr? ng?i n?u ??n d? ??nh ??t cho nó m?t cái tên khác ch?ng ??n nh? my.computer.home. Các ??a ch? Web mà b?n th??ng th?y nh? www.yahoo.com hay www.microsoft.com là các ??a ch? toàn c?u ???c qu?n lý b?i t? ch?c qu?c t? InterNIC. ?? bi?t m?t tên ??i ?ng v?i m?t ??a ch? IP có t?n ??i hay không, ??n có th? g?i l?nh ping nh? sau: Ch??ng 4: L?p trình socket 58 $ ping localhost PING (127.0.0.1) from 127.0.0.1 : 56 (84) bytes of data. 64 bytes from (127.0.0.1) : icmp_seq=0 ttl=255 time=67 usec 64 bytes from (127.0.0.1) : icmp_seq=0 ttl=255 time=48 usec 64 bytes from (127.0.0.1) : icmp_seq=0 ttl=255 time=51 usec 4.4. S? d?ng socket trong ?ng ??ng minh ??a Ph?n l?p trình socket này ?? ???c s? d?ng ?? th?c hi?n vi?c trao ??i thông tin gi?a thành ph?n client và server trong ph?n ?ng ??ng minh ??a. ?? th? thành ph?n client ?? dùng socket k?t n?i ??n thành ph?n server. Sau khi k?t n?i thành công client ?? g?i các l?nh nh? Start Capture, Stop Capture, Get Filter... ??n server, server nh?n các l?nh này, th?c hi?n xong nó s? tr? l?i k?t qu? th?c hi?n là thành công hay th?t ??i cho client. Ph?n 3: Xây d?ng ?ng d?ng th? nghi?m PacketCap 59 PH?N 3: XÂY D?NG ?NG ??NG TH? NGHI?M PACKETCAP Ch??ng 5. Phân tích và thi?t k? PacketCap Ch??ng 6. Cài ??t và th? nghi?m Ch??ng 7. T?ng k?t Ch??ng 5: Phân tích và thi?t k? PacketCap 60 Ch??ng 5: Phân tích và thi?t k? PacketCap 5.1. Kh?o sát hi?n t??ng Hi?n nay có r?t nhi?u ph?m m?m b?t gói tin nh? Tcpdump, Microsoft Network Monitor, Ethereal...Trong ?ó ph?n m?m ngu?n m? Ethereal n?i b?t v?i nhi?u ?u ?i?m nh? ch?y trên nhi?u h? ?i?u hành, h? tr? b?t gói tin theo nhi?u giao th?c khác nhau... Các ph?n m?m này có h?n ch? chung là khi chúng ?ang b?t các gói tin thì chúng ta không th? ??c, phân tích các thông tin b?t ???c, hay nói cách khác khi k?t thúc quá trình b?t các gói tin r?i thì m?i phân tích các thông tin này ???c. Nh?ng ph?n m?m này không h? tr? vi?c ghi k?t qu? vào c? s? d? li?u, mà ch? ??u vào các file có c?u trúc theo ??nh ??ng riêng ??a chúng. N?u file này có kích th??c l?n thì vi?c tìm ki?m, x? lý các thông tin ?? phân tích ?? r?t ch?m. Nh?ng ph?n m?m này ch? ch?y trên môi tr??ng desktop là ch? y?u do ?ó không cho phép c?u hình t? xa (ví d?: ???u ch?nh b? l?c , thi?t l?p ???ng d?n ??u tr? trên m?ng .t? xa. Hi?n nay các ph?n m?m này ?ang ???c phát tri?n sang mô hình client/server). Trong khi ?ó thì nhu c?u ng??i qu?n tr? m?ng r?t ?a d?ng: · ??n có thông tin v? l?u l??ng m?ng ??? ???u ch?nh b?ng thông theo yêu c?u c?a khách hàng c?ng nh? phát hi?n tr??c các s? c? n?u ???c. · Theo dõi hành ??ng truy c?p và xâm nh?p m?ng b?t h?p pháp. · ??t c? hành ??ng trên nên là online (phân tích và ???u khi?n) n?u ???c. Ch??ng 5: Phân tích và thi?t k? PacketCap 61 5.2. Phân tích và xác ??nh yêu c?u 5.2.1. Phân tích Vi?c trao ??i thông tin trên m?ng ngày càng nhi?u, nhu c?u c?a các nhà qu?n tr? m?ng ?òi h?i ngày càng ?a d?ng, c?n thi?t có m?t ch??ng trình có th? b?t gói tin cho phép phân tích, trích l?c thông tin ngay trong khi b?t (các ph?n m?m b?t gói tin hi?n nay không cho phép các nhà qu?n tr? s? d?ng thông tin thu th?p ???c khi quá trình b?t gói tin ?ang th?c hi?n).? ng ??ng này ?? l?y tên là PacketCap. Trên c? s? ?ó, m?t h? th?ng phân tán b?t gói tin, trích l?c và luu tr? vào c? s? d? li?u trên m?ng ???c xây d?ng ?? kh?c ph?c ph?n nào khuy?t ???m trên. H? th?ng cho phép nhà qu?n tr? s? d?ng thông tin ngay trong khi b?t, tùy ch?n v? trí l?u thông tin và cho phép c?u hình t? xa vi?c filter các gói tin.Các nhà qu?n tr? m?ng c?ng có th? dùng h? thông này làm c? s???? phát tri?n ti?p các ?ng d?ng v? qu?n tr? m?ng. 5.2.2. Xác ??nh yêu c?u ??c tiêu ??a ?? tài là m?t xây d?ng ?ng ??ng phân tán b?t các gói tin, ?ng này ?? cung c?p cho qu?n tr? m?ng nh?ng thông tin ph?c ?? cho vi?c theo dõi và phân tích thông tin ??ng, d?a trên nh?ng thông tin ???c cung c?p này cho phép qu?n tr? m?ng có th? xác ??nh ???c tình tr?ng ??a toàn b? h? th?ng ??ng. Ch??ng 5: Phân tích và thi?t k? PacketCap 62 ?ng ??ng PacketCap này ?? bao g?m các ch?c n?ng: STT Ch?c n?ng 1 B?t và phân tích ???c các gói tin ??a nh?ng protocol thông ??ng nh? TCP, UDP, ICMP, ARP... 2 Cho phép l?u tr? thông tin b?t ???c d??i ??ng c? s? d? li?u và ch?n h? qu?n tr? ?? s? d? li?u ?? ??u tr?. 3 Cho phép l?u tr? thông tin b?t theo c?u trúc file ??a Ethereal ho?c các ph?n m?m b?t gói tin khác. 4 ?i?u khi?n t? xa vi?c b?t các gói tin, bao g?m: · Kh?i ??ng b?t gói tin · D?ng b?t gói tin · L?y b? l?c hi?n th?i · K?t thúc ch??ng trình b?t gói tin ??ng 5-1 Xác ??nh yêu c?u Ch??ng 5: Phân tích và thi?t k? PacketCap 63 5.3. Các h??ng xây d?ng ?ng ??ng PacketCap Hi?n nay có r?t nhi?u ph?n m?m b?t gói tin có mã ngu?n m? nh? TCPTrace, TcpDump, WinDump, Ethereal,..trong s? này thì Ethereal là ph?n m?m t?t nh?t. Nó h? tr? r?t nhi?u protocol, h? tr? các ??nh d?ng l?? tr? c?a các ph?n m?m b?t gói tin khác, tích h?p thêm ph?n phân tích thông tin b?t ???c. Các ph?n m?m ngu?n m? này ??u s? d?ng th? vi?n l?p trình libcap ho?c winpcap(tên ??a phiên ??n libpcap ch?y trên h? ?i?u hành Windows). Do có r?t nhi?u ph?n m?m ngu?n m? h? tr? b?t gói tin nên ?? có 2 h??ng l?a ch?n ?? phát tri?n ?ng ??ng PacketCap: Ø H??ng 1: Tìm hi?u c?u trúc ??a ph?n m?m Ethereal, tích h?p thêm ch?c n?ng l?u các gói tin vào c? s? d? li?u và c?u hình t? xa vào ph?n m?m Ethereal. Ø ??óng 2: S? d?ng th? vi?n l?p trình ??ng libpcap ?? vi?t l?i toàn b? ?ng d?ng. 5.3.1. Phân tích h??ng phát tri?n d?a trên Ethereal · Thu?n l?i o Source code c?a Ethereal m? có th? d? dàng download trên nhi?u trang web. (www.ethereal.com) o Không c?n xây d?ng l?i các module b?t gói tin và filter cho ?ng d?ng. · Khó kh?n o Mã ngu?n Ethereal r?t nhi?u và khó hi?u rõ ???c do ?ó vi?c tích h?p thêm ch?c n?ng vào Ethereal là r?t ph?c t?p. o Ethereal ch? cung c?p free user guide không cung c?p developer guide do ?ó mu?n tìm hi?u v? ethereal ph?i ??c ??t c? source code. Ch??ng 5: Phân tích và thi?t k? PacketCap 64 5.3.2. Phân tích h??ng phát tri?n d?a trên libcap · Thu?n l?i : o Th? vi?n mã ngu?n m? libpcap download mi?n phí, ???c nhi?u nhà phát tri?n s? d?ng. Ph?n m?m b?t gói tin Tcpdump là m?t ?i?n hình. o Có nhi?u tài li?u h??ng d?n l?p trình o Có th? d? dàng xây d?ng ch??ng trình theo ý mu?n · Khó kh?n o Ph?i vi?t l?i t?t c? các module capture và filtering tr??c khi thêm vào các yêu c?u c?a lu?n v?n. 5.3.3. L?a ch?n h??ng phát tri?n PacketCap T? nh?ng phân tích khó kh?n và thu?n l?i ??a 2 h??ng phát tri?n ?ng ??ng PacketCap, chúng em quy?t ??nh l?a phát tri?n PacketCap theo h??ng th? 2, ngh?a là s? xây d?ng t? ??u ?ng ??ng b?t gói tin PacketCap d?a trên th? vi?n libpcap. Ch??ng 5: Phân tích và thi?t k? PacketCap 65 5.4. Các thành ph?n PacketCap PacketCap có h? ch?c n?ng ?i?u khi?n xa nên nó s? ???c xây d?ng theo mô hình ?ng ??ng Client/ Server. PacketCap g?m 3 thành ph?n: · Thành ph?n th?c hi?n vi?c l?ng nghe yêu c?u t? phía client và b?t gói tin: PCServer( PacketCap Server) · Thành ph?n ?i?u khi?n t? xa: PCManager. · Thành ph?n l?u tr?: PCStore, thành ph?n này ch? là ??i l?u tr? d? li?u b?t ???c. PCStore th? là m?t máy tính b?t kì có ch?y h? qu?n tr? ?? s? d? li?u MySQL. Trong mô hình client/ server thì PCServer là thành ph?n server, còn PCManager là client. PCServer m? c?ng 8088 và ch? k?t n?i, nh?n yêu c?u và th?c hi?n yêu c?u khi ?ã có client k?t n?i vào. PCManager ?? k?t n?i ??n PCServer và ?i?u khi?n ??i ho?t ??ng ??a PCServer. Hình 5-1 Các thành ph?n ??a PacketCap Ch??ng 5: Phân tích và thi?t k? PacketCap 66 5.5. Xây d?ng mô hình use case 5.5.1. Xác ??nh Actor và use case · Actor là ng??i dùng ch??ng trình PCManager (client) · Use case o Connect: Dùng PCManager k?t n?i vào PCServer o StartCapture: Yêu c?u PCServer b?t ??u th?c hi?n vi?c b?t gói tin. o StopCapture: Yêu c?u PCServer d?ng vi?c b?t gói tin o GetFilter: l?y b? l?c hi?n ??i o Terminate: yêu c?u PCServer k?t thúc. 5.5.2. Mô hình use case Hình 5-2 Mô hình use case Ch??ng 5: Phân tích và thi?t k? PacketCap 67 5.6. ??t ?? use case 5.6.1. Connect · Tên use case: Connect · Mô ?? Use-case này mô t? quá trình qu?n tr? viên yêu c?u PCManager(client) k?t n?i ?? qu?n tr? vi?c b?t gói tin ? máy server. · Dòng s? ki?n o Dòng s? ki?n chính Use-case b?t ??u khi có yêu c?u t? máy client xin k?t ??i. Máy client g?i yêu c?u ??n máy server. Sau khi máy server nh?n ???c yêu c?u, n?u ch?p nh?n yêu c?u máy server s? g?i v? s? port ?? giao ti?p, k?t n?i thanh công. ??u máy sever không nh?n yêu c?u ho?c có sai sót thì client thông báo l?i. o Dòng s? ki?n ph? Không có o Các dòng s? ki?n khác · Các yêu c?u ??c bi?t. o Không có. · ???u ki?n tiên quy?t. o Ph?i ??ng nh?p quy?n qu?n tr? m?i ???c th?c hi?n Use- Case này. o Máy sever c?n k?t n?i ph?i s?n sàng. · ???m m? r?ng o Không có. Ch??ng 5: Phân tích và thi?t k? PacketCap 68 5.6.2. StartCapture · Tên use case: StartCapture · Mô ?? Use-case này mô t? quá trình qu?n tr? viên yêu c?u máy client g?i l?nh y?u c?u server b?t ??u vi?c b?t gói tin. · Dòng s? ki?n o Dòng s? ki?n chính Use-case b?t ??u khi có yêu c?u t? máy client. Máy client g?i yêu c?u ??n máy server. Sau khi máy server nh?n ???c yêu c?u s? ki?m tra ti?n trình b?t gói tin ?ã ???c th?c thi ch?a. ??u ti?n trình ch?a th?c thi thì th?c thi vi?c b?t gói tin ??u vào c? s? d? li?u, thông báo v? máy client yêu c?u ?ã ???c ?áp ?ng. ??u ti?n trình ?ã ???c th?c thi thì g?i thông báo l?i v?. o Dòng s? ki?n ph? Ki?m tra CSDL ngày ?ó ?ã có ch?a. N?u có r?i thì m? ?? s? d? li?u ?? l?u. N?u ch?a có thì t?o c? s? d? li?u ??i. Qu?n tr? viên ch?nh s?a các thông tin liên quan ??n phòng ban, r?i c?p nh?t l?u l?i. Use-case k?t thúc. Máy client yêu c?u qu?n tr? nh?p c?u trúc filter gói tin. Ki?m tra tính h?p l? c?a c?u trúc filter. Ch??ng 5: Phân tích và thi?t k? PacketCap 69 o Các dòng s? ki?n khác Không có · Các yêu c?u ??c bi?t o Không có. · ???u ki?n tiên quy?t o Ph?i ??ng nh?p quy?n qu?n tr? m?i ???c th?c hi?n Use- Case này. · ???m m? r?ng o Không có. 5.6.3. StopCapture · Tên use case: StopCapture · Mô ??: Use-case này mô t? quá trình qu?n tr? viên yêu c?u máy client g?i ??n server yêu c?u k?t thúc b?t gói tin. · Dòng s? ki?n o Dòng s? ki?n chính Use-case b?t ??u khi có yêu c?u t? máy client. Máy client g?i yêu c?u ng?ng b?t gói tin ??n máy server. Sau khi máy server nh?n ???c yêu c?u s? ki?m tra ti?n trình b?t gói tin ?ã ???c th?c thi ch?a. ??u ti?n trình ch?a th?c thi thì th?c thi thì ng?ng ??t gói tin, thông báo v? máy client yêu c?u ?ã ???c ?áp ?ng. ??u ti?n trình ch?a ???c th?c thi thì g?i thông báo ??i v?. Ch??ng 5: Phân tích và thi?t k? PacketCap 70 o Dòng s? ki?n ph? ?óng c? s? d? li?u · Các dòng s? ki?n khác o Không có. · Các yêu c?u ??c bi?t o Không có. · ???u ki?n tiên quy?t Ph?i ??ng nh?p quy?n qu?n tr? m?i ???c th?c hi?n Use-Case này. · ???m m? r?ng o Không có. 5.6.4. GetFilter · Tên use case: GetFilter · Mô ?? Use-case này mô t? quá trình qu?n tr? viên yêu c?u máy client g?i yêu c?u cho server tr? l?i b? l?c hi?n th?i. · Dòng s? ki?n o Dòng s? ki?n chính Use-case b?t ??u khi có yêu c?u t? máy client yêu ??u thay l?y filter hi?n ??i ?ang dùng ?? b?t gói tin. Sau khi máy server nh?n ???c yêu c?u s? ki?m tra ti?n trình b?t gói tin ?ã ???c th?c thi ch?a. ??u ti?n trình ?ã th?c thi thì nó s? g?i tr? l?i cho client ??u ti?n trình ch?a ???c th?c thi thì g?i thông báo ??i v? cho client. Ch??ng 5: Phân tích và thi?t k? PacketCap 71 o Dòng s? ki?n ph? ?óng c? s? d? li?u o Các dòng s? ki?n khác · Các yêu c?u ??c bi?t o Không có. · ???u ki?n tiên quy?t: o Không có · ???m m? r?ng: o Không có. 5.6.5. Terminate · Tên use case: Terminate · Mô ??: Use-case này mô t? quá trình qu?n tr? viên yêu c?u máy client g?i ??n server yêu c?u server k?t thúc( thoát). · Dòng s? ki?n o Dòng s? ki?n chính Use-case b?t ??u khi có yêu c?u t? máy client. Máy client g?i yêu c?u k?t thúc ch??ng trình server. Sau khi máy server nh?n ???c yêu c?u s? ki?m tra n?u quá trình b?t gói tin ?ang ch?y thì nó s? ch?m d?t. Thoát ra kh?i ch??ng trình. (ch?m d?t) o Dòng s? ki?n ph? ?óng c? s? d? li?u · Các dòng s? ki?n khác o Không có. Ch??ng 5: Phân tích và thi?t k? PacketCap 72 · Các yêu c?u ??c bi?t o Không có. · ???u ki?n tiên quy?t Ph?i ??ng nh?p quy?n qu?n tr? m?i ???c th?c hi?n Use-Case này. · ???m m? r?ng o Không có. 5.7.Thi?t k? d? li?u 5.7.1. Phân tích các h??ng l?u tr? Có 3 h??ng · ???ng 1: Các máy client b?t gói tin trên các m?ng khác nhau và ?? li?u ???c truy?n v? l?u tr? trên m?t máy server. Hình 5-3 Mô hình l?u tr? 1 Ch??ng 5: Phân tích và thi?t k? PacketCap 73 o ?u ???m : ?? li?u ???c l?u t?p trung d? dàng cho vi?c x? lý sau này. o Khuy?t ???m Khi s? l??ng các gói tin b?t ???c quá nhi?u vi?c truy?n d? li?u v? máy server có th? làm b?n ???ng truy?n c?a m?ng. ?òi h?i dung l??ng l?u tr? r?t l?n ? máy server. · ???ng 2 : Gi?ng nh? h??ng 1 nh?ng thi?t l?p thêm m?t m?ng LAN gi?a các máy client và sever ?? truy?n d? li?u. Hình 5-4 Mô hình l?u tr? 2 o ?u ???m : Kh?c ph?c ???c khuy?t ???m c?a h??ng 1 o Khuy?t ???m T?n kém trong vi?c thi?t l?p m?ng LAN. Vi?c thi?t l?p m?ng LAN có th? g?p khó kh?n trong tr??ng ??p các máy client ? quá xa nhau. ?òi h?i dung l??ng l?u tr? r?t l?n ? máy server. Ch??ng 5: Phân tích và thi?t k? PacketCap 74 · ???ng 3 : L?u phân tán trên các máy client và ch? truy?n d? li?u ?? theo yêu c?u c?a client. Hình 5-5 Mô hình l?u tr? 3 o ?u ???m: Ch? truy?n nh?ng d? li?u ???c client yêu c?u nên ph?n nào kh?c ph?c ???c khuy?t ???m c?a h??ng 1. Vi?c l?u tr? phân tán s? không ?òi h?i dung l??ng l?u tr? ??n ? m?t máy. Vi?c xây d?ng ch??ng trình th?c hi?n l?u tr? phân tán s? ?? dàng h?n. o Khuy?t ?i?m ?ng ??ng PacketCap cho phép l?u tr? theo ?? 3 h?óng trên. Ch??ng 5: Phân tích và thi?t k? PacketCap 75 5.7.2. Thi?t k? ?? s? ?? li?u 5.7.2.1. Danh sách các ??i t??ng (table) STT Tên ??i t??ng Mô ?? 1 PACKET Thông tin chung t?t c? các gói tin b?t ???c 2 IP Thông tin v? IP header c?a gói tin 3 TCP Thông tin chi ti?t v? gói tin TCP 4 UDP Thông tin chi ti?t v? gói tin UDP 5 ICMP Thông tin chi ti?t v? gói tin ICMP 6 IGMP Thông tin chi ti?t v? gói tin IGMP 7 ARP Thông tin chi ti?t v? gói tin ARP ??ng 5-2 Danh sách các ??i t??ng Sau ?ây là mô t? chi ti?t m?t s? l?p ??i t??ng quan tr?ng c?a h? th?ng. 5.7.2.2 Table PACKET ST T Tên thu?c tính Ki?u d? li?u Ý ngh?a Ràng bu?c 1 Ma Chu?i (10) ??nh danh gói tin 2 Source Mac Chu?i (10) ??a ch? mac c?a máy g?i gói tin 3 Dest Mac Chu?i (10) ??a ch? mac c?a máy nh?n gói tin 4 Packetlength Chu?i (10) chi?u dài gói tin 5 Time Chu?i (20) Th?i gian nh?n gói tin 6 Data Chu?i (1000) D? li?u c? gói tin ??ng 5-3 Table PACKET Ch??ng 5: Phân tích và thi?t k? PacketCap 76 6.7.2.4. Table IP ST T Tên thu?c tính Ki?u d? li?u Ý ngh?a Ràng bu?c 1 Ma Chu?i (10) ??a ch? mac c?a máy g?i 2 Service Chu?i (10) Service c?a gói tin 3 ID Chu?i (10) ID c?a gói tin 4 TTL Chu?i (20) Time to live 5 ChecksumIP Chu?i (20) Checksum c?a IP 6 SourceIP Chu?i (20) ??a ch? IP ngu?n 7 Dest IP Chu?i (20) ??a ch? IP ?ích ??ng 5-4 Table IP 5.7.2.5. Table TCP ST T Tên thu?c tính Ki?u d? li?u Ý ngh?a Ràng bu?c 1 Ma Chu?i (10) ??nh danh gói tin 2 Source Port Chu?i (10) Port ngu?n 3 Dest Port Chu?i (10) Port ?ích 4 Seg No Chu?i (20) S? segment 5 Ack No Chu?i (20) Ack 6 Winsize Chu?i (20) Winsize 7 checksumTCP Chu?i (20) Checksum c?a TCP 8 Type Chu?i (20) ??ng 5-5 Table TCP Type : {"FIN ","SYN ","RST ","PUSH ","ACK ","URG ","ECE ","CWR "} Ch??ng 5: Phân tích và thi?t k? PacketCap 77 5.7.2.6. Table UDP ST T Tên thu?c tính Ki?u d? li?u Ý ngh?a Ràng bu?c 1 Ma Chu?i (10) ??nh danh gói tin 2 Source Port Chu?i (10) Port ngu?n 3 Dest Port Chu?i (10) Port ?ích 4 ChecksumUDP Chu?i (20) Checksum c?a UDP ??ng 5-6 Table UDP 5.7.2.7 Table ICMP ST T Tên thu?c tính Ki?u d? li?u Ý ngh?a Ràng bu?c 1 Ma Chu?i (10) ??nh danh gói tin 2 ICMP message group Chu?i (10) 3 Type Chu?i (10) 4 Code Chu?i (20) 5 Id Chu?i (20) 6 Seg No Chu?i (20) ??ng 5-7 Table ICMP Các h?ng và ý ngh?a c?a ICMP message group ( 0, "Echo Reply"}, { 3, "Destination Unreachable"}, { 4, "Source Quench"}, { 5, "Redirect Message"}, Ch??ng 5: Phân tích và thi?t k? PacketCap 78 { 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 T Tên thu?c tính Ki?u d? li?u Ý ngh?a Ràng bu?c 1 Ma Chu?i (10) ??nh danh gói tin 2 IGMP message group Chu?i (10) 3 Type Chu?i (10) 4 Response Time Chu?i (20) 5 Checksum Chu?i (20) 6 Group Addr Chu?i (20) ??ng 5-8 Table IGMP Ch??ng 5: Phân tích và thi?t k? PacketCap 79 Các h?ng và ý ngh?a c?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. "}, {0x26 ,"Multicast Router Termination. "} Ch??ng 5: Phân tích và thi?t k? PacketCap 80 5.7.2.9. Table ARP ST T Tên thu?c tính Ki?u d? li?u Ý ngh?a Ràng bu?c 1 Ma Chu?i (10) ??nh danh gói tin 2 ARP type Chu?i (10) 3 ARP Source IP Chu?i (10) 4 ARPDest IP Chu?i (20) 5 Group Addr Chu?i (20) ??ng 5-9 Table ARP ARP type: ARP Request frame ARP Reply frame RARP Request frame RARP Reply frame Unknown ARP Ch??ng 5: Phân tích và thi?t k? PacketCap 81 5.8. Xây d?ng PCServer( server), PCManager(client) 5.8.1. L?u ?? PCServer Hình 5-6 L?u ?? PCServer Ch??ng 5: Phân tích và thi?t k? PacketCap 82 5.8.2. L?u ?? PCManager( Client) Hình 5-7 L?u ?? PCManager Ch??ng 5: Phân tích và thi?t k? PacketCap 83 5.8.3. C?u trúc d? li?u trao ??i gi?a PCServer và PCManager Sau khi Client k?t n?i thành công v?i PCServer, PCManager và PCServer ?? trao ??i các thông ?i?p v?i nhau. ?? th? là PCManger s? g?i yêu c?u lên cho PCServer và sau khi th?c hi?n yêu c?u ??a PCManager, Server ?? g?i tr? l?i k?t qu? th?c hi?n cho Client. C?u trúc ??a m?i thông ?i?p nh? 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?i CmdCode là mã l?nh c?n g?i, các mã l?nh mày ???c ??nh ngh?a b?ng các h?ng ?? d? dàng cho vi?c l?p trình. Ch??ng 5: Phân tích và thi?t k? PacketCap 84 IPFilterType xác ??nh ki?u ??c theo ??a ch? IP, giá tr? c?a nó ???c ??nh ngh?a nh? 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?u IPFilterType=NO_FILTER ngh?a là không th?c hi?n vi?c ??c các gói tin theo ??a ch? IP, n?u IPFilterType khác 0 thì lúc ?ó b1,b2,b3,b4 s? là ??a ch? IP c?n ??c. B?n s? nguyên này ?? hình thành ??a ch? IP theo ??ng b1.b2.b3.b4 SOURCE_FILTER l?c theo ??a ch? IP ngu?n, các gói tin có ??a ch? ngu?n (n?i g?i) b?ng b1.b2.b3.b4 ?? ???c b?t ??i. DEST_FILTER l?c theo ??a ch? ?ích, các gói tin có ??a ch? ?ích (n?i ??n) b?ng b1.b2.b3.b4 s? ???c b?t ??i. PortFilterType xác ??nh ki?u ??c theo Port ??a ?ng ??ng, giá tr? c?a nó ???c ??nh ngh?a nh? ??a IPFilterType. SOURCE_OR_DEST nh?ng gói tin có ??a ch? ngu?n ho?c ?ích b?ng b1.b2.b3.b4 ?? ???c b?t. SOURCE_AND_DEST nh?ng gói tin có ??a ch? ngu?n b?ng b1.b2.b3.b4 ?? ???c b?t và nh?ng gói tin có ??a ch? ?ích b?ng b1.b2.b3.b4 ?? ???c b?t. T??ng t? ??í IPFilterType là PortFilterType Protocol là giao th?c c?n ??c, 0 có ngh?a là không ??c, 1 là l?c theo TCP... Ch??ng 5: Phân tích và thi?t k? PacketCap 85 Mb1, mb2, mb3,mb4 là 4 thành ph?n ??a ??a ch? IP ??a máy tính ch?y h? qu?n tr? ?? s? d? li?u mà ta mu?n l?u thông tin b?t ???c vào ?ó. NumberPacket xác ??nh s? gói tin c?n b?t. 5.9.Thi?t k? giao di?n PCManager( phiên ??n ch?y trên Windows) Mô ?? ?? th? ?? Tên ??i t??ng Ki?u ??i ???ng Ghi chú 1 IDC_STATIC Label IP 2 IDC_IPADDR_SOURCE IP Address Nh?p IP c?n filter 3 CboFilterIP Combobox L?a ch?n ki?u filter theo IP 4 IDC_STATIC Label Port 5 IDC_SOURCEPORT Textbox Nh?p port c?n filter 6 CboFilterPORT Combobox L?a ch?n ki?u filter theo IP Ch??ng 5: Phân tích và thi?t k? PacketCap 86 7 IDC_STATIC Label Protocol 8 CboProtocol Combobox Ch?n protocol c?n filter 9 IDC_STATIC Label Thông báo nh?p IP 10 IDC_IPADDR_MYSQL IP Address Ch?n máy ch?y MySQL 11 IDC_STATIC Label Number of packet 12 IDC_NUMBER Combo box ?? l??ng packet c?n b?t 13 IDC_STATIC Label Server IP 14 IDC_IPADDR_SERVER Textbox Nh?p ??a ch? IP máy PCServer c?n ???u khi?n 15 IDC_STATUS Label Báo tình tr?ng k?t n?i 16 BtnStart button B?t ??u b?t gói tin 17 BtnStop Button K?t thúc vi?c b?t gói tin 18 BtnGetFilter Button L?y thông tin filter hi?n th?i 19 BtnTermServer Button K?t thúc liên k?t v? server 20 BtnConnect Button K?t n?i ??n ma1y server 21 BtnExit Button Thoát kh?i ch??ng trình ??ng 5-10 Mô ?? màn hình PCManager Ch??ng 6: Cài ??t và th? nghi?m 87 Ch??ng 6: Cài ??t và th? nghi?m 6.1. Cài ??t Ph?n PCServer ?? ???c cài ??t trên môi tr??ng Linux, PCManager ?? ???c cài ??t trên ?? 2 môi tr??ng Linux và Windows. · Môi tr??ng cài ??t ?ng ??ng o Windows XP Professional o Linux Redhat 9.0 · Môi tr??ng l?p trình o C for Linux o Visual C++ 6.0 · Môi tr??ng cài ??t th? nghi?m o PCServer: Linux Redhat 9.0 o PCManager: Windows XP Professional o PCManager: Linux Redhat 9.0 · Các ph?n m?m h? tr? PCServer : MySQL, th? vi?n libpap Ch??ng 6: Cài ??t và th? nghi?m 88 6.2. Th? nghi?m 6.2.1. Mô hình th? nghi?m 1 Hình 6-1 Mô hình th? nghi?m 1 · Mô ??: PCServer và PCStore cùng ch?y trên m?t máy, PCManager và PCServer cùng trong m?t LAN segment · K?t qu?: o PCManager k?t n?i vào PCServer thành công o PCServer th?c hi?n t?t t?t ?? các yêu c?u do PCManager g?i ??n o PCServer ghi k?t qu? b?t ???c vào c? s? d? li?u MySQL thành công. Ch??ng 6: Cài ??t và th? nghi?m 89 6.2.2. Mô hình th? nghi?m 2 Hình 6-2 Mô hình th? nghi?m 2 · Mô ??: PCServer và PCStore có th? l?a ch?n ch?y trên cùng 1 máy ho?c ? 2 máy khác nhau. · K?t qu?: o PCManager k?t n?i vào PCServer thành công o PCServer th?c hi?n t?t t?t ?? các yêu c?u do PCManager g?i ??n o PCServer ghi k?t qu? b?t ???c vào c? s? d? li?u MySQL thành công. Ch??ng 6: Cài ??t và th? nghi?m 90 6.2.3. Mô hình th? nghi?m 3 Hình 6-3 Mô hình th? nghi?m 3 · Mô ?? PCServer và PCManager ch?y trên 2 ??ng LAN khác nhau ???c n?i qua 1 router. · K?t qu? Ch?a th? nghi?m ???c mô hình này do không có thi?t ??. Ch??ng 7: T?ng k?t 91 Ch??ng 7: T?ng k?t 7.1. K?t lu?n 7.1.1. K?t qu? ??t ???c Sau khi th?c hi?n xong ?? tài, chúng em ?ã thu ???c m?t s? k?t qu?: · Tìm hi?u ???c th? vi?n mã ngu?n m? libpcap và vi?t ???c ?ng ??ng b?t gói tin d?a vào th? vi?n này. ?ây là b? th? vi?n mã ngu?n m? h? tr? l?p trình ??ng c?p th?p ???c s? d?ng r?t nhi?u trong các ph?n m?m h? tr? b?t gói tin nh? TcpDump, TCPFlow, Ethereal... · Tìm hi?u h? qu?n tr? ?? s? d? li?u mã ngu?n m? MySQL. · Tìm hi?u v?n ?? l?p trình socket, multithread trên môi tr??ng Linux. · Xây d?ng ???c ?ng ??ng phân tán b?t các gói tin ph?c ?? cho vi?c phân tích thông tin ??ng. 7.1.2. ??n ch? · Ch?a th? b?t gói tin ??ng trên nhi?u card ??ng · ?? l??ng protocol có th? phân tích và trích ??c thông tin không nhi?u · Ch?a h? tr? ch?c n?ng phân tích thông tin t? nh?ng d? li?u ?ã b?t ???c. Ch??ng 7: T?ng k?t 92 7.2. H??ng phát tri?n Trong t??ng lai, ?ng ??ng PacketCap ?? ???c phát tri?n thêm nh?ng ch?c n?ng m?i và nâng c?p ch?c n?ng hi?n ??i ch?a ???c t?t. · H? tr? b?t các gói tin ??ng th?i trên nhi?u card ??ng · ??ng thêm s? l??ng protocol mà ch??ng trình có th? phân tích và trích ??c thông tin. · ?? tr? ??u thông tin b?t ???c theo các ??nh ??ng ??a Ethereal, TcpDump.. Ph? L?c 93 PH? L?C H??ng d?n s? d?ng PacketCap 1.Ch??ng trình PCServer ?? ch?y ch??ng trình Server ??n ch? c?n vào th? ??c ch?a ch??ng trình server và gõ l?nh ./pcserver thì ch??ng trình ?? ???c th?c thi. ?? thoát kh?i ch??ng trình PCServer ??n có th? dùng ch??ng trình Client g?i yêu c?u k?t thúc ch??ng trình PCServer, ho?c nh?n t? h?p phím Ctrl-C trên console ?ang ch?y PCserver. 2. Ch??ng trình PCManager 2.1. PCManager trên môi tr??ng Linux ???ng t? nh? khi ch?y PCServer, ??n vào th? ??c có ch?a ch??ng trình PCManager r?i gõ l?nh ./pcman.Ch??ng trình ?? yêu c?u nh?p ??a ch? IP ??a máy ch?y PCServer. N?u k?t n?i thành công thì ch??ng trình ?? hi?n th? các dòng thông báo, ??n ch? c?n nh?p các giá tr? hi?n th? trên màn hình là có th? ?i?u khi?n ???c ho?t ??ng ??a PCServer. Ph? L?c 94 2.2. PCManager trên môi tr??ng Windows Double click chu?t vào file PCManager.exe, giao di?n ??a ch??ng trình Hình 7-1 Màn hình PCManager ?ánh ??a ch? IP ??a PCServer vào ??c PCServerIP, click chu?t vào nút Connect n?u k?t n?i thành công thì dòng tr?ng thái phía d??i nút Connect ?? thông báo k?t qu? k?t n?i thành công hay không. N?u thành k?t n?i thành công thì các nút l?nh ?? có hi?u l?c. Lúc này ta m?i có th? th?c hi?n các thao tác ?i?u khi?n ???c. Ví d???? b?t t?t ?? các gói tin ?i qua card ??ng( ??a máy ?ang ch?y PCServer) và ??u k?t qu? vào chính máy tính ?ang ch?y PCServer thì ch? c?n click chu?t vào nút StartCapture ?? k?t thúc ch??ng trình PCServer thì click chu?t vào nút Terminate Server. Tài li?u tham kh?o 95 TÀI LI?U THAM KH?O [1] Nguy?n Ph??ng Lan – Hoàng ??c ??i, L?p trình Linux t?p 1, NXBGiáo D?c, H? 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 [6] SourceForge, www.sourceforge.net

Các file đính kèm theo tài liệu này:

  • pdftailieu.pdf
Tài liệu liên quan