Viết chương trình python đọc gói tin từ card mạng

Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 1

MỤC LỤC

Phần I : NỀN TẢNG CAPTURE GÓI 3
1. Giới thiệu Pcap / Libpcap / Winpcap : 3
2. Giới thiệu Winpcap : 3
c. Các module: 6
3. Giao tiếp với card mạng : 7
Phần II : Thực hiện chương trình DEMO VietCap 13
1. Giới thiệu về thư viện jpcap : 13
2. Các đối tượng trong jpcap: 13
Phần III : ỨNG DỤNG 16
1. Các kiểu gói: 16
2. Ethernet chia sẽ: 16
3. Ethernet chuyển mạch: 16
4. Môi trường hỗn hợp: 17
5. Capture theo cơ chế Man-In-The-Middle: 17
Phần IV: TÀI LIỆU THAM KHẢO 17

Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 2
Lời nói đầu
-o0o-
Với sự phát triển vượt bậc của công nghệ mạng, tốc độ mạng ngày càng được nâng
cao, số người sử dụng mạng để làm việc ngày càng nhiều. Điều đó đặt ra vô số vấn đề cho hệ
thống mạng đã tồn tại trước đây và hiện tại như : vấn đề độ tin cậy,tính toàn vẹn, tính bảo
mật, và hiệu suất hoạt động của mạng …Vì thế việc cần phải có một công cụ để giúp người
quản trị giám sát, phát hiện các vấn đề của mạng, cũng như phát hiện sự tấn công từ bên ngoài
ngày càng trở nên quan trọng. Công cụ này đối với người quản trị mạng cũng quan trọng như
máy siêu âm ,máy x-quang, máy điện tâm đồ đối với các bác sĩ, những dụng cụ mà nếu thiếu
thì người bác sĩ sẽ khó lòng hoàn thành tốt nhiệm vụ của mình nếu như không muốn nói là
không thể. Vì thế nhóm chúng em quyết định chọn đề tài nghiên cứu cơ chế hoạt động và ứng
dụng của công cụ bắt gói trên mạng. Trong quá trình thực hiện, nhóm cũng đã gặp không ít
khó khăn về tài liệu vì thực sự tài liệu về mảng đề tài này là không nhiều. Cho nên đề tài chỉ
dừng mức giới thiệu cơ chế chung, và thực hiện hiện chương trình demo bắt gói đơn giản
bằng Java, đến ứng dụng và cách thực capture trên các môi trường mạng như thế nào.
Hướng phát triển đề tài là rất rộng : như phát triển thành chương trình giám sát và
phân tích gói chuyên nghiệp hoặc xây dựng IDS, firewall, vv

Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 3
Phần I : NỀN TẢNG CAPTURE GÓI

