TRUONG DAI HQC KHOA HQC TU NHIEN KHOA CONG NGHE THONG TIN BO MON CONG NGHE PHAN MEM GIANG QUOC MINH - HO PHAM THAI VINH
XÂY DỰNG ỨNG DỤNG BẮT GỐI TIN CHO
VIEC PHAN TICH THONG TIN MANG PHUC VU QUAN LY
KHOA LUAN CU NHAN TIN HOC
Trang 2TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN
BO MON CONG NGHE PHAN MEM
GIANG QUOC MINH - 0112016 HO PHAM THAI VINH - 0112081
XAY DUNG UNG DUNG BAT GOI TIN CHO VIỆC PHÂN TÍCH THƠNG.TTN MẠNG PHỤC
VU QUAN bY
KHÓA LUẬN CỬ NHÂN TIN HỌC GIÁO VIÊN HƯỚNG DẪN
GVC CAO ĐĂNG TÂN
Trang 3NHAN XET CUA GIAO VIEN HUONG DAN
Trang 4NHAN XET CUA GIAO VIEN PHAN BIEN
Trang 5LOI CAM ON
Chú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 Thầy cô trong Khoa Công nghệ Thông tin đã tận tình giảng dạy, 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 cả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‹ffong 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
Trang 6BO CUC CUA LUAN VAN
Luận văn gồm có 3 phan va 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 nay 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 tin mã nguồn mở hiện nay Chươngg 3 Giới thiệu MySQL, một hệ đuản trị cơ 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 soèket để 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 Z, 3, 4 dé 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ở dữ 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,
Trang 7Cac danh muc
MUC LUC
DANH SACH HINH ccsssessssessssscessseessnseessnecessneeesnecsnneessneessnseesnneessnnses DANH SACH BANG .ssssecssssessssseessseessnseessnecensnecesnseesuneeesneessnteesnnessnnses PHAN 1: TÔNG QUAN 22-222 He
Chương 1: Giới thiệu đề tài be
ha c.n
1.2 Giới thiệu đề tài
1.3 Yêu cầu của đề tài we
PHAN 2: TIM HIEU CAC VAN DE LAP TRIN: cà
Chương 2 : Thư viện lập trình mạng libpcap 21 2.1 Giới thiệu libpcap
2.2 Cài đặt thư viện libpcap . -
3.3 Các bước xây dựng chương trình sử dụng libpcap "
3.4 Chỉ tiết các bước -ccrtic nh HH Ề ê
3.4.1 Chọn Interface( card mạng) .¿ sềx¿ «5-5 55+ + sex
3.4.2 Mở device đề lắng nghe( sniff) dữ liệu: se
E6 uc
Chương 3: Hệ quản trị cơ sở dữ liệu MySQLL :¿ 5-5555 <<+<<++
3.1 Giới thiệu về MySQL - 3.2 Cài đặt MySQL 3.2.1 Cài Đặt MySQL từ các gói nhị phân 3.2.2 Cài đặt từ mã nguồn 3.3 Sử dụng MySQL 3.3.1 Lệnh mysdl " 3.3.2 Lệnh mysqÏadmii . - + + + *£+*E+E+*E£EsEekEekeskrserkrsee ES ni 0a, 00 o2 3.3.4 Lệnh grant 3.3.5 Lệnh Revoke
3.3:6 Ví dụ về tạo một cơ sở dữ liệu -ccccvceeerrrrrrrreee
Trang 8Cac danh muc
Chương 4: Lập trình SOCK€( .- 5 << E91 vn ng ng ng ryc 42
4.1 Giới thiệu về lập trình socket - 2 2s x+x+zx+zxrxczxerrecree 42
4.2 Nguyên lý hoạt động của SOCk€( ¿5+5 +++*+svE+vesesereerrers 42
4.3 Lập trình với socket tees
4.3.1 Các thuộc tính của SOCKet eee eeeeeesseeeseeceeeeseesseeeseesseeesseeeaee 44 4.3.1.1 Vùng( Oima1T)) . - c5 << + + SE * re re 44 5.3.1.2 Kiểu socket(type) - đ6 4.3.1.3 Giao thức cua socket( protocol)
4.3.2 Tạo sOCK€( - s-ĂSSssseeee 4.3.3 Định địa chỉ cho socket 4.3.4 Đặt tên cho socket
4.3.5 Tạo hàng đợi cho socke " 4.3.6 Chờ và chấp nhận kết nối -<ẤẾ 2ÌỀ 2.22 25c csccsccxcrccre 4.3.7 Yêu cầu kết nối +
4.3.8 Đóng kết nối
4.3.9 Giao tiếp bằng socket 4.4 Sử dụng socket trong ứng dụng minh họa.`¿ s5 «+ PHẦN 3: XÂY DỰNG ỨNG DỤNG THỬ NGHIỆM PACKETCAP
Chương 5: Phân tích và thiết kế PackefCap . -5- 552552 ©c2+c+zxccxeczz 5.1 Khảo sát hiện trạng .- 34 ng 5.2 Phân tích và xác định yêu cầu 5.2.1 Phân tích
5.2.2 Xác định yêu câu
5.3 Các hướng xây dựng ứng dụng PacketCap
5.3.1 Phân tích hướng phát triển dựa trên Ethereal
5.3.2 Phân tích hướng phát triển dựa trên libcap " 5.3.3 Lựa chọn hướng phát triển PacketCap .- :-2 5+-
5.4 Các thành phần PacketCap 22-©52©2ScSE2EEcEEEcEEEeEErrkrrkerrkee 5.5 Xây dựng mô hình use case "
Trang 9Cac danh muc
5.7.Thiết kế dữ liệu ¿- 2c 5£ SEE2EE2E122122171217121.21E 1.1 cxe
5.7.1 Phân tích các hướng lưu trữ - - 5+ + c+<£+<£++ces+++
5.7.2 Thiết kế cơ sở đư liệu -2- 2 5£ s¿+x+EE£E£2EC£EEvEEvrErrxerxerree
5.7.2.1 Danh sách các đổi tượng (table) "
5.7.2.2 Table PACKET -. 2- 22 ©+£2EE2EE£EE+EEEEEEEEEEEEErErrkrrree 6.7.24 Table IIP 2-22 ©2<+S<9EEEEEEEE2EE1271127171171211211 21.11 cye 5.7.2.5 Table TCP 5.7.2.6 Table UDP 5.7.2.7 Table ICMP 5.7.2.8 Table IGMP
5.7.2.9 Table ARP oo cece eeessceeteeseeeeeeeee
5.8 Xây dựng PCServer( server), PCManager(client) see
5.8.1 Lưu đồ PCServer coi HẦM eưeu 81
5.8.2 Luu dé PCManager( Client) c.cccccccccesihesessessesselibesessessseseseeeses 82
5.8.3 Cấu trúc đữ liệu trao đổi giữa PCServe£ vàPCManager .83
5.9.Thiết kế giao diện PCManager( phiên bảñ chạy trên Windows) 85
Chương 6: Cài đặt và thử nghiỆm ‹ss-« - -Ề+ 5 + ngư 87 6.1 Cai dat 6.2 Thử nghiệm 6.2.1 Mô hình thử nghiệm Ì -¿- + + *++£+k£**Eekrkrserkrske 88 6.2.2 Mô hình thử nghiệm 2 6.2.3 Mô hình thử nghiệm3 Chương 7: Tổng kết I] 7.1 Két luan 0 91 7.1.1 Kết quả đạt được 91 7.1.2 Hạn chết, 91
7.2 Hướng phát triỂn - 2 2 ++©+++EE2EEeEEEerEvtrxerrrerrrrrrerrree 92
PHỤ LỤC Hướng dẫn sử dụng PacketCap -. 5-5552 55c+>x+zscse2 93
1.Chương trình PCServer 2 Chương trình PCManager
2.1 PCManager trên môi trường Linux . 5 - «+ <+s<+<<+x+£+ 2.2 PCManager trên môi trường Windows
TÀI LIỆU THAM KHẢO .2-2©-<+cs+zs+zxscsee
Trang 10
Cac danh muc
DANH SACH HINH
Trang 11Cac danh muc
DANH SACH BANG
Bảng 4-1 Các giá trị của OTa11 - ¿<< + + xen reee Bảng 4-2 Các mã lỗi của hàm bind() ¿- + +5++>x+vextsrxezrterrssrresree Bảng 4-3 Các mã lỗi của domain AF_UNIX
Bảng 4-4 Mã lỗi của hàm connect(() 2-2 2s s52 +x+xezx+zx+xzxerscsee
Bảng 5-1 Xác định yêu cầu ¿2-52 52©2+2E+eEE+eExerEzrxerrrerxrerrerree
Bảng 5-2 Danh sách các đối tượng "
206W )0I.03.(0 4511 in y)0 0 1 Bang 5-5 Table TCP we Bảng 5-6 Table UDP 5 5S Sex serseeerex
Trang 12Phan 1: Téng quan
PHAN 1: TONG QUAN 3% Chương 1 Giới thiệu dé tai
Trang 13Chương 1: Giới thiệu đề tài
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 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ạñg 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 dé tang 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 14Chương 1: Giới thiệu đề tài
Vậy giải pháp nào để giải quyết bài tố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 hệ 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
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 kì 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 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 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 để phục vụ cho việc theo dõi và phân tích thông tin mạng (Phần J)
Nhóm thứ 2“sẽ tìm hiểu Grid Computing và xây dựng ứng dụng đề phân 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 thir 1
xây dựng (Phần II)
Trang 15Chương 1: Giới thiệu đề tài
1.3 Yêu cầu của đề tài
e XAy 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ý
© 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ị
e Hệ thống cho phép cấu hình ứng dng 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 gói tin khác như Ethereal, TCPDump
Trang 16Phần 2: Tìm hiểu các vấn dé lập trình
PHAN 2: TIM HIEU CAC VAN DE LAP TRINH
3+ Chương 2 Thư viện lập trình mạng libpcap ** Chương 3 Hệ quảntrị'cơ sở dữ liệu MySQL
3+ Chương 4 Lập trình socket
Trang 17Chương 2: Thư viện lập trình mang libpcap
Chươ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.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 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:fãr.tar; tiến hành cài đặt:
Trang 18Chương 2: Thư viện lập trình mang libpcap
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
Bước 1: Xác định interface (card mạ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_lookupdevQ 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 đã lấy về ở bước trên sẽ được chọn để 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 bat (vi dụ chỉ bắt framúe TCP/IP`có source IP
192.168.8.8 va port 23 .) ta phai tao ra filter rdi bién dich 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 trinheté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
Trang 19Chương 2: Thư viện lập trình mang libpcap
3.4 Chỉ 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 dữ liệu
© Cách 1 : Cho người dùng nhập tên thiết bị từ dòng lệnh #include <stdio.h> #include <pcap.h> int main(im 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
Trang 20Chương 2: Thư viện lập trình mang libpcap
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 : Ding ham pcap_findalldevs dé tim tất cả thiết bị sau đó đưa vào một mảng #include <stdio.h> #include <pcap.h> 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,iz0; d && i<10 ;d=d->next,i++) sprintf(devname[i],"%s",d->name); devcount=i; }
3.4.2 Mớ device để lắng nghe( sniff) dữ liệu
Trang 21Chương 2: Thư viện lập trình mang libpcap
¢ snaplen cho biết số byte lớn nhất mà pcap có thé bat frames ® promisc nếu đặt bằng 1 thì interface sẽ hoạt động trong chế độ
promiscuos mode Đây là chế độ libpcap sé sniff tat cA cdc 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 Lọ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ầõ đó ta thi str dung pcap_compile() pcap_setfilter() có cấu trúc nhu sau:
infpcap-compile(pcap_t† *p, struct bpƒ_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 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 22
Chương 2: Thư viện lập trình mang libpcap
int pcap_setfilter(pcap_t *p,struct_bpf_program *fp)
Tham số thứ nhất 14 handle quan 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 mé ta cho filter: e Filter theo source ip Vidu," src net 172.168.8.8 " e Filter theo dest ip : Vídụ,” dsf net 172.166:8:8:.” e Filter theo source va dest ip Ví dụ," src and dst net 172.168.8.8 ” e Filter theo source hay dest ip
Trang 23Chương 2: Thư viện lập trình mang libpcap
e Filter theo protocal Vidu,” tcp "
© Ngoai ra còn có thé filter tong hop :
Vidu," dst net 172.168.8.8 and src port 23 tcp" Vi du vé filter don gian
#include <pcap.h> char *dev;
char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr;
const u_char *packet;
struct pcap_pkthdr hảr; *pcap.h */
Trang 24Chương 2: Thư viện lập trình mang libpcap Ứ(pcap_compile(descr, &ƒp, ” port 23 ”,0,nefp) == -]) ( primf(stderr, "Error calling pcap_compile\n"); exit(1); } pcap_ seffilter(descr, &ƒp) 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 đượ€ 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 Ðcap_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 1a pointer chỉ đến câufrú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 tro đế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 bpf_u_int32; lebgth this packet (off wire)
Trang 25Chương 2: Thư viện lập trình mang libpcap Vi dụ về sniff frame sử dựng cấu trúc này #include <stdio.h> #include <stdlib.h> #include <pcap.h> #include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netinet/if_ether.h> int main(int argc, char **argv) ( int i; char *dev; char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr;
const u_char *packet;
struct pcap_pkthdr hảf; /* pcap.h */
struct ether_header *eptr; /* net/ethernet.h */
Trang 26Chương 2: Thư viện lập trình mang libpcap if(descr == NULL) ( printf("pcap_open_live(): %s\n",errbuf); exit(1); } packet = pcap_next(descr, &hdr); if(packet == NULL) ( printf("Didn't grab packet\n"); exit(1); } printf("Grabbed packet of length %d\n*hdr.len); printf(""Recieved at %s\n",ctime((const time_t*) &hdr.ts.tv_sec)); pcap_close(descr);
Chươ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 peap£ 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_ loopQ của libpcap Cấu trúc hai hàm này như sau :
intpcap_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
Trang 27
Chương 2: Thư viện lập trình mang libpcap
Cấu trúc của ham 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
Trang 28Chương 2: Thư viện lập trình mang libpcap int main(int arge,char **argv) { int i; char *dev; char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr;
const u_char *packet;
struct pcap_pkthdr hdr; /* pcap.h */
Trang 30Chương 3: Hệ quản trị cơ sở dữ liệu MySQL
Chươ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 trình API của mSQL và
ngôn ngữ SQL dé phát trién nén MySQL
MySQL hoat d6ng theo mé hinh client-server, rat đơ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 troný môi trường Web, Internet
Dia chi download MySQL : http://www.MySQL.com 3.2 Cai dat MySQL
Trang 31Chương 3: Hệ quản trị cơ sử dữ liệu MySQL
Trình cài đặt script sẽ tự động tạo:
đ Mt CSDL database mu
â Script init.d va mysql để khởi động và dừng dịch vụ kiểm soát database cla MySQL
© Script mysql chita 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 mysq| as this user ® User mang tên mysql dùng để đăng nhập và khởi động dịch vụ daemon của trình chủ Khởi động trình chủ bằng tay: ¢ Png nhap quyén user mysql: $isu mysql ® Khởi động trình chủ: # /etc/rc.d/init.d/mysql start 3.2.2 Cài đặt từ mã nguồn
$ Giải nén file chứa mã nguồn
Trang 32Chương 3: Hệ quản trị cơ sử dữ liệu MySQL 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 lệnh quản trị khác Cú pháp mysql —u username —p password databasename Vi du Truy xuất cơ sở đữ 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 quan trị cơ Sở đữ liệu với 2 tham số -u,- p- Với mysaladmin có một/số lệnh.quản trị sau
â create databasename tao csdl
 drop database name :x6a co s0 dữ liệu © passwordnewpassword : déi mat khau
© status: thong tin về trạng thái hiện hành của trình chủ ¢ yersion 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 lại nếu có tham số là tén database thì hiển thị tất cả các bảng trong database
Nếu tham số là tên đatabase 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 database,tên bảng,tên cột thì thông tin của cột sẽ được liệt kê
Trang 33
Chương 3: Hệ quản trị cơ sử dữ liệu MySQL
3.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]
¢ privilege 1a quyén cấp cho tài khoản người dùng bao gồm: = Alter : quyền thay đổi bang và file chỉ mục " Creat : quyền tạo bảng vàdatabase
" Delete : quyền xoá dữ liệu trong dafabase = Drop : quyền xoá database
“ Index : quyền quản lý chi muc index " Insert : quyền chèn đữ liệu mới vào " Select : quyền xem dữ liệu
" Update : quyền cập nhậtdữ liệu " All :đấ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
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 Vi du rick@”%”
¢ Password : néu grant tag mdi user ta dit password bang cach thém identyfied by password
© Vi du: tao mdi 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
Trang 34
Chương 3: Hệ quản trị cơ sử dữ liệu MySQL
3.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ở dữ liệu packet với username là khtn và password la cntt : $mysql> grant all on packet.* to khin@ ”%” identified by cntt; Lệ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 $mysal>quii )
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 giờ mọi truy vấn sqI đều lác déng 1én database packet 3.4 Lập trình MySQL trên ngôn ngữ C
Một số hàm thườnế đă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 =NĐULL :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
Trang 35Chương 3: Hệ quản trị cơ sử dữ liệu MySQL
3.4.2 mysql_real_connecfion
Thực hiện kết nối vật ly dén may chi noi Mysql sever dang chay 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 : dia chi IP cua“may)chu noi dich vu mysql server dang chay
sql_username,sql_pass: 1a/d6i s6 chimg thyc quyén dang
nhập hệ thống
đb_name:::tên của database
port_num : số hiệu công mysql dùng (mặc định bằng 0) unit sockét_name kiéu socket (mặc định NULL)
Jlag: kiểu giao thức sẽ kết nỗi
Trang 36Chương 3: Hệ quản trị cơ sử dữ liệu MySQL 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 : cau 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
¢ Bang 1 néu that bai
3.4.4 mysql_affected_rows
Cho biết số đò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 Lay giá.trị trả về sau khi gọi hàm mysql_query dua vào cấu trúc MYSQL RES Cũ pháp : MYSQL_RES *mysql_store_result(MYSQL -*connection) 3.4.6 mysql_fetch_row
Lay ra mét donh dit liéu tir MYSQL_RES Ban ciing cé thé di
Trang 37Chương 3: Hệ quản trị cơ sử dữ liệu MySQL
3.4.7 mysql_row_seek
Di chuyên đến vi tri offset va tra về vị trí con trỏ trước đó Cú pháp :
MYSOL ROW_OFFSET myql_row_seek(
Trang 38Chuong 4: Lap trinh socket
Chươ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 1a ratnhié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ủá trình chủ thực hiện điều gì
đó, 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 tfì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 phich điệấ 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 dit
liệu với nhau, thực hiện các yêu cầu về trao đổi đữ 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 Dùng hàm socketQ để tạo “ổ cắm” 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
Trang 39
Chuong 4: Lap trinh socket
(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 /usrtmp Đố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, bạn gọi hàm bindQ
dé rang buộc hay đặt tên chính thức cho socket của trình hủ Tiếp đến là chờ kết nối từ phía trình khách, trình chủ sẽ gọi hàm IiấtenQ để 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
acceptQ 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 để
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 ghi-trên file Nếu file đựa vào số mô ta (file descriptor) đề xác định.sockef cần đọc ghi cho hàm read/write
Phía trình khách chỉ cầm tạo một socket vô đanh, 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 40Chuong 4: Lap trinh socket
4.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) va giao thitc( 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 lay dia chi 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 mạng Internet Chuẩn này sử dụng địa chỉ IP dé 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 Chẳng hạn.nhữ'ví dụ trên, chúng ta đã thực hiện bằng cách đặt tên cHo soéket là server_socket, và Linux đã tạo 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_UNIX lại ít được sử dụng trong thực tế Ngày nay hầu hết các img dung mang str dung socket déu theo vùng AF_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 địc 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.1