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ý
Trang 1TRNG I H C KHOA H C T NHIÊNKHOA 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
QU N LÝ
KHOÁ LU N C NHÂN TIN H C
TP HCM,M 2005
Trang 2TRNG I H C KHOA H C T NHIÊNKHOA 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
QU N LÝ
KHÓA LU N C NHÂN TIN H C
GIÁO VIÊN HNG D N
GVC CAO NG TÂN
Trang 5L I CÁM N
Chúng em xin chân thành cám n Ban giám hi u, quý Th y cô atr ng i H c Khoa H c T Nhiên TP H Chí Minh, c bi t là các Th ycô trong Khoa Công ngh Thông tin ã t n tình gi ng y, trang cho chúngem 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ànhnh 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, ónggó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/2005Nhóm sinh viên th c hi nGiang Qu c Minh – H Ph m Thái Vinh
Trang 6B C CA LU N V N
Lu n v n g m có 3 ph n và 7 ch ng
PH N 1: T NG QUAN Chng 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 ucác v n l p trình c n nh t xây d ng 1 ng ng có kh ng b tcác gói tin và cho phép ng i dùng có th i u khi n t xa qua môitr ng ng.
Chng 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.
Chngg 3 Gi i thi u MySQL, m t h qu n tr s d li u t m trungc s d ng ph bi n nh t hi n nay.
Chng 4 Tìm hi u thu t l p trình socket vi t các ng ng trênmôi tr ng ng
Ph n 3 Xây ng ng ng PacketCap Ph n này s d ng các ki nth c ã tìm hi u chng 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
Chng 5 Phân tích, thi t k ng ng PacketCap
Chng 6 Cài t và th nghi m PacketCap
Chng 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.
Trang 84.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.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
Trang 95.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
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
Trang 12Ph n 1: T ng quan
PH N 1: T NG QUAN
Ch ng 1 Gi i thi u tài
Trang 13Vi c Công ngh thông tin và m ng Intenet phát tri n và ngày càng nhi ucá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 chotruy 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 ngthông t ng kh n ng áp ng thông tin, giao d ch v i khách hàng ng th itrá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 ymu 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àitoán này Trong u ki n kinh t n c ta thì không th trang b nh ng hth ng này c vì chúng quá t
Trang 14Ch ng 1: Gi i thi u tài
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áncho 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 ing nh ng ch a s d ng c h t kh n ng tính toán c achúng.
• i s l ng các máy tính l n thì vi c tri n khai GridComputing 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ínhcó 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 mGrid 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íchthô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 txa 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ântí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 1xây d ng (Ph n II).
Trang 16Ph n 2: Tìm hi u các v n l p trình
PH N 2: TÌM HI U CÁC V NL P TRÌNH
Ch ng 2 Th vi n l p trình ng libpcapCh ng 3 H qu n tr s d li u MySQLCh ng 4 L p trình socket
Trang 17Ch ng 2: Th vi n l p trình ng libpcap
Chng 2 : Th vi n l p trìnhng 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, chophé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 snifferpacket 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 chwww.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 n hành cài t:
Trang 18Ch ng 2: Th vi n l p trình ng libpcap
3.3 Các b c xây d ng ch ng trình s d ng libpcapCó 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áchàm pcap_lookupdev() c a th vi n libpcap l y t t c cácinteface.
• 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ácframe 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 filternà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 3là tùy ch n có th có ho c không.
Trang 19Ch ng 2: Th vi n l p trình ng libpcap
3.4 Chi ti t các b c
3.4.1 Ch n Interface( cardng)
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(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ìmki m các interface t n i trên máy tính.
#include <stdio.h>#include <pcap.h>
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);}
Trang 20int 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 && i<10 ;d=d->next,i++) sprintf(devname[i],"%s",d->name);
3.4.2 M devicel 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àmpcap_open_live() C u trúc hàm này nh sau :
pcap_t *pcap_open_lives(
Trang 21Ch ng 2: Th vi n l p trình ng libpcap
• 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 chpromiscuos mode ây là ch libpcap s sniff t t c các frametrên dây d n N u t b ng 0 thì interface s ho t ng chnon promiscuos mode, trong ch này,pcap ch sniff nh ngframe 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);
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 sth 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êncho 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 22Ch ng 2: Th vi n l p trình ng libpcap
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 hailà tham chi u ch n compile version c a filter ( ã c nh ngh atrong pcap_compile())
nh d ng str mô t cho filter:
• Filter theo source ip
Trang 23char *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);
}
Trang 24Hà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 thhai là pointer ch n c u trúc l u gi thông tin chung v frame ( th igian b t, chi u dài frame …) pcap_next tr v m t con tr có d ngu_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)
}
Trang 25Ch ng 2: Th vi n l p trình ng libpcap
Ví 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 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);
Trang 26Ch ng 2: Th vi n l p trình ng libpcap
if(descr == NULL) {
printf("pcap_open_live(): %s\n",errbuf); exit(1);
}
packet = pcap_next(descr,&hdr); if(packet == NULL)
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 alibpcap 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 hailà s frame s c sniff tr c khi thoát ra N u tham s này là s âm
Trang 27#include <stdio.h>#include <stdlib.h>#include <errno.h>
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++;}
Trang 28Ch ng 2: Th vi n l p trình ng libpcap
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);
Trang 29Ch ng 2: Th vi n l p trình ng libpcap
pcap_loop(descr,atoi(argv[1]),my_callback,NULL); fprintf(stdout,"\nDone processing packets wheew!\n"); return 0;
}
Trang 30MySQL ho t ng theo mô hình client-server, r t n gi n, không có cáctí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ãitrong Linux i v i các ng d ng cgi hay Perl trong môi tr ng Web,Internet.
a ch download MySQL : http://www.MySQL.com3.2 Cài t MySQL
3.2.1 Cài t MySQL t các gói nh phân
Trang 31$ make$ su
$ make intall
$scripts/mysql_intal.db
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ácnh qu n tr khác
• 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 shi 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 ttrong b ng s c hi n th
Trang 33Ch ng 3: H qu n tr c s d li u MySQL
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 ngtrê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 ngcách thêm identyfied by password
• Ví d : t o m i user khtn v i password cntt toàn quy n trêndatabase tên packet(packet có th ch a có)
mysql>grant all on packet.* to khtn@”%” indentified by cntt
Trang 34Ch 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
Trang 35unsigned 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àmmysqlconnect.
• 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 ngnh 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
Trang 36my_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
Trang 37void mysql_free_result (MYSQL_RES *result)
Trang 38Ch ng 4: L p trình socket
Chng 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ìnhnày, ng ng có kh ng ph c ho c cung c p nh ng thông tin gì ó g ilà 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, servercó 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ácn 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ìnhk 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 tnh vi c c m phích i n vào c m i n Trình khách th ng c coi nhphích c m i n, còn trình ch c coi nh c m i n, m t c m có th c mvà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 dli 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ànhphâ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
Trang 39Ch ng 4: L p trình socket
(v i y ng d n) n ch c n t tên còn ng d n th ng t trongth c /tmp hay /usr/tmp i v i giao ti p ng thông qua giao th cTCP/IP tên a socket c thay th b ng khái ni m c ng (port) C ng là m ts nguyên 2 bytes (kho ng 65000 c ng n có th ch n t cho socket) thayth cho tên t p tin N u trình khách và trình ch n m trên hai máy kháchnhau, giao th c TCP/IP còn yêu c u xác nh thêm a ch IP k t n i nmá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à chk 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 ncá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ìnhkhá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 atrì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 ngch 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ùngl 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, truyxu t d li u a socket b ng l nh read/ write ho c l nh send/ recv.
Trang 40ng 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 Socketdi 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àys d ng a ch IP xác nh nút k t n i v t lý trên ng Ngoàira, n u n ch c n giao ti p c b , n có th dùng vùng giao ti ptheo chu n a Sun AF_UNIX, ó là dùng ng d n và h th ngfile 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êncho socket là server_socket, và Linux ã t o ra file server_socketngay trên th c hi n hành (hay trong th c m /tmp tùy theophiên n a Linux và UNIX) Tuy nhiên vùng giao ti pAF_UNIX l i ít c s d ng trong th c t Ngày nay h u h t cácng 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.