1. Giới thiệu Pcap / Libpcap / Winpcap :
Pcap là tên chung cho bộ thư viện lập trình API ( application programming interface
– giao tiếp lập trình ứng dụng ) dùng để bắt gói. Trên hệ thống linux còn gọi với tên là
libpcap và trên hệ thống Windows còn gọi là winpcap.
Libpcap và Winpcap đều là mã nguồn mở. Là nền tảng xây dựng các tool ứng dụng
mang tính thương mại như IDS ( Network intrusion detection systems – hệ thống phát
hiện xâm nhập, Packet sniffers – phân tích gói, Network Monitor – giám sát mạng…vv

Pcap API được viết cho bằng C và C++ nhưng được đóng bao (wrapper) cho nhiều
ngôn ngữ cao cấp như Java, C# , VB, Delphi, vv.
Winpcap là một phần của Pcap được phát triển ban đầu tại Politecnico di Torino.
Winpcap có thể chạy trên các hệ điều hành Windows 9x/Me, NT, 2000, XP, Server 2003,
Vista .
Winpcap sử dụng NDIS (Network Driver Interface Specification ) để đọc các gói
trực tiếp từ card mạng (Network Adapter). NDIS là một thư viện mức thấp của hệ điều
hành giao tiếp với các driver.
Tên các thư viện đóng bao từ pcap của thư viện pcap trên các ngôn ngữ :
• Net::Pcap, a Perl wrapper for pcap
• python-libpcap, a Python wrapper for pcap
• Ruby/Pcap, a Ruby wrapper for pcap
• tclpcap, a Tcl wrapper for pcap
• jpcap, a Java wrapper for pcap
• WinPcapNET and SharpPcap, .NET wrappers for WinPcap
2. Giới thiệu Winpcap :
a. Chức năng:
WinPcap là một thư viện mã nguồn mở cho phép bắt gói và phân tích mạng
cho nền Win32. Hầu hết các chương trình ứng dụng truy cập mạng qua các hàm
nguyên thủy của hệ thống chẳng hạn như qua socket. Thật dễ dàng để truy cập dữ
liệu trên mạng qua cách này vì hệ điều hành chỉ xử lý với mức chi tiết thấp (giao
thức xử lý, tái hợp gói, ) và cung cấp interface tương tự như là đọc hay ghi vào
file.
Tuy nhiên có lúc các ứng dụng yêu cầu truy cập trực tiếp đến gói trên mạng,
tức là khi nó cần có dữ liệu “thô” mà chưa có sự xử lý giao thức của hệ điều hành.
Mục đích của WinPcap là để cung cấp cách truy cập này đối với nền Win32, nó có
khả năng:
• acketói thô, cả trên máy đang chạy chương trình hoặc thậm chí là ở máy ở
xa.
• Lọc gói theo các luật đã định nghĩa trước trước khi chuyển chúng cho

chương trình ứng dụng.
• Truyền gói thô trên mạng.
Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 4
• Thu thập thông tin thống kê về lưu lượng mạng.
Các khả năng này có được thông qua driver thiết bị được cài đặt bên trong phần
mạng của kernel Win32 (các thư viện DLL).
Loại chương trình nào sử dụng WinPcap:
Giao tiếp lập trình WinPcap được có thể được sử dụng bởi rất nhiều loại công
cụ phân tích, giải quyết sự cố, bảo mật và giám sát. Các loại công cụ điển hình dựa
trên WinPcap là:
• Phân tích giao thức mạng.
• Giám sát mạng.
• Ghi lại lưu lượng mạng.
• Tạo lưu lượng mạng.
• Hệ thống phát hiện xâm nhập mạng (NIDS)
• Các công cụ bảo mật.
Một số chương trình sử dụng thư viện Winpcap trong thực tế
• Wireshark, Ethereal: công cụ bắt gói và phân tích các giao thức.
• TCPdump: công cụ bắt và kết xuất các gói để phân tích.
• Snort: hệ thống phát hiện xâm nhập.
• SSLDump: công cụ phân tích SSLv3/TLS. Nó giải mã các bản ghi SSL và
hiển thị trên stdout.
• Nmap: một tiện ích scan port trên mạng.
b. Kiến trúc:

Hình – Kiến trúc WinPcap
BPF(Berkeley Packet Filter) là một thiết bị phần mềm cho phép bắt gói ở
kernel buffer và lọc các gói không mong muốn. Nó đã được chứng minh là một
kiến trúc mạnh mẽ và ổn định, WinPcap giữ lại một số tính năng của nó nhưng

có một số khác biệt trong kiến trúc và trong hành vi bắt gói, nó được xem là
một sự phát triển của BPF.

Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 5

Hình - Winpcap và NPF

Một điều khác biệt quan trọng trong kiến trúc giữa BPF và NPF (Netgroup
Packet Filter) là sự lựa chọn bộ đệm ở mức kernel, sự thực thi bộ đệm được
tối ưu để có thể sao chép các block của gói ở cùng một thời điểm. Điều này là
khó quản lý vì dữ liệu được sao chép không có kích thước cố định (libpcap sử
dụng cùng kích thước với kernel và bộ đệm 32KB) và vì số lượng các bytes
sao chép được cập nhật trong khi vẫn truyền dữ liệu từ kernel đến user. Tiến
trình sao chép sẽ giải phóng phần bộ đệm đã được truyền đi, nó được chạy ở
độ ưu tiên cao hơn nhưng nó không chiếm giữ độc quyền CPU.
Toàn bộ bộ đệm kernel được sao chép bằng hàm read(), vì vậy giảm số
lượng lời gọi hệ thống và do đó giảm số lượng chuyển đổi ngữ cảnh giữa user
và kernel.Vì một chuyển đổi ngữ cảnh yêu cầu lưu trạng thái của tác vụ, nên
một lượng lớn các công việc được giảm xuống. Tuy nhiên, một bộ đệm user
lớn không thuận lợi vì chuyển đổi ngữ cảnh không đáng kể trong khi sự cấp
phát bộ nhớ lại tăng lên. Bộ đệm WinPcap kernel thì lớn hơn (mặc định là
1MB) so với BPF. Một bộ đệm nhỏ sẽ cản trở tiến trình bắt gói đặc biệt là
trong trường hợp ứng dụng không thể đọc nhanh bằng driver capture trong một
khoảng giới hạn thời gian. Ngược lại thì bộ đệm user nhỏ hơn với mặc định là
256KB. Cả bộ đệm kernel và user có thể được thay đổi ở thời điểm chạy.

Kích thước của bộ đệm user rất quan trọng bởi vì nó xác định số lượng tối
đa dữ liệu được sao chép từ kernel đến user trong lời gọi hệ thống. Khi giá trị
này lớn, kernel đợi khoảng thời gian trước khi chuyển dữ liệu đến user. Điều

này bảo đảm số lượng nhỏ các lời gọi hệ thống, công suất sử dụng CPU ít hơn,
đó là điều tốt cho các chương trình ứng dụng như sniffer. Nói cách khác,
khigiá trị nhỏ thì kernel thì kerlel sẽ sao chép các gói ngay khi ứng dụng sẵn
sàng nhận chúng. Điều này rất tốt trong ứng dụng thời gian thực cần có sự đáp
ứng tốt từ kernel. NPF hoàn toàn có thể cấu hình được và nó cho phép user
chọn giữa hiệu quả tốt nhất hay sự đáp ứng tốt nhất. WinPcap chứa một cặp lời
gọi hệ thống có thể được sử dụng để thiết lập cả timeout sau khi hết hạn đọc và
số lượng nhỏ nhất dữ liệu có thể được truyền đến ứng dụng. Các gói được sao
chép khi số lượng dữ liệu là nhỏ nhất hoặc thời gian đọc hết hạn. Mặc định,
Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 6
timeout là 1giây và lượng dữ liệu nhỏ nhất là 16K. Khả năng này được gọi là
“delayed write”.
Đối với WinPcap thì các gói được sao chép hai lần (từ network driver đến
kernel sau đó đến user).
c. Các module:
WinPcap được tạo nên từ 3 module: một ở mức kernel và hai ở mức user:
§ Module đầu tiên là phần kernel (NPF) (file VXD trong Windows
95/98/ME và file SYS trong Windows NT/2000), nó lọc các gói, chuyển
giao chúng đến mức user và chứa một số mã đặt biệt của hệ điều hành
(chẳng hạn timestamp).
§ Module thứ hai là packet.dll, được tạo ra để giao tiếp với packet driver
trong nền Win32. Trên thực tế, mỗi phiên bản Windows cung cấp các
giao tiếp khác nhau giữa kernel và và các ứng dụng mức user: packet.dll
sẽ xử lý những sự khác nhau này, cung cấp các hàm API độc lập. Các
chương trình dựa trên packet.dll có thể bắt được các gói trên mọi nền
Win32 mà không cần phải biên dịch lại.Nó thực thi một tập các thao tác
mức thấp như là lấy tên của adapter hoặc thư viện tải driver, làm hiện
hữu về thông tin đặc trưng của hệ thống như là netmask và một số bộ
đếm phần cứng (số đụng độ trong Ethernet,etc).

§ Module thứ ba là WPcap.dll, nó không phụ thuộc hệ điều hành và chứa
các hàm mức cao chẳng hạn như tạo ra bộ lọc và bộ đệm ở mức user,
cộng với một số chức năng mở rộng như thống kê gói. Như vậy các lập
trình viên có thể truy cập vào hai loại API: một tập các hàm thô chứa
trong packet.dll ánh xạ trực tiếp đến các lời gọi mức kernel và một tập
các hàm mức cao được cung cấp bởi WPcap.dll.

Hình – Packet.dll

Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 7

Hình – Wpcap.dll
3. Giao tiếp với card mạng :
a. NetworkCard Driver và Protocol:

Một network adapter card, tức bảng mạch điều hợp mạng, (đôi khi gọi là
network interface card hay vắn tắt là NIC) là một bảng mạch phần cứng được
cài đặt trong máy tính của bạn để cho phép máy tính hoạt động được trên
mạng. Network adapter card cung cấp một (hoặc nhiều) cổng để cho cáp mạng
được nối vào về mặt vật lý, và về mặt vật lý bảng mạch đó sẽ truyền dữ liệu từ
máy tính tới cáp mạng và theo chiều ngược lại.
Mỗi máy tính trong mạng cần phải có một trình điều khiển (driver) cho
network adapter card, đó là một chương trình phần mềm kiểm soát bảng mạch
mạng. Mỗi trình điều khiển của network adapter card được cấu hình cụ thể để
chạy với một kiểu bảng mạch mạng (network card) nhất định.
Cùng với các bảng mạch mạng và trình điều khiển bảng mạch mạng, một máy
tính mạng cũng cần phải có một trình điều khiển giao thức (protocol driver) mà
đôi khi gọi là một giao thức giao vận hay chỉ vắn tắt là giao thức. Trình điều

khiển giao thức thực hiện công việc giữa phần mềm mạng ở mức trên (giống
như trạm làm việc và máy chủ) và network adapter card. Giao thức đóng gói
dữ liệu cần gửi đi trên mạng theo cách mà máy tính ở nơi nhận có thể hiểu
được.
Qui trình kết hợp một trình điều khiển giao thức với network adapter card
tương ứng, và thiết lập một kênh truyền thông giữa hai thứ đó gọi là kết gắn
(binding).

Để hai máy tính truyền thông với nhau trên một mạng, chúng phải dùng cùng
một giao thức Đôi khi một máy tính được cấu hình để dùng nhiều giao thức.
Trong trường hợp này, hai máy tính chỉ cần một giao thức chung là có thể
truyền thông với nhau.
Trong một số mạng, mỗi trình điều khiển network adapter card và giao thức
của máy tính là một phần mềm riêng. Trong một số mạng khác thì chỉ một
phần mềm gọi là monolithic protocol stack thực hiện các chức năng của cả
trình điều khiển network adapter card và giao thức.
Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 8
b. "Network Driver Interface Specification" (NDIS) là gì ?
Tạm dịch là tiêu chuẩn giao tiếp thiết bị mạng. Đây là tập hợp các hàm API
liên quan đến NICs. Được hợp tác phát triển bởi Microsoft và 3Com
Corporation, ngày nay được sử dụng hầu hết trong hệ điều hành Windows.
Nhưng NDIS- wrapper mã nguồn mỡ và dự án Project Evil driver wrapper
cho phép các NDIS sử dụng được trên hệ thống Linux and FreeBSD.
NDIS là chuẩn cung cấp cho việc nói chuyện giữa card mạng (network card)
và các giao thức (protocol) mạng được dùng. NDIS cho phép sử dụng nhiều
giao thức mạng trên cùng một card mạng. Trong trường hợp phải sử dụng một
loại card mạng khác, tức là phải cần trình điều khiển cho card mạng không có
sẵn trong hệ điều hành, NDIS vẫn có thể sử dụng đa giao thức mạng trên card
mạng này.

Khi máy tính sử dụng đa giao thức mạng, các gói tin dữ liệu sẽ được chuyển
đi thông qua giao thức mạng thứ nhất (giao thức này được gọi là primary
protocol), nếu không được máy tính sẽ sử dụng tiếp giao thức thứ hai và cứ thế
tiếp tục.Trên mỗi máy tính được cài đặt Windows NT, mỗi một giao thức
mạng được đặt sử dụng trên một card mạng cần phải được đặt một giá trị gọi là
LAN adapter number trên card mạng đó.
c. Các kiểu driver NDIS :
Có 3 kiểu driver được hỗ trợ trên windows là:
• Driver card mạng – (Network Interface card (NIC) drivers).
• Driver giao thức trung gian (Intermediate Protocol drivers).
• Driver giao thức mức cao (Upper-level protocol drivers).
Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 9

Hình - Minh họa các thành phần driver mạng của Windows NT
d. Driver card mạng (NIC) :
Driver của card mạng được quản lý bởi chính nó .Driver card mạng giao tiếp
trực tiếp với phần cứng tại cạnh thấp và tại cạnh trên cung cấp một giao tiếp
với driver mức cao hơn để :
• Gửi và nhận gói .
• Khởi động lại NIC
• Tắt NIC.
• Truy vấn NIC.
• Thiết lập các thực thi đặc trưng của NIC.
Driver NIC có hai kiểu :
Miniport DriversMiniport drivers : thực thi tác vụ phần cứng đặc
trưng cần thiết cho việc quản lý NIC, bao gồm gửi và nhận dữ liệu trên
NIC. Miniport drivers không thực hiện lời gọi hệ điều hành trực tiếp,
thay vào đó nó gọi các hàm cung cấp bởi NDIS.
Full NIC Drivers : quản lý cả phần cứng đặc trưng và tác vụ đặc trưng

của hệ điều hành thường được dùng bởi NDIS. Full NIC drivers phải
luôn duy trì một thông tin cho dữ liệu nhận .
Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 10
ü Driver giao thức trung gian -Intermediate Protocol Driver? nằm giữa
legacy protocol driver và miniport drivers. Để lớp điều khiển vận
chuyển mức cao tương tự như miniport driver . Tạo sự chuyển đổi môi
trường giữa lớp điều khiển cao và lớp miniport trong việc quản lý
những kiểu môi trường truyền chưa.
ü Driver giao thức mức cao - Upper Level Protocol Driver ? là giao thức
điều khiển mức trên thực thi các một giao diện TDI hay những giao
diện ứng dụng đặc trưng để cung cấp dịch vụ cho người sử dụng. Như
điều khiển tạo gói, chép dữ liệu vào gói, gửi gói đi xuống điều khiển
mức thấp bằng các gọi NDIS. Cung cấp một giao tiếp giao thức với
mức thấp để nhận gói .
Làm sao chương trình ứng dụng có thể tương tác với trình điều khiển? Tất cả
các trình điều khiển ( driver ) được viết bởi Windows NT phải có một hàm
DriverEntry . Tất cả các hàm khác của trong trình điều khiển sẽ được trình
ứng dụng nhận biến thông thường trình DriverEntry. Trình ứng dụng gọi
những hàm như CreateFile, ReadFile vv sẽ trả về bộ quản lý nhập/xuất
mạng, bộ phận này sẽ tạo ra một IRP (input/output Request Packet) chịu trách
nhiệm đến mỗi lời gọi hàm.
Ví dụ:
Chương trình ứng dụng gọi một hàm trong dll, hàm này sẽ trả về một điểm vào
trong trình điều khiển PACKET.
Trình điều khiển sử dụng các hàm của NDIS.SYS để giao tiếp với card mạng.

4. Nhận dạng giao thức :
a. Luồng dữ liệu trong mạng TCP/IP :
Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc

Xây dựng công cụ đọc gói tin trên mạng Trang 11

Luồng dữ liệu trong mạng TCP/IP cũng đi qua nhiều lớp như : Lớp ứng dụng ,
lớp TCP/UDP, lớp IP và lớp Ethernet, mỗi lớp sẽ đóng gói header của mình
vào dữ liệu chung và gửi cho lớp dưới.
b. Nhận dạng một gói TCP/IP :
Nhận dạng gói IP : Để nhận dạng một gói TCP/IP thì ta dựa vào frame Ethernet :

ü Ethernet frame chứa 14 byte header
ü Destination address (6 Bytes) : Địa chỉ đích
ü Source address (6 Bytes) : Địa chỉ nguồn .
ü Frame type (2 Bytes) : Giao thức lớp trên của frame.
Nếu gói là một gói IP đúng thì giá trị của type trường type sẽ là 08 0016.

Nhận dạng gói TCP/UDP/ICMP : Dựa vào định dạng gói IP , trình bày trong
hình bên dưới trong đó trường Protocol , với chiều dài 1byte dùng để nhận dạng
giao thức lớp trên của IP
Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 12

Một số giá trị thông dụng của trường protocol :
Protocol Value(Decimal)
TCP 6
UDP 17
ICMP 1
IGMP 2
Bảng các giá trị và giao thức lớp trên tương ứng của trường Protocol
Nhận dạng HTTP :
]
Định dạng header TCP.

