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ý.pdf.
Trang 1BỘ MÔN CÔNG NGHỆ PHẢN MEM
GIANG QUOC MINH - HÒ PHẠM THÁI VINH
XÂY DỰNG ỨNG DỤNG BẮT GÓI TI N CHO
VI ỆC PHÂN TÍ CH THÔNG TIN MẠNG PHỤC
VU QUAN LY
KHOA LUAN CU NHAN TIN HOC
TP HCM, NAM 2005
Trang 2BỘ MÔN CÔNG NGHỆ PHẢN MEM
GIANG QUOC MINH _ - 0112016
HO PHAM THAI VINH - 0112081
XAY DUNG UNG DUNG BAT GOI TIN CHO
VIEC PHAN TiCH THONG TIN MANG PHUC
VU QUAN LY
KHOA LUAN GU NHAN TIN HOC
GIAO VIEN HUONG DAN GVC CAO DANG TAN
NIÊN KHÓA 2001 — 2005
Trang 3Tp.HCM, ngày tháng năm 2005
Trang 4Tp.HCM, ngày tháng năm 2005
Trang 5Chúng em xin chân thành cám ơn Ban giám hiệu, quý Thầy cô của
trường Đại Học Khoa Học “Tự Nhiên TP Hồ Chí Minh, đặc biệt là các Thay
cô trong Khoa Công nghệ Thông tin đã tận tình giảng day, trang bị cho chúng
em những kiến thức cân thiết, bổ ích trong suốt những năm học tập tại trường Chúng em xin chân thành cam on Thay Cao Đăng Tân, người Thầy đã tận tình quan tâm hướng dẫn, giúp đỡ chúng em frong suốt thời gian làm luận vă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
mẹ, cùng toàn thể gia đình, những người đã nuôi dạ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ị, bạ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
Trang 6Luận văn gồm có 3 phan và 7 chương
PHAN 1: TONG QUAN
Chương 1 Giới thiệu về đề tài
PHAN 2: TIM HIEU CAC VAN DE LAP TRINH Phan này giới thiệu
các vấn đề lập trình cơ bản nhất để xây dựng 1 ứng dụng có khả nă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 mạ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” của hầu hết các ứng dụng bắt gói tiĩ mã nguồn mở hiện nay
Chươngg 3 Giới thiệu MySQL, một hệ quản trị eơ 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 kỹ thuật lập trình soeket để viết các ứng dụng trên môi trường mạng
Phần 3 Xây dụng ứng đụng PacketCap Phần này sẽ 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 dụng bắt gói tin, lưu các kết quả bắt được vào cơ sở đữ liệu để phân tích các thông tin mạng
Chương 5 Phân tích, thiết kế ứng dụ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 hạn chế và hướng phát triển PacketCap trong tương lai
Trang 7MUC LUC
DANH SÁCH HÌNH - 5 E2 E221 3212521515151 51511 1101010111111 re 14
Mi ÿ(eï07 0c 15
PHAN 1: TONG QUAN ooececccccsescsssscssscscsesesececscssscscscsescscscsscecseacecscscseseseeeees 16 Chương I: Giới thiệu để tài << tk SE S3 3E 1 1 111 111151111111 1c 17 1.1 Đặt vẫn đỀ -. c-cc S201 011111212 112121211010101010 112g rg 17 1.2 Giới thiệu để tài 5c S1 111 1115121115121211 0111011111110 120110 18 1.3 YOu aU Cla dé tai ccc cccccccccesesscscscscsescscscscscsesesesscscscscscscseeseeeeees 19 PHAN 2: TIM HIEU CÁC VẦN ĐÉ LẬP TRÌNH . - 5-5: 20 Chương 2 : Thư viện lập trình mạng libpcap . - - -s<<<<<<<<<s3 21 "G0030 8000) 1 21
"0.0000.810 21
3.3 Các bước xây dựng chương trình sử dụng libpcap 22
Noo a a0 1n 4dAHŒHH)L ố 23
3.4.1 Chọn Interface( card mạng) .c 55c c3 sxsssrses 23 3.4.2 Mé device dé lang nghe( sniff) dữ liệu : - se sec 24 3.4.3 LOC 0 ae r.AÁ ằ hố 25
Chương 3: Hệ quản trị cơ sở dữ liệu MySQ(L -+ +<<52 34 3.1 Giới thiệu về MySQL .- cTẾÒ Sen E1 Ex S1 41515111111 1.1 cxrkg 34 S00 8/90 34
3.2.1 Cài Đặt MySQL từ các gói nhị phân . ‹ << << <<<<<<52 34 3.2.2 Cài đặt từ mã nguÖN :¿¿¿ ¿5e SE E11SESESE4E5151 E1 811151311111 ce 35 3.3 SU dung MYSQL cece ae 36
SN ni 6 na 36
3.3.2 Lệnh mysqÏadmIn 5 2+2 *****‡ *+*++++sssssssseeeeses 36 Noo 0/0027 36
SEN 0i na 37
3.3.5 Lệnh RevOkke - - - + + c2 S 1113211111111 cv ch nen 38 3.3:6 Ví dụ về tạo một cơ sở dữ liệu - ¿55 +52 +2 £2+s2Esezzzzzse2 38 3.4 Lập trình MySQL trên ngôn ngữ C Í - 5+ s+ssxseses 36 “nhà 8n .Ô 36 3.4.2 mysq]l_real_ COnn€CtIOII + scss +31 2333333311111 eerses 39 S nha, in oan e 40
SA), (0ì 0.v 0n 40
SG so, 8i 8i 40
SN 0ì, (08-302 40
3.4.7 MYSQ]_TOW_SCEK 744ŨỤ 41
SN 00), 0) 000(-8ì:- lì 41
Trang 8Ô0)000ï156.020000ìi0e2 (01 42
4.1 Giới thiệu về lập trình sOcket ¿<2 +22 £+E+E+E+E+EE+E+EzkzEererecxez 42
4.2 Nguyên lý hoạt động của socket -<+++c++++++ssssssssses 42
4.3.1 Các thuộc tính của socket - << << c c1 ss s1 ca 44
4.3.2 TẠO SOCK€K - cQ Q9 TH TH HH HH nu ch ca 48 4.3.3 Định địa chỉ cho soCK€LV - c 55c {1111 1111 1115 E1 sa 49 4.3.4 Đặt tên cho sOCK€( - cc C22119 211111 HH nh cv ca 51 4.3.5 Tao hang doi cho socket .ccsecssessseesseessesadpesesssesssesssesseeesseees 52
4.3.6 Cho va chap nhan két nO cece ceceseeddlelbecesesesesseeseesesesen 53
4.3.7 Yêu cầu kết nối ee eeceeeecceeseeseeseeseseeseeseeseeadbeceeceesseesedbnesessesteeeeeneeess 54
4.3.8 Đóng kết nối 5+ St HIẾU CN TH HH1 10101 co 55
4.3.9 Giao tiếp bằng socket 2Ö sac 5Ö ch HH 111g gưyi 56 4.4 Su dung socket trong ting dụng minh họa - - - 58
PHAN 3: XAY DUNG UNG DUNG THU NGHIEM PACKETCAP 59
Chương 5: Phân tích và thiết ké PacketCap 0tueccccceeeessessseseseseseeeeeeen 60
5.2 Phân tích và xác định yêu cầu .:¿¿szz£ ¿5e SE SESESEcESEEsrerrrkd 61
5.2.2 Xác định yêu câu c- 102 Ăn ST SE1 1111111111515 111111 1tr 61
5.3 Các hướng xây dựng ứng dụng Packetap <<<<<<<<<<+ 63 5.3.1 Phân tích hướng phát triển dựa trên Ethereal - s5: 63 5.3.2 Phân tích hướng phát triển dựa trên libcap - - «s5: 64 5.3.3 Lựa chọn hướng phát triển PacketCap . 5 2 +c+s+s+szsc: 64 5.4 Các thành phân PacketCap ¿+ + 1+1 SE E5 1E krrrkrered 65 5.5 Xây dựng mô hình use CaSe - c2 11111111 1111111 1 ra 66
5.5.1 Xác định Actor Va USC CASE .eccccecescssecccesecceccceussccsesseceeesseeeecsenes 66
5.6 Đặt fẢ US€ CS€ - c- QC Q9 HH TH TH HH KH TH ng rr 67
h2 r6 68 h9 09) 69
hô on 70
12
Trang 9sinh 72
5.7.1 Phân tích các hướng Ìưu trữ . -ccssssSSSSss*eeeses 72
5.7.2 Thiết kế cơ sở dư liỆu ¿- ¿52252 +c2Et2tEx2EEEEE2EE.rrrrrrre 75
5.7.2.1 Danh sách các đổi tượng (fabl) -cccccssse2 75
ZZÄ F00 z0 901 75 ZZZ XU hi aO 76
hy Y0 (9 76 0š Y0) 090) 4 77 5.7.2.7 Table ICMP 77 5.7.2.8 Table 6), 78 5Š IYU Si 4 80 5.8 Xây dựng PCServer( server), PCManager(client) z - 81
5.8.1 Luu dG PCServer cccceceecessesesessssesseseesessnsbiesetlaeessessesseseeteeneeess 81
5.8.3 Cấu trúc dit liéu trao déi gitta PCServer va PCManager 83 5.9.Thiết kế giao diện PCManager( phiên bản chạy trên Windows) S5 Chương 6: Cài đặt và thử nghiỆm ‹¿¿¿ 2225 55-55551125 3555555555555 xx2 87
524900830 0 88 6.2.1 Mô hình thử nghiệm 1.0.0 seeeeeseseeeeeceeceeaeaeesseeeeeeeseeeeeaaaeeas 88
6.2.3 Mô hình thử nghiỆm 3 - 25-32111111 3 13111 sk2 90 Chương 7: Tổng KẾT s62 s TÖt 1 xxx 11 111111 11011111111 11110111111 e0 9]
7.1 KẾT luận ốc -c218x: c1 c+cc2t x1111112112112121111111111112111111111111111111 1k 91
7.1.1 Kết quả đạt ƯỢC 5 - St 1111151111111 11 111151511111 1101 re 91
I5 na 91
7.2 Huong phat (61 oie eccccceccccsesescscscececscescscecscscecesesesvavscesacesesesessanes 92
PHỤ LỤC Hướng dẫn sử dụng PacketCap - 5c 55c 2x2 £zEreczed 93
I9, 5006009 1oa 201 ““ 93
II 0ì 003 1500§00)00x0)/ìì 1.0 93 2.1 PCManager trên môi trường LJnuX . 555555 << << s+<ssssss2 93
TÀI LIỆU THAM KHẢO 5:55 2221222122121221121212111221 111.2 95
Trang 10DANH SÁCH HÌNH
Hình 5-1 Các thành phần của PacketCap 5-5 52+s+E+s+E£szE£z£zczczc: 65
Hình 5-2 Mô hình use C€aS€ - c5 - cc 1229 SH SH vn chư sen 66 Hình 5-3 Mô hình lưu trữ l - - c << + E <5 S111 Ỳ vs ca 72 Hình 5-4 Mô hình lưu trữ 2 - + << c 5c S113 113 2110 1111 111 cv ca 73 Hình 5-5 Mô hình lưu trữ 3 - - - - << c 5c C11111 2110 1111 11k hy ca 74 Hình 5-6 Lưu đồ PCSerVer - - it t Sa 10128113153 151 1551515511381 13 1511555525 81
Hình 5-7 Luu dé PCManager c.cccccecceccsecescsesescecesescsescesscececcesescetssaueseseeas 82
Hình 6-1 Mô hình thử nghiệm Ì - << 5< + +++++++++++esseeessessseess S8 Hình 6-2 Mô hình thử nghiệm 2 << << << << + +++++++++++++eeeseeesseseseees 89 Hình 6-3 Mô hình thử nghiệm 3 - << << {5< + E2 +xsssseesseesseees 90
14
Trang 11DANH SÁCH BÁNG
Bảng 4-1 Các giá trỊ Của OTTA1T - << 5< << + ++++++++++++++++eeeeeseesssess 48
Bang 4-2 Các mã lỗi của hàm bind() - 5< S2 2s £+E£z£2E£zE££zeczezered 51
Bang 4-3 Các mã lỗi của domain AF_UNIX 5 5252 £2< 2 <cz£csczs2 52
Bang 4-4 Mã lỗi của hàm connect(() ¿+ 52 2222 E+E£+E£EE£zE£EEzE£ztzxczeree 55
Bảng 5-1 Xác định yêu cầu ¿- - < E1 S 111111 1 5111111111111 xk 62
Bảng 5-2 Danh sách các đối tượng - c5 k+Se S111 5151111111 1c 75 Bang 5-3 Table PACKET 75 Bang 5-4 Table IP 1 76 Dinh) 0 76 D0 no) 1009) 1 4 77
in.) i6) ¬ 78 Bang 5-9 Table ARP .ố 80 Bảng 5-10 Mô tả màn hình PCManager ‹⁄ - «2x - s5 <5 << S2 SỐ
Trang 12PHAN 1: TONG QUAN
+ Chương 1 Gidi thiéu dé tai
16
Trang 13Chương 1: Giới thiệu đề tài 1.1 Dat van dé
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 mạnh mẽ 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 điề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 đỏ
Trang 14Vậy giải pháp nào để giải quyết bài toán này 2
cho phép chúng ta thực hiện những bài toán lớn dựa trên các
hệ thông nhỏ gồm nhiều máy tính được nối mạng với nhau
e Hiện nay chúng ta lại có rất nhiều hệ thống máy tính nối mạng nhưng chưa sử dụng được hết khả năng tính toán của chúng
® Vớ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 ki
mạnh gấp nhiễu lần I 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)
Với những ưu điểm trên chúng tôi chọn đề tài “Ứng dụng thử nghiệm Grid Computing trong viéc phan tích thông tin mạng phục vụ quản lý”
1.2 Giới thiệu đề tài
Đề 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ý” là một đề lớn gồm 2 nhóm thực hiện
Nhóm thứ 1 sẽ 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 mạng dé phục vụ cho việc theo dõi và phân tích thông tin mạng (Phần I)
Nhóm thứ 2-sẽ tìm hiểu Grid Computing và xây dựng ứng dụng dé phan
tích hiện trạng của mạng dựa trên thông tin từ cơ sở đữ liệu do nhóm tht 1
xây dựng (Phần II)
18
Trang 151.3 Yêu câu của đề tài
e 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 mạng phục vụ quản lý
se Các gói tin sau khi bắt, được trích thông tin và lưu vào các cơ sở đữ liệu phân tán trên mạng theo nhu cầu của người quản trị
© _ Hệ thống cho phép cấu hình ứng dụng từ xa
®© Hồ trợ lưu kết quả bắt được theo định dạng của các ứng dụng bắt
g6i tin khac nhu Ethereal, TCPDump
Trang 16PHAN 2: TIM HIEU CAC VAN DE LAP TRINH
% Chương 2 Thư viện lập trình mạng libpcap s- Chương 3 Hệ quản trị cơ sở dữ liệu MySQL
%- Chương 4 Lập trình socket
20
Trang 17Chương 2 : Thư viện lập trình mạng libpcap
2.1 Giới thiệu libpcap
Libpcap là một thư viện mã nguồn mở hỗ trợ lập trình mạ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 bản mới nhất của libpcap là 0.9
2.2 Cài đặt thư viện libpcap
www.(cpdump.org , các phiên bản mới nhất của libpcap đều có ở địa chỉ này Giả sử bạn tải về gói libpcap-0.8.3:tar.tar, tiễn hành cài đặt:
e Gia nén g6i tar tar —xzvf libpcap-0.8.3.tar.tar
e Chuyén vao thu muc libpcap
Trang 183.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
Bước I: Xác định interface (card mạng) mà ta muốn bắt frame vào (Trong Linux, interface thường là eth0,eth1l 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
Bước 2: Khởi tạo pcap Cung cấp cho pcap biết interface nào trong
số các interface đã lay về ở bước trên sẽ được chon dé sniff
Bướ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 va port 23 .) ta phải tạo ra filter rồi biên dịch filter này để báo cho pcap biết bộ lọc nó sẽ dùng
Bước 4: Pcap thực thi việc sniff frames
Bướ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
22
Trang 193.4 Chi tiết các bước
3.4.1 Chọn Interface( card mạng)
Có 3 cách thiết lập devices để sniff các frames đữ liệu
s® Cách I : Cho người dùng nhập tên thiết bị từ dòng lệnh
Trong d6 argv[1] là tham số dòng lệnh đầu tiên
kiếm các interface tồn tại trên máy tính
Trang 20Trong 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ó
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 :
Trang 21®©_ snaplen cho biết số byte lớn nhất mà pcap có thê bắt frames
® promisc nếu đặt băng l 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 thi interface sẽ hoạt động ở chế độ
non promiscuos mode, trong chế độ này,pcap chỉ sniff những frame gửi đến máy
có cấu trúc như sau:
in pcaD-compIle(pcap_t *p, struct PDƒ program * f1, char *str,
int optimize, bpf_u_int32 netmask )
Tham sé dau tién 14 handle ctia phién lam viéc (pcap_t) Tham số thứ hai là tham số chỉ đến noi luu compile version cua filter str 1a 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
Trang 22int 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())
Dinh dang str m6 ta cho filter:
e Filter theo source ip
Vidu,” src net 172.168.8.8 "
e Filter theo dest ip:
Vidu,” dst net 172.168.8:8)"
e Filter theo source va dest ip
Vidu,” src and dst.net 172.168.8.8 "
e Filter theo source hay dest ip
Vi du.” srceor dst net 172.168.8.8 "
e Filter theo source port : Viduy” src port 23 "
e Filter theo dest port : Vidu,” dst port 23"
e Filter theo source va dest port Vidu,” src and dst port 23 "
e Filter theo source hay dest port Vidu,” src or dst port 172.168.8.8 "
26
Trang 23e Filter theo protocal Vidu,” tcp "
® Ngoài ra còn cé thé filter tng hop : Vidu,” dst net 172.168.8.8 and src port 23 tcp"
Ví dụ về filter đơn giản
#include <pcap.h>
char *dev;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t* descr;
const u_char *packet;
bpf_u_int32 maskp; /* subnet mask */
Trang 24if(pcap_compile(descr, &fp,” port 23 ”,0,netp) == -1)
Qua trinh bat frame that su :
O day ta dinh nghia mot thiết bị một thiết bị để chuan bi 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 peap_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 peap_pkthdr
í
struct timeval ts; time stamp
bpf_u_int32 caplen; length of portion present
}
28
Trang 25Vi du vé sniff frame su dung cau tric nay
const u_char *packet;
struct ether_header *eptr; /* net/ethernet.h */
u_char *ptr; /* printing out hardware header info */
Trang 26Chuong trinh nay 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(Q dùng để đóng phiên làm việc
Một kỹ thuật khác phức tạp hơn là dùng hàm pcap_ loop() cua
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, don gian hay dat la NULL
30
Trang 27Câ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 1a tham s6 cudi ctng cua ham pcap_loop truyén vào (thường là NULL) Tham số thứ hai là câu trúc pcap_pkthdr
fflush(stdout);
count++;
}
Trang 28int main(int argc,char **argv)
const u_char *packet;
struct pcap_pkthdr hdr; = /* pceap.h */
struct ether_header *eptr; /* net/ethernet.h */
Trang 29pcap_loop(descr,atoi(argv[1]),my_callback, NULL);
fprintf(stdout, "\nDone processing packets wheew!\n");
return 0;
Trang 30Chương 3: Hệ quản trị cơ 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ở
dữ liệu của riêng mình Tcx đã dựa trên tiếp cận lập trinh API cua mSQL va
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
Dia chi download MySQL : http://www.MySQL.com
3.2 Cai dat MySQL
3.2.1 Cài Đặt MySQL từ các gói nhị phân
Ta cài từng gói băng lệnh
rpm —Ivh <tên góI>
34
Trang 31Trình cài đặt script sẽ tự động tạo:
¢ Mot CSDL database mau
kiểm soat database cla MySQL
cho biết vị trí cdc file CSDL cla MySQL:
bindir=/usr/bin datadir=/var/lib/mysql pid_file=/var/lib/mysql/mysqld.pid mysql_daemon_user=mysql # Run mysq] as this user
e User mang tén mysql ding để đăng nhập và khởi động dịch
vu daemon cua trinh chu
3.2.2 Cai dat tir m4 nguén
® Giải nén file chứa mã nguồn
© _ Thực hiện cài đặt băng tổ hợp lệnh sau :
Trang 32Là công cụ chính của người quản trị cơ sở đữ liệu với 2 tham số -u,-
D- Với mysqladmin có một số lệnh quan tri sau
e create databasename >tao csdl
e drop database name :x6a co so dt ligu
© password newpassword : d6i mat khau
® s7/z/us: thông tin về trạng thái hiện hành của trình chủ
® yérsion cho biết thông tin về phiên bản của trình chủ my sdl 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 lại nếu có tham số là tên database thì
hién thi tat cd cdc bang trong database
Nế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ị
Nếu tham số là tên đatabase,tên bảng,tên cột thì thông tin của cột sẽ được liệt kê
36
Trang 333.3.4 Lénh grant
Cấp quyền cho người dùng database
Cú pháp :
grant privilege on object to user[user-password] [opt]
e privilege 14 quyén cap cho tai khoan ngudi ding bao gém:
§ Alter : quyên thay đối bảng và file chỉ mục
Lư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
e User : username.host
Ví dụ rick@”%”
e Password : néu grant tao méi user ta dat password bang
cach thém identyfied by password
e Vi du: tao mdi user khtn véi password cntt toan quyén trén database tén packet(packet có thể chưa có)
mysql>grant all on packet.* to khtn@”%” indentified by cntt
Trang 343.3.5 Lệnh Revoke
Lệnh này dùng để tướ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
Tạo cơ sở đữ liệu packet với username là khtn và password la cntt :
#mysal >*grant all on packet * to khtn@ ”%⁄” tdenHfied by cnH; Lệnh trên được thực hiện với tư cách quản tri root cua MySQL (Thoát về dâu nhắc lệnh $zmysgl >guit )
Rồi gõ tiếp các lệnh sau:
$mysql —u khtn —p cntt
$ mysql>create database packet;
$mysql>use packet (st dung database tén packet) Bây gid moi truy van sql déu lic dong 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
Trang 35unsigned port_num ,const char * unit_socket_name ,
unsigned int flag )
flag: kiéu giao thitc sé két néi
Trang 36®_ Băng 0 nếu thực thi thành công
e Bang l nếu thất bại
Lấy giá trị trả về sau khi gọi ham mysql_query đưa vào cấu trúc MYSQL RES
Cu phap :
MYSQL_ROW mysgql_fetch_row(MYSQL_RES *result)
40
Trang 38Chương 4: Lập trình socket
4.1 Giới thiệu về lập trình socket
Khi viết ứng dụng và có nhu cầu tương tác với một ứng dụ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 dụng có khả năng phục vụ hoặc cung cấp những thông tin gì đó gọi
là ứng dụng chủ (trình chủ hay server) Ứng dụng gửi yêu cầu đến trình chủ được gọi là ứng dụ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 mạ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 dịch vụ của trình chủ thực hiện điều gi
đó, trình khách (client) phải có khả nă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 gọi là socket (tạm dịch là “cơ chế ổ căm”) Kết nối giữa trình khách và trình chủ tươ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 cũng như một máy chủ có thê kết nối và
phục vụ 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 củ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 bị kết nỗi Ding ham socket() dé tao “6 cam” cho trình chủ server
Tiếp đến, để ứng dụng khách biết đến ổ căm socket của trình chủ, bạn
phải đặt cho server chủ một cái tên Nếu trên máy cục bộ và dựa vào hệ thống file của UNIX hay Linux, bạn có thê đặt tên cho socket như là một tên file
42
Trang 39(với đây đủ đường dẫn) Bạn chỉ cần đặt tên còn đường dẫn thường đặt trong
thư mục /tmp hay /usr/tmp Đối với giao tiếp mạng thông qua giao thức TCP/IP tên củ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 bạn có thê chon dat 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, ban goi ham bind()
để ràng buộc hay đặt tên chính thức cho socket củ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 acceptQ để tiếp nhận yêu cầu của trình khách
accep(Q sẽ tạo một socket vô danh khác (unnamed socket), cắm kết nối củ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 tục hoạt động dé
chờ nhận yêu câu từ trình khách Khác
Mọi giao tiếp đọc ghi thông qua socket cũng đơn giản như việc dùng lệnh read/write để đọc ehi trên file Nếu file dựa vào số mô tả (file descriptor)
dé x4c dinh socket can doc ghi cho ham read/write
Phía trình khách chỉ cầm tạo một socket vô danh, chỉ định tên và vị trí
socket của trình chủ Yêu cầu kết nỗi băng hàm connectQ và đọc ghi, truy
xuất dữ liệu của socket băng lệnh read/ write hoặc lệnh send[/ recv
Trang 404.3 Lập trình với socket
4.3.1 Các thuộc tính củ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 của
socket và thường được gọi là dòng giao thức (protocol family) Ví dụ như dòng giao thức theo hệ thống file của Sun thường lấy tên file làm đường dẫn địa chỉ, trong khi giao thức TCP/IP lạ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 hạ tầng mạng nơi giao tiếp của Socket diễn ra Vùng giao tiếp Socket thông dụng nhất hiện nay là AF_INET hay gia tiếp socket theo chuân mang Internet Chuan này
sử dụng địa chỉ IP để xác định nút kết nối vật lý trên mạng Ngoài
ra, nếu bạn chỉ cần gỉao tiếp cục bộ, bạn có thê dùng vùng giao tiếp
theo chuẩn củ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 dụng
Chang hạn như ví dụ trên, chúng ta đã thực hiện băng cách đặt tên cho socket la server_socket, va Linux da tao ra file server_socket
ngay trên thư mục hiện hành (hay trong thư mục tạm /tmp tùy theo phiên bản của Linux và UNIX) Tuy nhiên vùng giao tiếp AF_UNEX lại ít được sử dụng trong thực tế Ngày nay hầu hết các ứng dụng mạng sử dụng socket đều theo vùng AE_INET là chủ yếu Chúng ta sẽ bàn sâu về phân vùng này ngay sau đây
Vùng AF_INET như đã nêu sử dụng dic chi 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.I
44