Chng 3: H qun tr c s d liu MySQL
36
3.3. S dng MySQL
3.3.1. Lnh mysql
ây là lnh thâm nhp trình qun lý c s d liu và a ra các
nh qun tr khác .
Cú pháp
mysql u username p password databasename
Ví d
Truy xut c s d liu packet voi username la “pac” va
password la “ket”.
$ mysql –I pac –p ket packet
3.3.2. Lnh mysqladmin
Là công c chính ca ngi qun tr c s d liu vi 2 tham s -u,-
p . Vi mysqladmin có mt s lnh qun tr sau
• create databasename : to csdl
• drop database name :xóa c s d liu
• password newpassword : i mt khu
• status: thông tin v trng thái hin hành ca trình ch
• version cho bit thông tin v phiên bn ca trình ch my sql
3.3.3. Lnh mysqlshow
Lnh này cho bit thông tin v database. Nu không có tham s s
hin th toàn b database, ngc i nu có tham s là tên database thì
hin th tt c các bng trong database.
u tham s là tên database và tên bng thì toàn b tên các ct
trong bng sc hin th
u tham s là tên database,tên bng,tên ct thì thông tin ca ct s
c lit kê.
Chng 3: H qun tr c s d liu MySQL
3.3.5. Lnh Revoke
Lnh này dùng c quyn ngi dùng
Cú pháp:
revoke privilege on object from user
3.3.6. Ví d v to mt c s d liu
o c s d liu packet vi username là khtn và password la cntt :
$mysql>grant all on packet.* to khtn@ identified by cntt;
nh trên c thc hin vi t cách qun tr root ca MySQL.
(Thoát v du nhc lnh $mysql>quit )
Ri gõ tip các lnh sau:
$mysql u khtn p cntt
$ mysql>create database packet;
$mysql>use packet (s dng database tên packet)
Bây gi mi truy vn sql u lác ng lên database packet.
3.4. Lp trình MySQL trên ngôn ng C
Mt s hàm thng dùng khi lp trình vi MySQL
4.4.1 mysql_init
Khi to cu trúc x lý kt ni
Cú pháp :
MYSQL *mysql_init (MYSQL *old_connect)
Tham s:
• old_connect =NULL :to kt ni mi
• old_connect khác NULL :tái kt ni vi con tr old_connect
Chng 3: H qun tr c s d liu MySQL
39
3.4.2 mysql_real_connection
Thc hin kt ni vt lý n máy ch ni Mysql sever ang chy
Cú pháp :
MYSQL *mysql_real_connect(MYSQL *connection ,
my_ulonglong mysql_affected_rows(MYSQL *connection)
Khi s dng hàm này phi ép kiu giá tr tr v là unsigned long
3.4.5. mysql_store_result
y giá tr tr v sau khi gi hàm mysql_query a vào cu trúc
MYSQL_RES
Cú pháp :
MYSQL_RES *mysql_store_result(MYSQL -*connection)
3.4.6. mysql_fetch_row
y ra mt dònh d liu t MYSQL_RES . Bn cng có th di
chuyn n 1 dòng d liu bt kì nh hai hàm mysql_row_seek và
mysql_row_tell.
Cú pháp :
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
Chng 3: H qun tr c s d liu MySQL
41
3.4.7. mysql_row_seek
Di chuyn n v trí offset và tr v v trí con tr trc ó
Cú pháp :
MYSQL_ROW_OFFSET myql_row_seek(
MYSQL_RES *result MYSQL_ROW_OFFSET offset)
3.4.8. mysql_free_result
Gii phóng tài nguyên.
Cú pháp:
void mysql_free_result (MYSQL_RES *result)
Chng 4: Lp trình socket
42
Chng 4: Lp trình socket
4.1. Gii thiu v lp trình socket
s nguyên 2 bytes (khong 65000 cng n có th chn t cho socket) thay
th cho tên tp tin. Nu trình khách và trình ch nm trên hai máy khách
nhau, giao thc TCP/IP còn yêu cu xác nh thêm a ch IP kt ni n
máy ch xa.
Sau khi ã ch nh tên hoc s hiu port cho socket, n i hàm bind()
ràng buc hay t tên chính thc cho socket a trình ch. Tip n là ch
kt ni t phía trình khách, trình ch s gi hàm listen() to hàng i nhn
các kt ni do trình khách a n. Nu có yêu cu kt ni t phía trình
khách, trình ch gi hàm accept() tip nhn yêu cu a trình khách.
accept() to mt socket vô danh khác (unnamed socket), cm kt ni a
trình khách vào socket vô danh này và thc hin quá trình chuyn d liu trao
i gia khách ch. Socket c t tên trc ó vn tip c hot ng
ch nhn yêu cu t trình khách khác.
i giao tip c ghi thông qua socket ng n gin nh vic dùng
lnh read/write c ghi trên file. Nu file da vào s mô (file descriptor)
xác nh socket cn c ghi cho hàm read/write.
Phía trình khách ch cm o mt socket vô danh, ch nh tên và v trí
socket a trình ch. Yêu cu kt ni bng hàm connect() và c ghi, truy
xut d liu a socket bng lnh read/ write hoc lnh send/ recv.
Chng 4: Lp trình socket
44
4.3. Lp trình vi socket
4.3.1. Các thuc tính a socket
Socket c nh ngha da trên 3 thành phn thuc tính( attribute)
ó là: vùng( domain), kiu( type) và giao thc( protocol). Socket còn cn
c vào mt a ch kt hp vi nó. a ch này ph thuc vào vùng a
socket và thng c i là dòng giao thc (protocol family). Ví d
nh dòng giao thc theo h thng file a Sun thng ly tên file làm
ng dn a ch, trong khi giao thc TCP/IP i ly a ch IP (32 bits)
liu /etc/hosts.
Socket theo dòng giao thc IP s dng port (s hiu cng)
t tên cho mt socket. Cng dùng phân bit d liu gi n
chuyn cho ng ng nào. n hình dung nu a ch IP dùng
xác nh c máy hay ni kt ni vt lý a d liu n thì
cng là a ch ph dùng gi chính xác d liu n ni ng ng
cn. iu này do trên mt máy có th có nhiu ng ng cùng chy
và cùng s dng trùng s cng. Do cng là mt giá tr nguyên 2
bytes nân n có th s dng khong 65000 cng t do t cho
socket. Tr các s hiu cng n ting nh FTP, Web ã nêu phn
trên n không nên s dng, còn thì bn có th chn s cng ln
n 1024 m cho socket a ung ng.
M socket theo AF_INET không khác my so vi AF_UNIX
ngoài vic t tên và ch nh s hiu cng. Ví d:
/* M socket theo kt ni 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;
Chng 4: Lp trình socket
46
Ngoài vùng giao tip AF_UNIX và AF_INET, n còn có th
gp AF_ISO dành cho chun giao thc ng theo ISO hay AF_NS
dành cho h thng ng Xerox, tuy nhiên chúng không c s
ng thng xuyên, cho nên ta không cp n chi tit.
5.3.1.2. Kiu socket(type)
Vi mi vùng domain a socket, n có th có nhiu cách
giao tip. Có hai kiu giao tip kiu giao tip in hình s là giao
tip mt chiu (SOCK_DGRAM) và giao tip o m hai chiu
cao nh gi nhn file hay kt nói c s d liu.
4.3.1.3. Giao thc a socket( protocol)
Giao thc là cách qui c gi nhn d liu giia hai hay nhiu
máy tính trong mng. Tùy theo mi kiu gi nhn d liu mà ta có
các giao thc khác nhau. Hin nay kiu gi nhn theo giao thc
TCP và UDP là s dng nhiu nht. Tuy nhiên iu này không bt
buc, TCP và UDP ch là cách cài t cho vùng socket AF_INET
theo giao tip Internet mà thôi. Ví d, ban có th cài t mt giao
thc khác thay cho UDP áp ng cho cách chuyn d liu không
o m. Mõi kiu socket u có giao thc mc nh áp ng cho
nó. Trong tt các hàm socket sau này, tùy chn protocol nu có
yêu cu n có th t giá tr 0 yêu cu s dng giao thc mc
nh.
Trong các ví d phn sau ta ch tp trung nghiên cu v vùng
socket AF_INET và a ch IP thay cho vùng AF_UNIX. Vi
AF_INET i ng ng ng a n u có th giao tip c
vi nhau bt k chúng ang chy trên Windows, Linux hay UNIX.
Chng 4: Lp trình socket
48
4.3.2. To socket
H thng cung cp cho n hàm socket() to mi mt socket.
Hàm socket() tr v s nguyên int cho bit s mô hay nh danh dùng
truy cp socket sau này.
#include <sys/types.h>
#include <sys/socket.h>
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 nhn mt trong các giá tr sau:
AF_UNIX M socket kt ni theo giao thc file (xut nhp socket da
khác nhau.
Ví d khi n dùng vùng giao thc AF_UNIX da trên h thng tp
tin, a ch socket c nh ngha trong cu 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 dn */
};
Chng 4: Lp trình socket
50
Trong Linux sa_family_t c nh ngha là kiu short. sun_path là
ng dn to tp tin socket.
Vùng AF_UNIX c s dng nhiu trong các ng ng c b
trên t máy vì nó ph thuc vào ng dn tp tin tuyt i a h
iu hành.
Thc t bn dùng AF_INET vi cu trúc a ch c nh ngha
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 cng */
struct in_addr sin_addr; /* a ch IP */
};
Cu trúc in_addr mô a ch IP c nh ngha nh sau:
struct in_addr{
unsigned long int s_addr;
};
Nh n thy a ch IP là mt s long (4 bytes hay 32 bits). ây
ng chính là cu trúc a ch cho mt chng trình giao tip vi nhau
qua ng Internet.
ng 4-2 Các mã li a hàm bind()
Chng 4: Lp trình socket
52
Nu n m socket thuc vùng AF_UNIX errno có th nhn thêm
các li sau:
Mã li Mô
EACCESS Không th to file cho socket do không có
quyn o file
ENOTDIR,
ENAMETOOLONG
Tên file không hp l
ng 4-3 Các mã li a domain AF_UNIX
Ràng buc tên socket là bc quan trng nht socket a n có
kh ng nhìn thy và truy xut c t các ng ng bên ngoài.
Mt socket nu cha c t tên i là socket vô danh ( unnamed
socket).
4.3.5. o hàng i cho socket
ón nhn các kt ni chuyn n, socket trình ch phi o ra
mt hàng i (queue). c ích a hành i là u i các kt ni cha
c trình ch x lý kp. Hàm h thng listen() thc hin công vic
này.
#include <sys/socket.h>
int listen(int socketd, int backlog);
Tham s socketd cho bit s mô socket cn o hàng i. backlog
là s kt ni ti a c phép a vào hàng i. Nu mt kt ni n
trình ch trong khi ã có backlog kt ni trc ó cha x lý thì kt ni
này b tht i. Lý do hàng i ã y, trình ch server không mun
nhn thêm kt ni na. Thông thng backlog mang giá tr 5 là s trung
bình kh thi nht.
block( trình ch s không thc thi các lnh k tip) cho n khi có kt
ni a client gi n. Bàn có th thay i c ch ch này bng cách i
hàm fcntl() iu chnh 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 dng i ch
khi n i nó. accept() tr v ngay s mô cho socket nu có kt ni
trong hàng i, nu không nó s tr v -1 và thc thi dòng lnh k tip.
4.3.7. Yêu cu kt ni
Trình ch ca n thng thc hin chac nng o, t tên, ch kt
ni bnh các hàm socket(), bind(), và accept(). Tuy nhiên phía trình
khách n gin hn, n ch cn i hàm connect() yêu cu kt ni
vi trình ch. connect() c khai báo nh sau:
#include <sys/socket.h>
int connnect(int socketd, const struct sockaddr *address,
size_t address_len);
Tham s socketd là s mô tr v bi hàm socket(). address là cu
trúc a ch tr n socket a trình ch. address_len là chiu dài a
bin cu trúc address. Kt qu tr v ca hàm là 0 nu thành công và
ngc i là -1. Trong trng hp -1, bin errno cha mt trong nhng
tr sau:
Chng 4: Lp trình socket
55
Mã li Mô
EBADF S mô socket truyn cho hàm không hp l
EALREADY Kêt ni ã c thit lp trc ó
ETIMEOUT Quá thi gian ch kt ni
ECONNREFUSED Trình ch server t chi kt ni
nh chúng ch c truy xut trên h thng file ch nh a
UNIX/Linux. Vic phân quyn cho phép c ghi file ng là mt vn .
Thng file socket o ra trong th c hin hành hoc th c m
/tmp và bn phi cho phép hu nh toàn quyn truy cp các th c này
socket hot ng. Vi AF_INET thì vn này không phát sinh,
AF_INET da vào cng và a ch IP kt ni. ng ng a n trên
Linux s dng AF_INET d chuyn i sang Windows hn là
AF_UNIX.
Trong AF_INET, khi o mi mt socket trên trình ch, n phi
chn mt s hiu cng t cho socket. Vic chn s hiu cng phi loi
tr nhng cng ã c các ng ng khác s dng. n có th tham
kho tp tin /etc/services, ây là tp tin vn n lit kê danh sách các
ch và cng ã c dành s dng, s cng a n không nên
trùng vi nhng s ã có trong danh sách này. Ban ng không th s
ng các cng nh n 1024, chúng dành cho các ch ca h thng.
Giao tip ng không òi i phi kt ni vi mt h thng ng
tht s. Ngay trên mt máy, n có th s dng giao tip ng liên
Chng 4: Lp trình socket
57
c gia các tin trình ang chy. Nu cn s a ch IP, n có th s
ng s 127.0.0.1, ây là a ch IP “hi qui” (loop back) thng dùng
cho các ng ng c b. Vi a ch này, d liu gi i quay v úng
a ch ban u, có ngha là máy gi và máy nhn c xem là mt. Do
tính cht c bit này, nu trình khách trên máy c b gi d liu n
trình ch theo IP 127.0.0.1 thì trình ch cng trên máy này nhn c
d liu và hi âm i. Nu máy n hòa ng, n nên i ngi qun tr
ng xin mt a ch IP thích hp.
a ch mng IP thng khó nh, n có th yêu cu socket tip
nhn mt tên gi nh khách thay cho s IP. Chng n localhost hay
thc hin xong nó s tr li kt qu thc hin là thành công hay tht i
cho client.
Phn 3: Xây dng ng dng th nghim PacketCap
59
PHN 3: XÂY DNG NG NG TH NGHIM PACKETCAP
Chng 5. Phân tích và thit k PacketCap
Chng 6. Cài t và th nghim
Chng 7. Tng kt
Chng 5: Phân tích và thit k PacketCap
60
Chng 5: Phân tích và thit k PacketCap
5.1. Kho sát hin tng
Hin nay có rt nhiu phm mm bt gói tin nh Tcpdump, Microsoft
Network Monitor, Ethereal Trong ó phn mm ngun m Ethereal ni bt
vi nhiu u im nh chy trên nhiu h iu hành, h tr bt gói tin theo
nhiu giao thc khác nhau
Các phn mm này có hn ch chung là khi chúng ang bt các gói tin
thì chúng ta không th c, phân tích các thông tin bt c, hay nói cách
khác khi kt thúc quá trình bt các gói tin ri thì mi phân tích các thông tin
này c.
Nhng phn mm này không h tr vic ghi kt qu vào c s d liu,
mà ch u vào các file có cu trúc theo nh ng riêng a chúng. Nu file
này có kích thc ln thì vic tìm kim, x lý các thông tin phân tích rt
chm.
Nhng phn mm này ch chy trên môi trng desktop là ch yu do ó
không cho phép cu hình t xa (ví d: u chnh b lc , thit lp ng dn
u tr trên mng ….t xa. Hin nay các phn mm này ang c phát trin
sang mô hình client/server).