HTTP dựa vào giao thức TCP . Để nhận dạng gio thức HTTP cần phải căn cứ
vào port của TCP . Nếu source port có giá trị là 80 thì packet nhận về là HTTP
response . Nếu destination port có giá trị là 80 thì gói nhận về là mọt HTTP
request .

Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 13
Phần II : Thực hiện chương trình DEMO VietCap

1. Giới thiệu về thư viện jpcap :
Đây là một thư viện đóng bao từ pcap dùng cho Java .
Thư viện gồm hai gói :
Gói jpcap và gói jpcap.packet
2. Các đối tượng trong jpcap:
Interfaces
Ø PacketReceiver : Giao diện phát sinh khi nhận gói.
Lớp :
Ø JpcapCaptor : Đối tượng dùng để bắt gói , đọc gói từ file capture.
Ø JpcapSender : Đối tượng dùng để gửi gói .
Ø JpcapWriter : Đối tượng dùng để lưu môt gói vào file.
Ø NetworkInterface : Đối tượng dùng để quản lý và trình bày Interface.
Ø NetworkInterfaceAddress : Đối tượng trình bày địa chỉ mạng gắn với
một interface
a. Chi tiết về đối tượng JpcapCaptor :

Các trường :
Ø int dropped_packets : Số lượng gói bị hủy.
Ø protected int ID : Chỉ số nhận dạng của đối tượng

