Tài liệu 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ý: TR??NG ??I H?C KHOA H?C T? NHIÊN
KHOA 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
XÂY D?NG ?NG ??NG B?T GÓI TIN CHO
VI?C PHÂN TÍCH THÔNG TIN ??NG PH?C
?? QU?N LÝ
KHOÁ LU?N C? NHÂN TIN H?C
TP. HCM, ??M 2005
TR??NG ??I H?C KHOA H?C T? NHIÊN
KHOA 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
XÂY D?NG ?NG ??NG B?T GÓI TIN CHO
VI?C PHÂN TÍCH THÔNG TIN ??NG PH?C
?? QU?N LÝ
KHÓA LU?N C? NHÂN TIN H?C
GIÁO VIÊN H??NG D?N
GVC CAO ??NG TÂN
NIÊN KHÓA 2001 – 2005
NH?N XÉT ??A GIÁO VIÊN H??NG D?N
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
......................
91 trang |
Chia sẻ: Khủng Long | Lượt xem: 887 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu 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ý, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TR??NG ??I H?C KHOA H?C T? NHIÊN
KHOA 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
XÂY D?NG ?NG ??NG B?T GÓI TIN CHO
VI?C PHÂN TÍCH THÔNG TIN ??NG PH?C
?? QU?N LÝ
KHOÁ LU?N C? NHÂN TIN H?C
TP. HCM, ??M 2005
TR??NG ??I H?C KHOA H?C T? NHIÊN
KHOA 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
XÂY D?NG ?NG ??NG B?T GÓI TIN CHO
VI?C PHÂN TÍCH THÔNG TIN ??NG PH?C
?? QU?N LÝ
KHÓA LU?N C? NHÂN TIN H?C
GIÁO VIÊN H??NG D?N
GVC CAO ??NG TÂN
NIÊN KHÓA 2001 – 2005
NH?N XÉT ??A GIÁO VIÊN H??NG D?N
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
Tp.HCM, ngày..tháng.n?m 2005
NH?N XÉT ??A GIÁO VIÊN PH?N BI?N
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
Tp.HCM, ngày..tháng.n?m 2005
L?I CÁM ?N
Chúng em xin chân thành cám ?n Ban giám hi?u, quý Th?y 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 ??y, trang ?? cho chúng
em 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à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?, ??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
B? C?C ??A LU?N V?N
Lu?n v?n g?m có 3 ph?n và 7 ch??ng
PH?N 1: T?NG QUAN
Ch??ng 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?u
các v?n ?? l?p trình c? ??n nh?t ?? xây d?ng 1??ng ??ng có kh? ??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 ??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” ??a h?u h?t các ?ng ??ng b?t gói tin mã ngu?n m? hi?n nay.
Ch??ngg 3. Gi?i thi?u MySQL, m?t h? qu?n tr? ?? 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 ?? thu?t l?p trình socket ?? vi?t các ?ng ??ng trên
môi tr??ng ??ng
Ph?n 3 Xây ??ng ?ng ??ng PacketCap. Ph?n này ?? 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 ??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
??ng.
Ch??ng 5. Phân tích, thi?t k???ng ??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 ??n ch? và h??ng phát tri?n PacketCap trong t??ng lai.
Các danh??c
11
M?C ??C
DANH SÁCH HÌNH.................................................................................... 14
DANH SÁCH ??NG .................................................................................. 15
PH?N 1: T?NG QUAN .............................................................................. 16
Ch??ng 1: Gi?i thi?u ?? tài .......................................................................... 17
1.1. ??t v?n ?? .......................................................................................... 17
1.2. Gi?i thi?u ?? tài.................................................................................. 18
1.3. Yêu c?u ??a ?? tài .............................................................................. 19
PH?N 2: TÌM HI?U CÁC V?N ?? L?P TRÌNH ...................................... 20
Ch??ng 2 : Th? vi?n l?p trình ??ng libpcap ................................................ 21
2.1. Gi?i thi?u libpcap............................................................................... 21
2.2. Cài ??t th? vi?n libpcap ..................................................................... 21
3.3. Các b??c xây d?ng ch??ng trình s? d?ng libpcap.............................. 22
3.4. Chi ti?t các b??c ................................................................................ 23
3.4.1. Ch?n Interface( card ??ng) ......................................................... 23
3.4.2. M? device ?? l?ng nghe( sniff) d? li?u......................................... 24
3.4.3. ??c traffic .................................................................................... 25
Ch??ng 3: H? qu?n tr? ?? s? d? li?u MySQL ............................................... 34
3.1. Gi?i thi?u v? MySQL......................................................................... 34
3.2. Cài ??t MySQL.................................................................................. 34
3.2.1. Cài ??t MySQL t? các gói nh? phân ............................................ 34
3.2.2. Cài ??t t? mã ngu?n..................................................................... 35
3.3. S? d?ng MySQL ................................................................................ 36
3.3.1. L?nh mysql .................................................................................. 36
3.3.2. L?nh mysqladmin ........................................................................ 36
3.3.3. L?nh mysqlshow.......................................................................... 36
3.3.4. L?nh grant.................................................................................... 37
3.3.5. L?nh Revoke................................................................................ 38
3.3.6. Ví d? v? t?o m?t c? s? d? li?u ..................................................... 38
3.4. L?p trình MySQL trên ngôn ng? C .................................................... 38
4.4.1 mysql_init..................................................................................... 38
3.4.2 mysql_real_connection ................................................................. 39
3.4.3 mysql_query ................................................................................. 40
3.4.4. mysql_affected_rows ................................................................... 40
3.4.5. mysql_store_result ....................................................................... 40
3.4.6. mysql_fetch_row ......................................................................... 40
3.4.7. mysql_row_seek .......................................................................... 41
3.4.8. mysql_free_result ........................................................................ 41
Các danh??c
12
Ch??ng 4: L?p trình socket .......................................................................... 42
4.1. Gi?i thi?u v? l?p trình socket ............................................................. 42
4.2. Nguyên lý ho?t ??ng ??a socket......................................................... 42
4.3. L?p trình v?i socket ........................................................................... 44
4.3.1. Các thu?c tính ??a socket............................................................. 44
4.3.1.1. Vùng( domain) ...................................................................... 44
5.3.1.2. Ki?u socket(type)................................................................... 46
4.3.1.3. Giao th?c ??a socket( protocol) ............................................. 47
4.3.2. ??o socket.................................................................................... 48
4.3.3. ??nh ??a ch? cho socket................................................................ 49
4.3.4. ??t tên cho socket........................................................................ 51
4.3.5. ??o hàng ??i cho socket .............................................................. 52
4.3.6. Ch? và ch?p nh?n k?t n?i............................................................. 53
4.3.7. Yêu c?u k?t n?i ............................................................................ 54
4.3.8. ?óng k?t n?i ................................................................................ 55
4.3.9. Giao ti?p b?ng socket................................................................... 56
4.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.1. Kh?o sát hi?n tr?ng ............................................................................ 60
5.2. Phân tích và xác ??nh yêu c?u ............................................................ 61
5.2.1. Phân tích ...................................................................................... 61
5.2.2. Xác ??nh yêu c?u ......................................................................... 61
5.3. Các h??ng xây d?ng ?ng ??ng PacketCap......................................... 63
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
5.6. ??t ?? use case.................................................................................... 67
5.6.1. Connect........................................................................................ 67
5.6.2. StartCapture................................................................................. 68
5.6.3. StopCapture ................................................................................. 69
5.6.4. GetFilter....................................................................................... 70
5.6.5. Terminate..................................................................................... 71
Các danh??c
13
5.7.Thi?t k? d? li?u ................................................................................... 72
5.7.1. Phân tích các h??ng l?u tr? ......................................................... 72
5.7.2. Thi?t k? ?? s? ?? li?u................................................................... 75
5.7.2.1. Danh sách các ??i t??ng (table)............................................. 75
5.7.2.2 Table PACKET ...................................................................... 75
6.7.2.4. Table IP ................................................................................. 76
5.7.2.5. Table TCP ............................................................................. 76
5.7.2.6. Table UDP............................................................................. 77
5.7.2.7 Table ICMP ............................................................................ 77
5.7.2.8 Table IGMP............................................................................ 78
5.7.2.9. Table ARP............................................................................. 80
5.8. Xây d?ng PCServer( server), PCManager(client)............................... 81
5.8.1. L?u ?? PCServer ......................................................................... 81
5.8.2. L?u ?? PCManager( Client)......................................................... 82
5.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
Ch??ng 6: Cài ??t và th? nghi?m................................................................. 87
6.1. Cài ??t................................................................................................ 87
6.2. Th? nghi?m........................................................................................ 88
6.2.1. Mô hình th? nghi?m 1.................................................................. 88
6.2.2. Mô hình th? nghi?m 2.................................................................. 89
6.2.3. Mô hình th? nghi?m 3.................................................................. 90
Ch??ng 7: T?ng k?t ..................................................................................... 91
7.1. K?t lu?n.............................................................................................. 91
7.1.1. K?t qu? ??t ???c.......................................................................... 91
7.1.2. ??n ch?........................................................................................ 91
7.2. H??ng phát tri?n ................................................................................ 92
PH? L?C H??ng d?n s? d?ng PacketCap ................................................... 93
1.Ch??ng trình PCServer.......................................................................... 93
2. Ch??ng trình PCManager ..................................................................... 93
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
Các danh??c
14
DANH SÁCH HÌNH
Hình 5-1 Các thành ph?n ??a PacketCap...................................................... 65
Hình 5-2 Mô hình use case ........................................................................... 66
Hình 5-3 Mô hình l?u tr? 1 .......................................................................... 72
Hình 5-4 Mô hình l?u tr? 2 .......................................................................... 73
Hình 5-5 Mô hình l?u tr? 3 .......................................................................... 74
Hình 5-6 L?u ?? PCServer........................................................................... 81
Hình 5-7 L?u ?? PCManager ....................................................................... 82
Hình 6-1 Mô hình th? nghi?m 1 ................................................................... 88
Hình 6-2 Mô hình th? nghi?m 2 ................................................................... 89
Hình 6-3 Mô hình th? nghi?m 3 ................................................................... 90
Các danh??c
15
DANH SÁCH ??NG
??ng 4-1 Các giá tr? c?a domain .................................................................. 48
??ng 4-2 Các mã l?i ??a hàm bind() ............................................................ 51
??ng 4-3 Các mã l?i ??a domain AF_UNIX ................................................ 52
??ng 4-4 Mã l?i ??a hàm connect().............................................................. 55
??ng 5-1 Xác ??nh yêu c?u........................................................................... 62
??ng 5-2 Danh sách các ??i t??ng ............................................................... 75
??ng 5-3 Table PACKET............................................................................. 75
??ng 5-4 Table IP ........................................................................................ 76
??ng 5-5 Table TCP..................................................................................... 76
??ng 5-6 Table UDP.................................................................................... 77
??ng 5-7 Table ICMP .................................................................................. 77
??ng 5-8 Table IGMP.................................................................................. 78
??ng 5-9 Table ARP .................................................................................... 80
??ng 5-10 Mô ?? màn hình PCManager ....................................................... 86
Ph?n 1: T?ng quan
16
PH?N 1: T?NG QUAN
Ch??ng 1. Gi?i thi?u ?? tài
Ch??ng 1: Gi?i thi?u ?? tài
17
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 ??nh ?? 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 ???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 ??.
Ch??ng 1: Gi?i thi?u ?? tài
18
??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á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
?? 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
??ng nh?ng ch?a s? d?ng ???c h?t kh? n?ng tính toán c?a
chúng.
· ??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ì
??nh g?p nhi?u l?n 1 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).
??i nh?ng ?u ???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 ??ng th? nghi?m Grid Computing trong vi?c phân tích
thô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 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
??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ân
tí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? 1
xây d?ng (Ph?n II).
Ch??ng 1: Gi?i thi?u ?? tài
19
1.3. Yêu c?u ??a ?? tài
· 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??ng ph?c ?? 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? d?
li?u phân tán trên m?ng theo nhu c?u c?a ng??i qu?n tr?.
· ?? th?ng cho phép c?u hình ?ng d?ng t? xa.
· H? tr? ??u k?t qu? b?t ???c theo ??nh ??ng ??a các ?ng ??ng b?t
gói tin khác nh? Ethereal, TCPDump...
Ph?n 2: Tìm hi?u các v?n ?? l?p trình
20
PH?N 2: TÌM HI?U CÁC V?N ?? L?P TRÌNH
Ch??ng 2. Th? vi?n l?p trình ??ng libpcap
Ch??ng 3. H? qu?n tr? ?? s? d? li?u MySQL
Ch??ng 4. L?p trình socket
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
21
Ch??ng 2 : Th? vi?n l?p trình ??ng 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, 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 ??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 ch?
www.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?nhànhcài ??t:
· Gi?i nén gói tar
tar –xzvf libpcap-0.8.3.tar.tar
· Chuy?n vào th? m?c libpcap
cd libpcap-0.8.3
· gõ l?nh ./configure
· Gõ l?nh make
· Gõ l?nh make install
N?u không có l?i gì x?y ra thì quá trình cài ??t ?ã hoàn t?t.
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
22
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
· ???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ác
hàm pcap_lookupdev() c?a th? vi?n libpcap ?? l?y t?t c? các
inteface.
· ???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ác
frame 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 filter
nà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 3
là tùy ch?n có th? có ho?c không.
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
23
3.4. Chi ti?t các b??c
3.4.1. Ch?n Interface( card??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
#include
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ìm
ki?m các interface t?n ??i trên máy tính.
#include
#include
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);
}
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
24
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 : Dùng hàm pcap_findalldevs ?? tìm t?t c? thi?t b? sau ?ó
??a vào m?t m?ng
#include
#include
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,i=0; d && inext,i++)
sprintf(devname[i],"%s",d->name);
devcount=i;
}
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 :
pcap_t *pcap_open_lives(
char* device,int snaplen,int promisc,int yo_ms,char *ebuf)
Tham s?:
· device là thi?t b???ã ???c ??nh ngh?a ? trên
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
25
· 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 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 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. ??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ào ?ó ta thì s? d?ng pcap_compile() pcap_setfilter()
có c?u trúc nh? sau:
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 s?
th? 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ê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.
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
26
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? hai
là tham chi?u ch?? ??n compile version c?a filter (?ã ???c ??nh ngh?a
trong pcap_compile())
??nh d?ng str mô t? cho filter:
· Filter theo source ip
Ví d? ," src net 172.168.8.8 "
· Filter theo dest ip :
Ví d? ," dst net 172.168.8.8 "
· Filter theo source và dest ip
Ví d? ," src and dst net 172.168.8.8 "
· Filter theo source hay dest ip
Ví d? ," src or dst net 172.168.8.8 "
· Filter theo source port :
Ví d? ," src port 23 "
· Filter theo dest port :
Ví d? ," dst port 23 "
· Filter theo source và dest port
Ví d? ," src and dst port 23 "
· Filter theo source hay dest port
Ví d? ," src or dst port 172.168.8.8 "
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
27
· Filter theo protocal
Ví d? ," tcp "
· Ngoài ra còn có th? filter t?ng h?p :
Ví d? ," dst net 172.168.8.8 and src port 23 tcp"
Ví d? v? filter ??n gi?n
#include
??.
char *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);
}
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
28
if(pcap_compile(descr,&fp,? port 23 ?,0,netp) == -1)
{
fprintf(stderr,"Error calling pcap_compile\n");
exit(1);
}
pcap_setfilter(descr,&fp)
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 ???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 pcap_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 pcap_pkthdr
{
struct timeval ts; time stamp
bpf_u_int32 caplen; length of portion present
bpf_u_int32; lebgth this packet (off wire)
}
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
29
Ví d? v? sniff frame s? d?ng c?u trúc này
#include
#include
#include
#include
#include
#include
#include
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);
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
30
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 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?a
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,
??n gi?n hãy d?t là NULL.
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
31
C?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 là tham s? cu?i cùng c?a hàm pcap_loop truy?n
vào (th??ng là NULL). Tham s? th? hai là c?u trúc pcap_pkthdr.
Ví d? v? cách s? d?ng pcap_loop :
#include
#include
#include
#include
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++;
}
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
32
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);
exit(1);
}
Ch??ng 2: Th? vi?n l?p trình ??ng libpcap
33
pcap_loop(descr,atoi(argv[1]),my_callback,NULL);
fprintf(stdout,"\nDone processing packets... wheew!\n");
return 0;
}
Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL
34
Ch??ng 3: H? qu?n tr? ?? 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?
?? 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 ?? 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.
??a ch? download MySQL :
3.2. Cài ??t MySQL
3.2.1. Cài ??t MySQL t? các gói nh? phân
Các gói c?n thi?t:
· Gói trình ch? (server package):
MySQL-version-architecture.rpm
· Gói trình khách (client package):
MySQL-client-version-architecture.rpm
· ?? tr? th? vi?n cho trình khách:
MySQL-shared-version-architecture.rpm
· Gói phát tri?n ?ng d?ng trên MySQL:
MySQL-devel-version-architecture.rpm
Ta cài t?ng gói b?ng l?nh
rpm –ivh
Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL
35
Trình cài ??t script s? t????ng t?o:
· ??t CSDL database m?u
· Script init.d và mysql ?? kh?i ??ng và d?ng d?ch v?
ki?m soát database c?a MySQL.
· Script mysql ch?a 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 mysql as this
user
· User mang tên mysql dùng ?????ng nh?p và kh?i ??ng d?ch
?? daemon c?a trình ch?.
Kh?i ??ng trình ch? b?ng tay:
· ??ng nh?p quy?n user mysql:
$ su mysql
· Kh?i ??ng trình ch?:
# /etc/rc.d/init.d/mysql start
3.2.2. Cài ??t t? mã ngu?n
· G??i nén file ch?a mã ngu?n
· Th?c hi?n cài ??t b?ng t? h?p l?nh sau :
$ ./configure
$ make
$ su
$ make intall
$scripts/mysql_intal.db
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
37
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?ng
trê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?ng
cách thêm identyfied by password
· Ví d? : t?o m?i 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
Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL
38
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 ,
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 : ??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 ??ng
nh?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
Ch??ng 3: H? qu?n tr? c? s? d? li?u MySQL
40
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 : câu 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
· B?ng 1 n?u th?t b?i
3.4.4. mysql_affected_rows
Cho bi?t s? dò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
??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
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ình
này, ?ng ??ng có kh? ??ng ph?c ?? ho?c cung c?p nh?ng thông tin gì ?ó g?i
là ?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, server
có 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ác
n?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ì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 ??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 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 ??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 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 ??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 ?? 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
ph?i ??t cho server ch? m?t cái tên. N?u trên máy ??c b? và d?a vào h? th?ng
file ??a UNIX hay Linux, ??n có th? ??t tên cho socket nh? là m?t tên file
Ch??ng 4: L?p trình socket
43
(v?i ??y ?? ???ng d?n). ??n ch? c?n ??t tên còn ???ng d?n th??ng ??t trong
th? ??c /tmp hay /usr/tmp. ??i v?i giao ti?p ??ng thông qua giao th?c
TCP/IP tên ??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 ??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)
?? 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 Socket
di?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ày
s? d?ng ??a ch? IP ?? xác ??nh nút k?t n?i v?t lý trên ??ng. Ngoài
ra, n?u ??n ch? c?n giao ti?p ??c b?, ??n có th? dùng vùng giao ti?p
theo chu?n ??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 ??ng.
Ch?ng ??n nh? ví d? trên, chúng ta ?ã th?c hi?n b?ng cách ??t tên
cho socket là server_socket, và Linux ?ã t?o ra file server_socket
ngay trên th? ??c hi?n hành (hay trong th? ??c ??m /tmp tùy theo
phiên ??n ??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
?ng ??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.
Vùng AF_INET nh?? ?ã nêu s? d?ng ??c ch? 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
Ch??ng 4: L?p trình socket
45
hay 127.0.0.1 là các ??a ch? IP h?p l?. ??a ch? IP có th? ???c ánh ??
thành m?t tên d? nh? ??n nh? www.yahoo.com hay
www.microsoft.com, chúng ???c ??i là tên vùng (domain name).
Vi?c ánh ?? ??a ch? IP thành tên vùng th??ng do máy ch? DNS
(Domain Name Server) th?c hi?n. Tuy nhiên, ??n ??ng có th? t?
ánh ?? tên vùng ngay trên mày ??c b? b?ng cách s? d?ng t?p tin d?
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
(SOCK_STREAM). D? li?u khi chuy?n ?i ???c ?óng thành t?ng
gói (data package hay datagram). SOCK_STREAM và
SOCK_DGRAM qui ??nh cách chuy?n gói d? li?u theo hai cách
nh? sau:
SOCK_STREAM luôn gi? k?t n?i và b?o ??m gói thông tin
g?i ?i ???c chuy?n ??n ?ích và nh?n ??y ??. Sau khi nh?n xong d?
li?u, n?i nh?n ?? g?i thông tin ph?n h?i cho n?i g?i và quá trình g?i
ch? ???c xác nh?n hoàn t?t khi nh?n ???c ??y ?? th?ng tin g?i nh?n
? c? hai phía khách ch?. Ki?u truy?n d? li? socket này trong vùng
giao th?c ??ng Internet AF_INET ???c ?? là giao th?c truy?n
TCP. Khi k?t h?p v?i c? ch? ??nh tuy?n theo ??a ch? IP chúng ???c
??i t?t là TCP/IP. K?t n?i và truy?n d? li?u theo cách này tuy ??o
??m nh?ng t?n nhi?u tài nguyên ??a h? th?ng do k?t n?i ph?i duy
trì và theo dõi th??ng xuyên.
SOCK_DGRAM cách g?i nh?n d? li?u này ch? di?n ra m?t
chi?u. Trình khách, n?i g?i d? li?u ?i không c?n bi?t trình ch? (n?i
nh?n) có nh?n ???c gói d? li?u ??y ?? hay không. Trình ch? khi
nh?n ???c d? li?u ??ng không c?n thông báo hay xác nh?n v?i trình
khách là d? li?u ?ã nh?n xong. Cách g?i này có v? không an toàn
Ch??ng 4: L?p trình socket
47
nh?ng bù l?i th?c hi?n nhanh và không tiêu t?n nhi?u tài nguyên ??
duy trì k?t n?i và ki?m tra d? li?u nh?n g?i. Ki?u truy?n d? li?u
socket này trong vùng giao th?c ??ng Internet AF_INET ???c ??i
là giao th?c truy?n UDP (User Datagram Protocol). Khi k?t h?p v?i
?? ch? ??nh tuy?n theo ??c ch? IP chúng ???c ??i t?t là UDP/IP. Do
tính ch?t không ??m ??o nên UDP ???c dùng nhi?u trong ??ng v?i
??c ?ích thông báo hay g?i tin tin ??n m?t nhóm máy tính nào ?ó
trong ??ng. Nó ít khi ???c dùng trong các ??ch ?? c?n s? chính xác
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
#include
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
trên xu?t nh?p (file) ??a UNIX/Linux
AF_INET M? socket theo giao th?c Internet (s? d?ng ??a ch? IP ?? k?t
n?i)
AF_IPX Vùng giao th?c IPX (??ng Novell)
AF_IS Chu?n giao th?c ISO
AF_NS Giao th?c Xerox Network System
??ng 4-1 Các giá tr? c?a domain
H?u nh? ??n ch? s? d?ng AF_UNIX và AF_INET là chính. Các
vùng giao th?c khác ?ã l?i th?i và hi?n nay ít còn ???c s? d?ng.
Tham s? type trong hàm socket() dùng ch? ??nh ki?u giao tiép hay
truy?n d? li?u ??a socket. ??n có th? ch? ??nh b?ng SOCK_STREAM
dùng cho truy?n d? li?u ??o ??m ho?c SOCK_GRAM dùng cho truy?n
không ??o ??m.
Ch??ng 4: L?p trình socket
49
Tham s? protocol dùng ?? ch?n giao th?c áp ??ng cho ki?u socket(
trong tr??ng h?p có nhi?u giao th?c áp ??ng cho m?t ki?u truy?n). Tuy
nhiên ??n ch? c?n ??t giá tr? 0 (l?y giao th?c m?c ??nh). AF_INET ch? cài
??t m?t giao th?cduy nh?t cho các ki?u truy?n SOCK_STREAM và
SOCK_DGRAM ?ó là TCP và UDP.
N?u ??o socket thành công, hàm ?? tr? v? s? ??nh danh socket(
descriptor). ??n s? d?ng s? ??nh danh này trong t?t ?? các l?i ??i truy
xu?t socket khác nh? read/write. S? này t??ng t? nh? s? ??nh danh file
mà b?n th??ng dùng ?? ??c và ghi file. ??c/ ghi vào socket ??ng ??ng
ngh?a v?i g?i và nh?n d? li?u gi?a trình khách và trình ch?.
4.3.3. ??nh ??a ch? cho socket
Khi socket ?ã ???c ??o ra, ??n ch? c?n ch? ??nh ??a ch? và tên cho
socket. M?t socket c?n ph?i có ??a ch? và tên ?? các trình khách có th?
tham chi?u ??n. Tùy m?i vùng giao th?c mà cách ?ánh ??a ch? có th?
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.
Trên quan ?i?m ??a l?p trình ?ng ??ng, cho dù socket có ??nh ??a
ch? theo vùng nào ?i ch?ng n?a m?t khi ?ã m? ???c socket, ??n ch? c?n
xem socket nh? m?t t?p tin và th?c hi?n thao tác read/write trên ?ó(
???ng ?ng v?i send và receive trên Winsock ??a Microsoft).
Ch??ng 4: L?p trình socket
51
4.3.4. ??t tên cho socket
Sau khi ?ã ??nh ??a ch?, ??n ch? c?n ??t tên cho socket. ??i v?i
AF_UNIX ??c ch? chính là ???ng d?n, còn tên chính là tên t?p tin ?? t?o
socket. ??i v?i vùng giao th?c AF_INET ??a ch? chính là s? IP còn tên
chính là s? hi?u c?ng (sin_port) trong c?u trúc sockaddr_in. Khi ?ã gán
thông tin ??y ?? cho socket ??n c?n ??i hàm bind() ?? rabgd bu?c nh?ng
thông tin này cho socket ?ã m? ra tr??c ?ó.
#include
int byte (int socket, const struct sockaddr *address, size_t address_len);
Hàm h? th?ng bind() s? d?ng các thông tin trong c?u trúc address
?? gán cho socket s? ??nh danh socketd tr? v? b?i hàm socket() tr??c ?ó.
Tham s? address_len cho bi?t chièu dài ??a c?u trúc (struct sockaddr*)
truy?n vào hàm. ??n l?u ý sockaddr là c?u trúc t?ng quát cho ??
sockaddr_un và sockaddr_in
Khi ràng bu?c thành công bind() ?? tr? v? tr? 0. N?u không hàm ?? tr? v?
-1 và errno ?? ch?a m?t trong các l?i sau:
Mã l?i Mô ??
EBADF S? mô ?? file không h?p l?
ENOTSOCK S? mô ?? file không dành cho socket
EINVAL S? mô ?? file tham chi?u ??n m?t socket ?ã có.
EADDRNOTAVAIL ??a ch? không xác ??nh
EADDRINUSE ??a ch? và c?ng ràng bu?c ?ã b? m?t socket khác
chi?m ??ng
??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
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.
Ch??ng 4: L?p trình socket
53
Hàm listen() ?? tr? v? 0 n?u ??o hàng ??i thành công, n?u th?t ??i tr?
tr? v? s? là -1 và bi?n errno ?? ch?a tr? EBADF, EINVAL, ho?c
ENOTSOCK.
4.3.6. Ch? và ch?p nh?n k?t n?i
M?t khi ?ã t?o ???c socket, ??t tên cho nó và chu?n ?? xong hàng
??i ?? ti?p nh?n k?t n?i, công vi?c sau cùng là ch? k?t n?i ??a trình
khách g?i ??n. ??n ??i hàm accept() ?? th?c hi?n công vi?c này.
#include
int accept(int socketd, struct sockaddr *address, size_t
*address_len);
Hàm h? th?ng accept() ?? tr? v? khi có m?t trình khách mu?n k?t
n?i v?i ? c?m socket ch? ??nh s? mô ?? socketd. K?t n?i ??a trình khách
tr??c h?t ???c ??t vào hàng ??i. Khi accept() phát hi?n ra có socket
trong hàng ??i, nó s? t? ??ng l?y ??a ch? c?a máy khách ??t vào c?u trúc
address, chi?u dài th?t s? c?a c?u trúc ??a ch? tr? v? trong bi?n
address_len. Ti?p ??n accept() ??o ra m?t socket vô danh. K?t qu? tr? v?
??a accept() là s? mô ?? cho socket vô danh, ??n có th? s? d?ng s? này
?? liên ??c v?i trình khách. Socket vô danh m?i này có cùng ki?u v?i
socket ??t tên ?ang l?ng nghe trên hàng ??i.
Do c?u trúc struct sockaddr không có ??nh cho nên ??n c?n thi?t l?p
kích th??c v?a ??? ?? ti?p nh?n ??a ch? trình khách. N?u ??a ch? trình
khách dài h?n không gian ??n dành cho c?u trúc sockaddr, ph?n d? ra ??
?? c?t ?? .
Ch??ng 4: L?p trình socket
54
N?u ch?a có k?t n?i nào trong hàng ??i, accept() ?? d?ng ??i ch? –
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
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
??ng 4-4 Mã l?i ??a hàm connect()
N?u k?t n?i không thành công hàm connect() ?? có g?ng ch? k?t n?i
??i. N?u sau m?t s? l?n k?t n?i không thành công connect() ?? tr? v? l?i
ETIMEOUT.
???ng t? accept() ??n có th? ??i ch? ?? ch? c?a hàm connect()
b?ng cách ??i fcntl() ??t ??i c? ENONBLOCK. B?ng cách này, khi k?t
n?i không thành công ? l?n ??u tiên, hàm connect() ?? không ch???? l?p
??i k?t n?i. Hàm ?? k?t thúc và tr? v? mã l?i ngay l?p t?c.
4.3.8. ?óng k?t n?i
???ng t? nh? x? lý trên file. ??n có trách nhi?m ?óng các k?t n?i
?ã t?o ra b?ng cách g? hàm close(). ?óng k?t nói ?? gi?i phóng tài
nguyên và b?o ??m d? li?u ?ã chuy?n ??i hoàn t?t ? c? hai ??u g?i và
nh?n.
#include
int close(int sockd);
??i v?i ?? hai phía trình khách và trình ch?, ??n nên ??i close()
?óng socket khi l?nh read tr? v? tr? 0 (không còn d? li?u ?? ??c).
Ch??ng 4: L?p trình socket
56
Th??ng thì close() tr? v? ngay t?c kh?c, tuy nhiên có th? close() ?? ??i
vào tr?ng thái ch? (block) n?u scoket ??a ??n thi?t l?p ki?u k?t n?i hai
chi?u (SOCK_STREAM) cùng v?i tùy ch?n SOCK_LINGER và d? li?u
?ang ? tr?nh thái ch?a chuy?n h?t. Tùy ch?n SOCK_LINER ?? ???c ??
c?p sau.
4.3.9. Giao ti?p b?ng socket
Chúng ta v?a xem qua các hàm h? th?ng dùng ??o và x? lý socket,
gi? ?ây ta có th? tr? l?i nh?ng ví d? v? s? d?ng socket ?? th? ??n.
Nh???ã nêu, ??n nên s? d?ng socket theo vùng AF_INET thay cho
AF_UNIX. Socket d?a trên h? th?ng file th??ng g?p ph?i m?t s? v?n ??
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
my.computer.home thay cho 127.0.0.1. T?p tin v?n ??n /etc/hosts ch?a
các danh sách chuy?n ??i này. Ví d?, ??n có th? dùng trình so?n th?o vi
hay gnotepad s?a n?i dung t?p tin này nh? sau:
127.0.0.1 localhost
127.0.0.1 my.computer.home
207.46.131.91 www.microsoft.com
Nh? ??n th?y, m?t ??a ch? IP có th? ánh ?? b?ng nhi?u tên khác
nhau (??a ch? IP và tên th??ng cách nhau b?ng kho?ng tr?ng hay tab).
Th??ng ??a ch? IP 127.0.0.1 ???c ??i là localhost và không có gì tr?
ng?i n?u ??n d? ??nh ??t cho nó m?t cái tên khác ch?ng ??n nh?
my.computer.home. Các ??a ch? Web mà b?n th??ng th?y nh?
www.yahoo.com hay www.microsoft.com là các ??a ch? toàn c?u ???c
qu?n lý b?i t? ch?c qu?c t? InterNIC. ?? bi?t m?t tên ??i ?ng v?i m?t
??a ch? IP có t?n ??i hay không, ??n có th? g?i l?nh ping nh? sau:
Ch??ng 4: L?p trình socket
58
$ ping localhost
PING (127.0.0.1) from 127.0.0.1 : 56 (84) bytes of data.
64 bytes from (127.0.0.1) : icmp_seq=0 ttl=255 time=67 usec
64 bytes from (127.0.0.1) : icmp_seq=0 ttl=255 time=48 usec
64 bytes from (127.0.0.1) : icmp_seq=0 ttl=255 time=51 usec
4.4. S? d?ng socket trong ?ng ??ng minh ??a
Ph?n l?p trình socket này ?? ???c s? d?ng ?? th?c hi?n vi?c trao ??i
thông tin gi?a thành ph?n client và server trong ph?n ?ng ??ng minh
??a.
?? th? thành ph?n client ?? dùng socket k?t n?i ??n thành ph?n
server. Sau khi k?t n?i thành công client ?? g?i các l?nh nh? Start
Capture, Stop Capture, Get Filter... ??n server, server nh?n các l?nh này,
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).
Trong khi ?ó thì nhu c?u ng??i qu?n tr? m?ng r?t ?a d?ng:
· ??n có thông tin v? l?u l??ng m?ng ??? ???u ch?nh b?ng
thông theo yêu c?u c?a khách hàng c?ng nh? phát hi?n
tr??c các s? c? n?u ???c.
· Theo dõi hành ??ng truy c?p và xâm nh?p m?ng b?t h?p
pháp.
· ??t c? hành ??ng trên nên là online (phân tích và ???u
khi?n) n?u ???c.
Ch??ng 5: Phân tích và thi?t k? PacketCap
61
5.2. Phân tích và xác ??nh yêu c?u
5.2.1. Phân tích
Vi?c trao ??i thông tin trên m?ng ngày càng nhi?u, nhu c?u c?a các
nhà qu?n tr? m?ng ?òi h?i ngày càng ?a d?ng, c?n thi?t có m?t ch??ng
trình có th? b?t gói tin cho phép phân tích, trích l?c thông tin ngay trong
khi b?t (các ph?n m?m b?t gói tin hi?n nay không cho phép các nhà qu?n
tr? s? d?ng thông tin thu th?p ???c khi quá trình b?t gói tin ?ang th?c
hi?n).? ng ??ng này ?? l?y tên là PacketCap.
Trên c? s? ?ó, m?t h? th?ng phân tán b?t gói tin, trích l?c và luu tr?
vào c? s? d? li?u trên m?ng ???c xây d?ng ?? kh?c ph?c ph?n nào
khuy?t ???m trên. H? th?ng cho phép nhà qu?n tr? s? d?ng thông tin
ngay trong khi b?t, tùy ch?n v? trí l?u thông tin và cho phép c?u hình t?
xa vi?c filter các gói tin.Các nhà qu?n tr? m?ng c?ng có th? dùng h?
thông này làm c? s???? phát tri?n ti?p các ?ng d?ng v? qu?n tr? m?ng.
5.2.2. Xác ??nh yêu c?u
??c tiêu ??a ?? tài là m?t xây d?ng ?ng ??ng phân tán b?t các gói
tin, ?ng này ?? cung c?p cho qu?n tr? m?ng nh?ng thông tin ph?c ?? cho
vi?c theo dõi và phân tích thông tin ??ng, d?a trên nh?ng thông tin ???c
cung c?p này cho phép qu?n tr? m?ng có th? xác ??nh ???c tình tr?ng ??a
toàn b? h? th?ng ??ng.
Ch??ng 5: Phân tích và thi?t k? PacketCap
62
?ng ??ng PacketCap này ?? bao g?m các ch?c n?ng:
STT Ch?c n?ng
1
B?t và phân tích ???c các gói tin ??a nh?ng protocol thông ??ng
nh? TCP, UDP, ICMP, ARP...
2
Cho phép l?u tr? thông tin b?t ???c d??i ??ng c? s? d? li?u và
ch?n h? qu?n tr? ?? s? d? li?u ?? ??u tr?.
3
Cho phép l?u tr? thông tin b?t theo c?u trúc file ??a Ethereal ho?c
các ph?n m?m b?t gói tin khác.
4
?i?u khi?n t? xa vi?c b?t các gói tin, bao g?m:
· Kh?i ??ng b?t gói tin
· D?ng b?t gói tin
· L?y b? l?c hi?n th?i
· K?t thúc ch??ng trình b?t gói tin
??ng 5-1 Xác ??nh yêu c?u
Ch??ng 5: Phân tích và thi?t k? PacketCap
63
5.3. Các h??ng xây d?ng ?ng ??ng PacketCap
Hi?n nay có r?t nhi?u ph?n m?m b?t gói tin có mã ngu?n m? nh?
TCPTrace, TcpDump, WinDump, Ethereal,..trong s? này thì Ethereal là ph?n
m?m t?t nh?t. Nó h? tr? r?t nhi?u protocol, h? tr? các ??nh d?ng l?? tr? c?a
các ph?n m?m b?t gói tin khác, tích h?p thêm ph?n phân tích thông tin b?t
???c.
Các ph?n m?m ngu?n m? này ??u s? d?ng th? vi?n l?p trình libcap ho?c
winpcap(tên ??a phiên ??n libpcap ch?y trên h? ?i?u hành Windows).
Do có r?t nhi?u ph?n m?m ngu?n m? h? tr? b?t gói tin nên ?? có 2
h??ng l?a ch?n ?? phát tri?n ?ng ??ng PacketCap:
Ø H??ng 1: Tìm hi?u c?u trúc ??a ph?n m?m Ethereal, tích h?p thêm
ch?c n?ng l?u các gói tin vào c? s? d? li?u và c?u hình t? xa vào
ph?n m?m Ethereal.
Ø ??óng 2: S? d?ng th? vi?n l?p trình ??ng libpcap ?? vi?t l?i toàn b?
?ng d?ng.
5.3.1. Phân tích h??ng phát tri?n d?a trên Ethereal
· Thu?n l?i
o Source code c?a Ethereal m? có th? d? dàng download trên
nhi?u trang web. (www.ethereal.com)
o Không c?n xây d?ng l?i các module b?t gói tin và filter cho
?ng d?ng.
· Khó kh?n
o Mã ngu?n Ethereal r?t nhi?u và khó hi?u rõ ???c do ?ó vi?c
tích h?p thêm ch?c n?ng vào Ethereal là r?t ph?c t?p.
o Ethereal ch? cung c?p free user guide không cung c?p
developer guide do ?ó mu?n tìm hi?u v? ethereal ph?i ??c
??t c? source code.
Ch??ng 5: Phân tích và thi?t k? PacketCap
64
5.3.2. Phân tích h??ng phát tri?n d?a trên libcap
· Thu?n l?i :
o Th? vi?n mã ngu?n m? libpcap download mi?n phí, ???c
nhi?u nhà phát tri?n s? d?ng. Ph?n m?m b?t gói tin
Tcpdump là m?t ?i?n hình.
o Có nhi?u tài li?u h??ng d?n l?p trình
o Có th? d? dàng xây d?ng ch??ng trình theo ý mu?n
· Khó kh?n
o Ph?i vi?t l?i t?t c? các module capture và filtering tr??c khi
thêm vào các yêu c?u c?a lu?n v?n.
5.3.3. L?a ch?n h??ng phát tri?n PacketCap
T? nh?ng phân tích khó kh?n và thu?n l?i ??a 2 h??ng phát tri?n
?ng ??ng PacketCap, chúng em quy?t ??nh l?a phát tri?n PacketCap theo
h??ng th? 2, ngh?a là s? xây d?ng t? ??u ?ng ??ng b?t gói tin PacketCap
d?a trên th? vi?n libpcap.
Ch??ng 5: Phân tích và thi?t k? PacketCap
65
5.4. Các thành ph?n PacketCap
PacketCap có h? ch?c n?ng ?i?u khi?n xa nên nó s? ???c xây d?ng theo
mô hình ?ng ??ng Client/ Server.
PacketCap g?m 3 thành ph?n:
· Thành ph?n th?c hi?n vi?c l?ng nghe yêu c?u t? phía client và
b?t gói tin: PCServer( PacketCap Server)
· Thành ph?n ?i?u khi?n t? xa: PCManager.
· Thành ph?n l?u tr?: PCStore, thành ph?n này ch? là ??i l?u tr?
d? li?u b?t ???c. PCStore th? là m?t máy tính b?t kì có ch?y h?
qu?n tr? ?? s? d? li?u MySQL.
Trong mô hình client/ server thì PCServer là thành ph?n server, còn
PCManager là client.
PCServer m? c?ng 8088 và ch? k?t n?i, nh?n yêu c?u và th?c hi?n yêu
c?u khi ?ã có client k?t n?i vào.
PCManager ?? k?t n?i ??n PCServer và ?i?u khi?n ??i ho?t ??ng ??a
PCServer.
Hình 5-1 Các thành ph?n ??a PacketCap
Ch??ng 5: Phân tích và thi?t k? PacketCap
66
5.5. Xây d?ng mô hình use case
5.5.1. Xác ??nh Actor và use case
· Actor là ng??i dùng ch??ng trình PCManager (client)
· Use case
o Connect: Dùng PCManager k?t n?i vào PCServer
o StartCapture: Yêu c?u PCServer b?t ??u th?c hi?n vi?c b?t
gói tin.
o StopCapture: Yêu c?u PCServer d?ng vi?c b?t gói tin
o GetFilter: l?y b? l?c hi?n ??i
o Terminate: yêu c?u PCServer k?t thúc.
5.5.2. Mô hình use case
Hình 5-2 Mô hình use case
Ch??ng 5: Phân tích và thi?t k? PacketCap
67
5.6. ??t ?? use case
5.6.1. Connect
· Tên use case: Connect
· Mô ??
Use-case này mô t? quá trình qu?n tr? viên yêu c?u
PCManager(client) k?t n?i ?? qu?n tr? vi?c b?t gói tin ? máy server.
· Dòng s? ki?n
o Dòng s? ki?n chính
Use-case b?t ??u khi có yêu c?u t? máy client xin k?t
??i. Máy client g?i yêu c?u ??n máy server.
Sau khi máy server nh?n ???c yêu c?u, n?u ch?p
nh?n yêu c?u máy server s? g?i v? s? port ?? giao
ti?p, k?t n?i thanh công.
??u máy sever không nh?n yêu c?u ho?c có sai sót
thì client thông báo l?i.
o Dòng s? ki?n ph?
Không có
o Các dòng s? ki?n khác
· Các yêu c?u ??c bi?t.
o Không có.
· ???u ki?n tiên quy?t.
o Ph?i ??ng nh?p quy?n qu?n tr? m?i ???c th?c hi?n Use-
Case này.
o Máy sever c?n k?t n?i ph?i s?n sàng.
· ???m m? r?ng
o Không có.
Ch??ng 5: Phân tích và thi?t k? PacketCap
68
5.6.2. StartCapture
· Tên use case: StartCapture
· Mô ??
Use-case này mô t? quá trình qu?n tr? viên yêu c?u máy client
g?i l?nh y?u c?u server b?t ??u vi?c b?t gói tin.
· Dòng s? ki?n
o Dòng s? ki?n chính
Use-case b?t ??u khi có yêu c?u t? máy client. Máy client
g?i yêu c?u ??n máy server.
Sau khi máy server nh?n ???c yêu c?u s? ki?m tra ti?n
trình b?t gói tin ?ã ???c th?c thi ch?a.
??u ti?n trình ch?a th?c thi thì th?c thi vi?c b?t gói tin
??u vào c? s? d? li?u, thông báo v? máy client yêu c?u
?ã ???c ?áp ?ng.
??u ti?n trình ?ã ???c th?c thi thì g?i thông báo l?i v?.
o Dòng s? ki?n ph?
Ki?m tra CSDL ngày ?ó ?ã có ch?a. N?u có r?i thì m?
?? s? d? li?u ?? l?u. N?u ch?a có thì t?o c? s? d? li?u
??i.
Qu?n tr? viên ch?nh s?a các thông tin liên quan ??n
phòng ban, r?i c?p nh?t l?u l?i. Use-case k?t thúc.
Máy client yêu c?u qu?n tr? nh?p c?u trúc filter gói tin.
Ki?m tra tính h?p l? c?a c?u trúc filter.
Ch??ng 5: Phân tích và thi?t k? PacketCap
69
o Các dòng s? ki?n khác
Không có
· Các yêu c?u ??c bi?t
o Không có.
· ???u ki?n tiên quy?t
o Ph?i ??ng nh?p quy?n qu?n tr? m?i ???c th?c hi?n Use-
Case này.
· ???m m? r?ng
o Không có.
5.6.3. StopCapture
· Tên use case: StopCapture
· Mô ??:
Use-case này mô t? quá trình qu?n tr? viên yêu c?u máy
client g?i ??n server yêu c?u k?t thúc b?t gói tin.
· Dòng s? ki?n
o Dòng s? ki?n chính
Use-case b?t ??u khi có yêu c?u t? máy client. Máy
client g?i yêu c?u ng?ng b?t gói tin ??n máy
server.
Sau khi máy server nh?n ???c yêu c?u s? ki?m tra
ti?n trình b?t gói tin ?ã ???c th?c thi ch?a.
??u ti?n trình ch?a th?c thi thì th?c thi thì ng?ng
??t gói tin, thông báo v? máy client yêu c?u ?ã
???c ?áp ?ng.
??u ti?n trình ch?a ???c th?c thi thì g?i thông báo
??i v?.
Ch??ng 5: Phân tích và thi?t k? PacketCap
70
o Dòng s? ki?n ph?
?óng c? s? d? li?u
· Các dòng s? ki?n khác
o Không có.
· Các yêu c?u ??c bi?t
o Không có.
· ???u ki?n tiên quy?t
Ph?i ??ng nh?p quy?n qu?n tr? m?i ???c th?c hi?n Use-Case
này.
· ???m m? r?ng
o Không có.
5.6.4. GetFilter
· Tên use case: GetFilter
· Mô ??
Use-case này mô t? quá trình qu?n tr? viên yêu c?u máy client
g?i yêu c?u cho server tr? l?i b? l?c hi?n th?i.
· Dòng s? ki?n
o Dòng s? ki?n chính
Use-case b?t ??u khi có yêu c?u t? máy client yêu
??u thay l?y filter hi?n ??i ?ang dùng ?? b?t gói tin.
Sau khi máy server nh?n ???c yêu c?u s? ki?m tra
ti?n trình b?t gói tin ?ã ???c th?c thi ch?a.
??u ti?n trình ?ã th?c thi thì nó s? g?i tr? l?i cho
client
??u ti?n trình ch?a ???c th?c thi thì g?i thông báo
??i v? cho client.
Ch??ng 5: Phân tích và thi?t k? PacketCap
71
o Dòng s? ki?n ph?
?óng c? s? d? li?u
o Các dòng s? ki?n khác
· Các yêu c?u ??c bi?t
o Không có.
· ???u ki?n tiên quy?t:
o Không có
· ???m m? r?ng:
o Không có.
5.6.5. Terminate
· Tên use case: Terminate
· Mô ??:
Use-case này mô t? quá trình qu?n tr? viên yêu c?u máy
client g?i ??n server yêu c?u server k?t thúc( thoát).
· Dòng s? ki?n
o Dòng s? ki?n chính
Use-case b?t ??u khi có yêu c?u t? máy client. Máy
client g?i yêu c?u k?t thúc ch??ng trình server.
Sau khi máy server nh?n ???c yêu c?u s? ki?m tra
n?u quá trình b?t gói tin ?ang ch?y thì nó s? ch?m
d?t.
Thoát ra kh?i ch??ng trình. (ch?m d?t)
o Dòng s? ki?n ph?
?óng c? s? d? li?u
· Các dòng s? ki?n khác
o Không có.
Ch??ng 5: Phân tích và thi?t k? PacketCap
72
· Các yêu c?u ??c bi?t
o Không có.
· ???u ki?n tiên quy?t
Ph?i ??ng nh?p quy?n qu?n tr? m?i ???c th?c hi?n Use-Case
này.
· ???m m? r?ng
o Không có.
5.7.Thi?t k? d? li?u
5.7.1. Phân tích các h??ng l?u tr?
Có 3 h??ng
· ???ng 1: Các máy client b?t gói tin trên các m?ng khác nhau và
?? li?u ???c truy?n v? l?u tr? trên m?t máy server.
Hình 5-3 Mô hình l?u tr? 1
Ch??ng 5: Phân tích và thi?t k? PacketCap
73
o ?u ???m :
?? li?u ???c l?u t?p trung d? dàng cho vi?c x? lý sau này.
o Khuy?t ???m
Khi s? l??ng các gói tin b?t ???c quá nhi?u vi?c truy?n d?
li?u v? máy server có th? làm b?n ???ng truy?n c?a m?ng.
?òi h?i dung l??ng l?u tr? r?t l?n ? máy server.
· ???ng 2 : Gi?ng nh? h??ng 1 nh?ng thi?t l?p thêm m?t m?ng
LAN gi?a các máy client và sever ?? truy?n d? li?u.
Hình 5-4 Mô hình l?u tr? 2
o ?u ???m :
Kh?c ph?c ???c khuy?t ???m c?a h??ng 1
o Khuy?t ???m
T?n kém trong vi?c thi?t l?p m?ng LAN.
Vi?c thi?t l?p m?ng LAN có th? g?p khó kh?n trong tr??ng
??p các máy client ? quá xa nhau.
?òi h?i dung l??ng l?u tr? r?t l?n ? máy server.
Ch??ng 5: Phân tích và thi?t k? PacketCap
74
· ???ng 3 : L?u phân tán trên các máy client và ch? truy?n d? li?u
?? theo yêu c?u c?a client.
Hình 5-5 Mô hình l?u tr? 3
o ?u ???m:
Ch? truy?n nh?ng d? li?u ???c client yêu c?u nên ph?n
nào kh?c ph?c ???c khuy?t ???m c?a h??ng 1.
Vi?c l?u tr? phân tán s? không ?òi h?i dung l??ng l?u tr?
??n ? m?t máy.
Vi?c xây d?ng ch??ng trình th?c hi?n l?u tr? phân tán s?
?? dàng h?n.
o Khuy?t ?i?m
?ng ??ng PacketCap cho phép l?u tr? theo ?? 3 h?óng trên.
Ch??ng 5: Phân tích và thi?t k? PacketCap
75
5.7.2. Thi?t k? ?? s? ?? li?u
5.7.2.1. Danh sách các ??i t??ng (table)
STT Tên ??i t??ng Mô ??
1 PACKET Thông tin chung t?t c? các gói tin b?t ???c
2 IP Thông tin v? IP header c?a gói tin
3 TCP Thông tin chi ti?t v? gói tin TCP
4 UDP Thông tin chi ti?t v? gói tin UDP
5 ICMP Thông tin chi ti?t v? gói tin ICMP
6 IGMP Thông tin chi ti?t v? gói tin IGMP
7 ARP Thông tin chi ti?t v? gói tin ARP
??ng 5-2 Danh sách các ??i t??ng
Sau ?ây là mô t? chi ti?t m?t s? l?p ??i t??ng quan tr?ng c?a h?
th?ng.
5.7.2.2 Table PACKET
ST
T
Tên thu?c tính Ki?u d? li?u Ý ngh?a
Ràng
bu?c
1 Ma Chu?i (10) ??nh danh gói tin
2 Source Mac Chu?i (10)
??a ch? mac c?a máy g?i
gói tin
3
Dest Mac
Chu?i (10)
??a ch? mac c?a máy
nh?n gói tin
4 Packetlength Chu?i (10) chi?u dài gói tin
5 Time Chu?i (20) Th?i gian nh?n gói tin
6 Data Chu?i (1000) D? li?u c? gói tin
??ng 5-3 Table PACKET
Ch??ng 5: Phân tích và thi?t k? PacketCap
76
6.7.2.4. Table IP
ST
T
Tên thu?c tính Ki?u d? li?u Ý ngh?a
Ràng
bu?c
1 Ma Chu?i (10) ??a ch? mac c?a máy g?i
2 Service Chu?i (10) Service c?a gói tin
3 ID Chu?i (10) ID c?a gói tin
4 TTL Chu?i (20) Time to live
5 ChecksumIP Chu?i (20) Checksum c?a IP
6 SourceIP Chu?i (20) ??a ch? IP ngu?n
7 Dest IP Chu?i (20) ??a ch? IP ?ích
??ng 5-4 Table IP
5.7.2.5. Table TCP
ST
T
Tên thu?c tính Ki?u d? li?u Ý ngh?a
Ràng
bu?c
1 Ma Chu?i (10) ??nh danh gói tin
2 Source Port Chu?i (10) Port ngu?n
3 Dest Port Chu?i (10) Port ?ích
4 Seg No Chu?i (20) S? segment
5 Ack No Chu?i (20) Ack
6 Winsize Chu?i (20) Winsize
7 checksumTCP Chu?i (20) Checksum c?a TCP
8 Type Chu?i (20)
??ng 5-5 Table TCP
Type : {"FIN ","SYN ","RST ","PUSH ","ACK ","URG ","ECE ","CWR "}
Ch??ng 5: Phân tích và thi?t k? PacketCap
77
5.7.2.6. Table UDP
ST
T
Tên thu?c tính Ki?u d? li?u Ý ngh?a
Ràng
bu?c
1 Ma Chu?i (10) ??nh danh gói tin
2 Source Port Chu?i (10) Port ngu?n
3 Dest Port Chu?i (10) Port ?ích
4 ChecksumUDP Chu?i (20) Checksum c?a UDP
??ng 5-6 Table UDP
5.7.2.7 Table ICMP
ST
T
Tên thu?c tính Ki?u d? li?u Ý ngh?a
Ràng
bu?c
1 Ma Chu?i (10) ??nh danh gói tin
2
ICMP message
group
Chu?i (10)
3 Type Chu?i (10)
4 Code Chu?i (20)
5 Id Chu?i (20)
6 Seg No Chu?i (20)
??ng 5-7 Table ICMP
Các h?ng và ý ngh?a c?a ICMP message group
( 0, "Echo Reply"},
{ 3, "Destination Unreachable"},
{ 4, "Source Quench"},
{ 5, "Redirect Message"},
Ch??ng 5: Phân tích và thi?t k? PacketCap
78
{ 6, "Alternate Host Address"},
{ 8, "Echo Request"},
{ 9, "Router Advertisement"},
{ 10, "Router Selection"},
{ 11, "Time Exceeded"},
{ 12, "Parameter Problem"},
{ 13, "Timestamp Request"},
{ 14, "Timestamp Reply"},
{ 15, "Information Request"},
{ 16, "Information Reply"},
{ 17, "Address Mask Request"},
{ 18, "Address Mask Reply"},
5.7.2.8 Table IGMP
ST
T
Tên thu?c tính Ki?u d? li?u Ý ngh?a
Ràng
bu?c
1 Ma Chu?i (10) ??nh danh gói tin
2
IGMP message
group
Chu?i (10)
3 Type Chu?i (10)
4 Response Time Chu?i (20)
5 Checksum Chu?i (20)
6 Group Addr Chu?i (20)
??ng 5-8 Table IGMP
Ch??ng 5: Phân tích và thi?t k? PacketCap
79
Các h?ng và ý ngh?a c?a IGMP message group:
{ 0x11 ," Group Membership Query."},
{0x12 ,"IGMPv1 Membership Report." },
{0x13 ,"DVMRP. "},
{0x14 ,"PIMv1. "},
{0x15 ,"Cisco Trace Messages. "},
{0x16 ,"IGMPv2 Membership Report. "},
{0x17 ,"IGMPv2 Leave Group." },
{0x1E ,"Multicast Traceroute Response. "},
{0x1F ,"Multicast Traceroute. "},
{0x22 ,"IGMPv3 Membership Report. "},
{0x24 ,"Multicast Router Advertisement. "},
{0x25 ,"Multicast Router Solicitation. "},
{0x26 ,"Multicast Router Termination. "}
Ch??ng 5: Phân tích và thi?t k? PacketCap
80
5.7.2.9. Table ARP
ST
T
Tên thu?c tính Ki?u d? li?u Ý ngh?a
Ràng
bu?c
1 Ma Chu?i (10) ??nh danh gói tin
2 ARP type Chu?i (10)
3 ARP Source IP Chu?i (10)
4 ARPDest IP Chu?i (20)
5 Group Addr Chu?i (20)
??ng 5-9 Table ARP
ARP type:
ARP Request frame
ARP Reply frame
RARP Request frame
RARP Reply frame
Unknown ARP
Ch??ng 5: Phân tích và thi?t k? PacketCap
81
5.8. Xây d?ng PCServer( server), PCManager(client)
5.8.1. L?u ?? PCServer
Hình 5-6 L?u ?? PCServer
Ch??ng 5: Phân tích và thi?t k? PacketCap
82
5.8.2. L?u ?? PCManager( Client)
Hình 5-7 L?u ?? PCManager
Ch??ng 5: Phân tích và thi?t k? PacketCap
83
5.8.3. C?u trúc d? li?u trao ??i gi?a PCServer và PCManager
Sau khi Client k?t n?i thành công v?i PCServer, PCManager và
PCServer ?? trao ??i các thông ?i?p v?i nhau. ?? th? là PCManger s?
g?i yêu c?u lên cho PCServer và sau khi th?c hi?n yêu c?u ??a
PCManager, Server ?? g?i tr? l?i k?t qu? th?c hi?n cho Client.
C?u trúc ??a m?i thông ?i?p nh? sau:
struct tagCMD
{
int CmdCode;
int IPFilterType;
int b1,b2,b3,b4;//4 parts of IP address(for filter)
int PortFilterType;
int Port;
int ProtocolFilter;//TCP, UDP, ICMP..
int mb1,mb2,mb3,mb4;//MySQL
int NumberPacket;
};
V?i CmdCode là mã l?nh c?n g?i, các mã l?nh mày ???c ??nh
ngh?a b?ng các h?ng ?? d? dàng cho vi?c l?p trình.
Ch??ng 5: Phân tích và thi?t k? PacketCap
84
IPFilterType xác ??nh ki?u ??c theo ??a ch? IP, giá tr? c?a nó ???c
??nh ngh?a nh? sau:
#define NO_FILTER 0
#define SOURCE_FILTER 1
#define DEST_FILTER 2
#define SOURCE_OR_DEST_FILTER 3
#define SOURCE_AND_DEST_FILTER 4
N?u IPFilterType=NO_FILTER ngh?a là không th?c hi?n vi?c
??c các gói tin theo ??a ch? IP, n?u IPFilterType khác 0 thì lúc ?ó
b1,b2,b3,b4 s? là ??a ch? IP c?n ??c. B?n s? nguyên này ?? hình thành
??a ch? IP theo ??ng b1.b2.b3.b4
SOURCE_FILTER l?c theo ??a ch? IP ngu?n, các gói tin có ??a
ch? ngu?n (n?i g?i) b?ng b1.b2.b3.b4 ?? ???c b?t ??i.
DEST_FILTER l?c theo ??a ch? ?ích, các gói tin có ??a ch? ?ích
(n?i ??n) b?ng b1.b2.b3.b4 s? ???c b?t ??i.
PortFilterType xác ??nh ki?u ??c theo Port ??a ?ng ??ng, giá tr? c?a
nó ???c ??nh ngh?a nh? ??a IPFilterType.
SOURCE_OR_DEST nh?ng gói tin có ??a ch? ngu?n ho?c ?ích
b?ng b1.b2.b3.b4 ?? ???c b?t.
SOURCE_AND_DEST nh?ng gói tin có ??a ch? ngu?n b?ng
b1.b2.b3.b4 ?? ???c b?t và nh?ng gói tin có ??a ch? ?ích b?ng
b1.b2.b3.b4 ?? ???c b?t.
T??ng t? ??í IPFilterType là PortFilterType
Protocol là giao th?c c?n ??c, 0 có ngh?a là không ??c, 1 là l?c theo
TCP...
Ch??ng 5: Phân tích và thi?t k? PacketCap
85
Mb1, mb2, mb3,mb4 là 4 thành ph?n ??a ??a ch? IP ??a máy tính
ch?y h? qu?n tr? ?? s? d? li?u mà ta mu?n l?u thông tin b?t ???c vào ?ó.
NumberPacket xác ??nh s? gói tin c?n b?t.
5.9.Thi?t k? giao di?n PCManager( phiên ??n ch?y trên Windows)
Mô ??
??
th?
??
Tên ??i t??ng Ki?u ??i
???ng
Ghi chú
1 IDC_STATIC Label IP
2 IDC_IPADDR_SOURCE IP Address Nh?p IP c?n filter
3 CboFilterIP Combobox L?a ch?n ki?u filter theo IP
4 IDC_STATIC Label Port
5 IDC_SOURCEPORT Textbox Nh?p port c?n filter
6 CboFilterPORT Combobox L?a ch?n ki?u filter theo IP
Ch??ng 5: Phân tích và thi?t k? PacketCap
86
7 IDC_STATIC Label Protocol
8 CboProtocol Combobox Ch?n protocol c?n filter
9 IDC_STATIC Label Thông báo nh?p IP
10 IDC_IPADDR_MYSQL IP Address Ch?n máy ch?y MySQL
11 IDC_STATIC Label Number of packet
12 IDC_NUMBER Combo
box
?? l??ng packet c?n b?t
13 IDC_STATIC Label Server IP
14 IDC_IPADDR_SERVER Textbox Nh?p ??a ch? IP máy
PCServer c?n ???u khi?n
15 IDC_STATUS Label Báo tình tr?ng k?t n?i
16 BtnStart button B?t ??u b?t gói tin
17 BtnStop Button K?t thúc vi?c b?t gói tin
18 BtnGetFilter Button L?y thông tin filter hi?n
th?i
19 BtnTermServer Button K?t thúc liên k?t v? server
20 BtnConnect Button K?t n?i ??n ma1y server
21 BtnExit Button Thoát kh?i ch??ng trình
??ng 5-10 Mô ?? màn hình PCManager
Ch??ng 6: Cài ??t và th? nghi?m
87
Ch??ng 6: Cài ??t và th? nghi?m
6.1. Cài ??t
Ph?n PCServer ?? ???c cài ??t trên môi tr??ng Linux, PCManager ?? ???c
cài ??t trên ?? 2 môi tr??ng Linux và Windows.
· Môi tr??ng cài ??t ?ng ??ng
o Windows XP Professional
o Linux Redhat 9.0
· Môi tr??ng l?p trình
o C for Linux
o Visual C++ 6.0
· Môi tr??ng cài ??t th? nghi?m
o PCServer: Linux Redhat 9.0
o PCManager: Windows XP Professional
o PCManager: Linux Redhat 9.0
· Các ph?n m?m h? tr?
PCServer : MySQL, th? vi?n libpap
Ch??ng 6: Cài ??t và th? nghi?m
88
6.2. Th? nghi?m
6.2.1. Mô hình th? nghi?m 1
Hình 6-1 Mô hình th? nghi?m 1
· Mô ??: PCServer và PCStore cùng ch?y trên m?t máy,
PCManager và PCServer cùng trong m?t LAN segment
· K?t qu?:
o PCManager k?t n?i vào PCServer thành công
o PCServer th?c hi?n t?t t?t ?? các yêu c?u do PCManager
g?i ??n
o PCServer ghi k?t qu? b?t ???c vào c? s? d? li?u MySQL
thành công.
Ch??ng 6: Cài ??t và th? nghi?m
89
6.2.2. Mô hình th? nghi?m 2
Hình 6-2 Mô hình th? nghi?m 2
· Mô ??: PCServer và PCStore có th? l?a ch?n ch?y trên cùng 1
máy ho?c ? 2 máy khác nhau.
· K?t qu?:
o PCManager k?t n?i vào PCServer thành công
o PCServer th?c hi?n t?t t?t ?? các yêu c?u do PCManager
g?i ??n
o PCServer ghi k?t qu? b?t ???c vào c? s? d? li?u MySQL
thành công.
Ch??ng 6: Cài ??t và th? nghi?m
90
6.2.3. Mô hình th? nghi?m 3
Hình 6-3 Mô hình th? nghi?m 3
· Mô ??
PCServer và PCManager ch?y trên 2 ??ng LAN khác nhau
???c n?i qua 1 router.
· K?t qu?
Ch?a th? nghi?m ???c mô hình này do không có thi?t ??.
Ch??ng 7: T?ng k?t
91
Ch??ng 7: T?ng k?t
7.1. K?t lu?n
7.1.1. K?t qu? ??t ???c
Sau khi th?c hi?n xong ?? tài, chúng em ?ã thu ???c m?t s? k?t
qu?:
· Tìm hi?u ???c th? vi?n mã ngu?n m? libpcap và vi?t ???c ?ng
??ng b?t gói tin d?a vào th? vi?n này. ?ây là b? th? vi?n mã
ngu?n m? h? tr? l?p trình ??ng c?p th?p ???c s? d?ng r?t nhi?u
trong các ph?n m?m h? tr? b?t gói tin nh? TcpDump, TCPFlow,
Ethereal...
· Tìm hi?u h? qu?n tr? ?? s? d? li?u mã ngu?n m? MySQL.
· Tìm hi?u v?n ?? l?p trình socket, multithread trên môi tr??ng
Linux.
· Xây d?ng ???c ?ng ??ng phân tán b?t các gói tin ph?c ?? cho
vi?c phân tích thông tin ??ng.
7.1.2. ??n ch?
· Ch?a th? b?t gói tin ??ng trên nhi?u card ??ng
· ?? l??ng protocol có th? phân tích và trích ??c thông tin không
nhi?u
· Ch?a h? tr? ch?c n?ng phân tích thông tin t? nh?ng d? li?u ?ã
b?t ???c.
Ch??ng 7: T?ng k?t
92
7.2. H??ng phát tri?n
Trong t??ng lai, ?ng ??ng PacketCap ?? ???c phát tri?n thêm nh?ng
ch?c n?ng m?i và nâng c?p ch?c n?ng hi?n ??i ch?a ???c t?t.
· H? tr? b?t các gói tin ??ng th?i trên nhi?u card ??ng
· ??ng thêm s? l??ng protocol mà ch??ng trình có th? phân tích và
trích ??c thông tin.
· ?? tr? ??u thông tin b?t ???c theo các ??nh ??ng ??a Ethereal,
TcpDump..
Ph? L?c
93
PH? L?C H??ng d?n s? d?ng PacketCap
1.Ch??ng trình PCServer
?? ch?y ch??ng trình Server ??n ch? c?n vào th? ??c ch?a ch??ng trình
server và gõ l?nh ./pcserver thì ch??ng trình ?? ???c th?c thi.
?? thoát kh?i ch??ng trình PCServer ??n có th? dùng ch??ng trình
Client g?i yêu c?u k?t thúc ch??ng trình PCServer, ho?c nh?n t? h?p phím
Ctrl-C trên console ?ang ch?y PCserver.
2. Ch??ng trình PCManager
2.1. PCManager trên môi tr??ng Linux
???ng t? nh? khi ch?y PCServer, ??n vào th? ??c có ch?a ch??ng
trình PCManager r?i gõ l?nh ./pcman.Ch??ng trình ?? yêu c?u nh?p ??a
ch? IP ??a máy ch?y PCServer. N?u k?t n?i thành công thì ch??ng trình
?? hi?n th? các dòng thông báo, ??n ch? c?n nh?p các giá tr? hi?n th? trên
màn hình là có th? ?i?u khi?n ???c ho?t ??ng ??a PCServer.
Ph? L?c
94
2.2. PCManager trên môi tr??ng Windows
Double click chu?t vào file PCManager.exe, giao di?n ??a ch??ng trình
Hình 7-1 Màn hình PCManager
?ánh ??a ch? IP ??a PCServer vào ??c PCServerIP, click chu?t vào
nút Connect n?u k?t n?i thành công thì dòng tr?ng thái phía d??i nút
Connect ?? thông báo k?t qu? k?t n?i thành công hay không.
N?u thành k?t n?i thành công thì các nút l?nh ?? có hi?u l?c. Lúc
này ta m?i có th? th?c hi?n các thao tác ?i?u khi?n ???c.
Ví d???? b?t t?t ?? các gói tin ?i qua card ??ng( ??a máy ?ang ch?y
PCServer) và ??u k?t qu? vào chính máy tính ?ang ch?y PCServer thì ch?
c?n click chu?t vào nút StartCapture
?? k?t thúc ch??ng trình PCServer thì click chu?t vào nút
Terminate Server.
Tài li?u tham kh?o
95
TÀI LI?U THAM KH?O
[1] Nguy?n Ph??ng Lan – Hoàng ??c ??i, L?p trình Linux t?p 1, NXBGiáo
D?c, H? Chí Minh, 2001
[2] Sams, Linux Programming Unleashed, 1999
Website
[3] VietNam OpenSource Forum, www.vnoss.org
[4] MySQL, www.mysql.com
[5] libpcap, www.tcpdump.org
[6] SourceForge, www.sourceforge.net
Các file đính kèm theo tài liệu này:
- tailieu.pdf