Xây dựng ứng dụng bắt gói tin cho mạng quản lý (Giang Quốc Minh) - 2 potx - Pdf 21


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

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 ,

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

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)

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

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 <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 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

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.

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 <sys/socket.h>
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.

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 <sys/socket.h>
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

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

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


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status