Ø protected static int MAX_NUMBER_OF_INSTANCE : Số thể hiện tối
đa
Ø int received_packets : Số lượng gói nhận được.
Các phương thức :
Ø void breakLoop(): Thiết lập một cờ được hàm processPacket() và loopPacket()
nhận được và thoát khỏi vòng lặp.
Ø void close() : đóng đối tượng
Ø intdispatchPacket(int count,PacketReceiver handler) : Hàm capture gói và
trả gói nhận được cho handler.
Ø static NetworkInterface[] getDeviceList() : Hàm trả về danh sách các
interface trên máy .
Ø java.lang.String getErrorMessage() : Hàm trả về một thông điệp lỗi.
Ø JpcapSender getJpcapSenderInstance() : Hàm lấy về thể hiện đối tượng
JcapSender dùng chung interface với đối tượng hiện.
Ø Packet getPacket() Trả về một gói capture được
Ø boolean isNonBlockinMode() : Kiểm tra chế độ thiết lập hiện tại là “non-
blocking” hay không ?
Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 14
Ø int loopPacket(int count, PacketReceiver handler) : Capture liên tiếp các gói
và trả vào hander
Ø static JpcapCaptor openDevice(NetworkInterface intrface, int snaplen,
boolean promisc, int to_ms) throws java.io.IOException
o Chức năng : Khởi tạo interface , trả về một thể hiện của lớp
JpcapCaptor
o Tham số :
§ intrface – Inteface mạng để capture.
§ snaplen –Số lượng các byte capture tại một thời điểm .
§ promisc – Nếu đúng, interface trả lại chế promiscuous
§ to_ms – Thơi gian hết h processPacket()

o Kết quả : trả lại thể hiện của đối tượng Jpcap.
o Ngoại lệ: java.io.IOException – Phát sinh khi interface chỉ định không
thể mở được.

Ø static JpcapCaptor openFile(java.lang.String filename) : Mở file dump
được tạo mởi tcpdump hay Ethereal và trả lại thể hiện của đối tượng.
Ø int processPacket(int count, PacketReceiver handler) : Hàm capture gói và
trả về handler
Ø void setFilter(java.lang.String condition, boolean optimize)
o Chức năng :Thiết lập một bộ lọc
o Tham số :
§ condition : Điều kiện .
§ optimize : True là điều kiện optimize
Ø void setNonBlockingMode(boolean nonblocking) : Thiết lập chế độ hay
không chế độ"non-blocking"
Ø void updateStat() : Cập nhận received_packets và dropped_packets.

b. Chi tiết lớp JpcapSender:
Các trường :
Ø protected int ID : Chỉ số ID
Ø protected static boolean[] instanciatedFlag : cờ liên quan đến các thể hiện
Ø protected static int MAX_NUMBER_OF_INSTANCE : Số lượng tối đa các
thể hiện.
Các phương thức :
Ø void close() : Đóng đối tượng .
Ø static JpcapSender openDevice(NetworkInterface device) : Mở một
interface . Ném ra môt ngoại lệ nếu interface không thể mở được.
Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 15
Ø static JpcapSender openRawSocket() : Mở một một IP socket thô để gửi

một gói . Khi gửi một gói theo socket thô , tiêu đề của lớp datalink của gói
được bỏ qua , ( hệ điều hành tự thêm vào )
Ø protected int reserveID() :Trả lại ID.
void sendPacket(Packet packet) : Gửi một packet

c. Chi tiết về đối tượng JpcapWriter:
Các phương thức :
Ø void close() : Đóng file trên mạng
Ø public static JpcapWriter
openDumpFile(JpcapCaptor jpcap,java.lang.String filename) throws
java.io.IOException
o Chức năng : Mở file để lưu gói capture vào .
o Tham số :
§ jpcap – Thể hiện của đối tượng Jcap được sử dụng để
§ filename – tên file
o Throws: IOException – Ném ra ngoại lệ nếu không thể mở được file .
Ø void writePacket(Packet packet) : Lưu gói vào file
d. Chi tiết đối tượng NetworkInterface:
Các trường :
Ø NetworkInterfaceAddress[] addresses :Địa chỉ mạng được gắn vào
interface.
Ø java.lang.String datalink_description : Mô tả về lớp datalink của interface.
Ø java.lang.String datalink_name : Tên của lớp datalink của interface
Ø java.lang.String description : Mô tả về interface ví dụ : “3Com…”.
Ø Boolean loopback : TRUE nếu đây là interface loopback .
Ø byte[] mac_address : Địa chỉ MAC của Inteface
Ø java.lang.String name : Tên của interface.

e. Chi tiết đối tượng NetworkInterfaceAddress:
Các trường :

Ø java.net.InetAddress address : Địa chỉ của interface
Ø java.net.InetAddress broadcast : Địa chỉ Broadcast của Inteface.
Ø java.net.InetAddress destination :Địa chỉ đích của Interface ,trong kết nối
P2P
Ø java.net.InetAddress subnet : Địa chỉ Subnet mask của interface.
Ø NetworkInterfaceAddress(byte[] address, byte[] subnet,byte[] broadcast,
byte[] destination) : Hàm tạo

Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 16
Phần III : ỨNG DỤNG

1. Các kiểu gói:
• Unicast.
• Multicast
• Broadcast.
Khi card mạng chuyển gói đi thì đồng thời nó cũng copy một bản cho capture. Đối với
các gói tin không phải unicast, chương trình capture được đặt ở chế độ “không xác định
kiểu”.
2. Ethernet chia sẽ:

Hình - Capture trên môi trường Ethernet chia sẽ.
Các máy nối nhau qua 1 HUB và chương trình capture được tất cả gói tin.
Mạng không dây thì sẽ giải quyết vấn đề này theo kiểu khác.
• Ưu điểm: dễ capture.
• Khuyết điểm: vì môi trường chia sẽ nên băng thông thấp.
3. Ethernet chuyển mạch:
Các máy nối nhau qua 1 Switch và chương trình capture của máy thứ ba không thể
capture tất cả gói tin bởi vì cơ chế chuyển mạch của switch sẽ chuyển đến đúng port
của máy đích nên ta chỉ có thể capture trên máy cần quan tâm.

Hình - capture trên môi trường Ethernet chuyển mạch.
Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Xây dựng công cụ đọc gói tin trên mạng Trang 17

Hình - capture trên môi trường Ethernet chuyển mạch trên máy cần quan tâm.
4. Môi trường hỗn hợp:
Kết hợp 2 kiểu trên để capture nhóm máy cần quan tâm.
`
Máy A
Switch (song công)
`
Máy B
Hub (bán song công)
capture nhóm máy cần quan tâm
`
Máy C

5. Capture theo cơ chế Man-In-The-Middle:
Dùng 2 card mạng như hình vẽ:

Cách này sẽ làm cho PC capture giống như 1 bridge và hoạt động ở chế độ
song công, ta chỉ cần capture trên 1 NIC. Một số chương trình hỗ trợ cấu hình:
• Linux: brcfg
• Free BSD: brconfig

Phần IV: TÀI LIỆU THAM KHẢO
• Trang NDIS .Link http://www.ndis.com/
• Sách trắng “Monitoring Ethernet Network Activity With NDIS Drivers” .
Link : http://www.cswl.com/whitepapers/ethernet-network.html

• Bài báo Thiết lập capture Ethernet . Link:
http://wiki.wireshark.org/CaptureSetup/Ethernet
• Trang Winpcap .Link http://www.winpcap.org/
• Bài báo “An Architecture for High Performance Network Analysis” . Link :
http://www.winpcap.org/docs/iscc01-wpcap.pdf