Sử dụngtcpdumpđể
phân tíchlưulượng
Chad Perrin
Tcpdump là công cụ trụ cột trong việc gỡ rối và kiểm tra vấn
đề kết nối mạng và bảo mật trước đây, nó đã từng là công cụ
đã được các chuyên gia trên khắp thế giới tín nhiệm về sự hữu
dụng. Một công cụ dòng lệnh không thực sự có nhiều các họa
tiết đẹp mắt so với các công phân tíchlưulượng khác như
Ettercap và Wireshark, cả hai sản phẩm này đều cung cấp các
chức năng kiểm tra gói dữ liệu bằng một giao diện khá thuận
tiện. Tương phản lại với các công cụ như vậy, tcpdump lại chỉ
là một công cụ dòng lệnh với các tùy chọn được chỉ định tại
thời điểm đó và cho ra các kết quả dưới dang đầu ra chuẩn.
Điều này tạo một cảm giác khá nguyên thủy với một số người
dùng và khó sửdụng đối với họ, tuy nhiên tiện ích này lại
thực sự là một công cụ mạnh và linh hoạt.
Các tùy chọn
Tiện ích tcpdump cung cấp một khá nhiều các tùy chọn, ở đây
chúng tôi chỉ giới thiệu cho các bạn một số trong chúng:
-A: In các gói theo mã ASCII.
-c N: Ký tự N ở đây là số, tùy chọn này thông báo cho
tcpdump biết để thoát sau gói N.
-i interface: Capturre các gói trên giao diện mạng nào
đó.
-n: Không giải quyết các địa chỉ cho các tên.
-q: Cung cấp đầu ra ngắn để các dòng đầu ra ngắn hơn.
-r filename: Đọc các gói từ một file cụ thể thay cho một
giao diện mạng, thường được sửdụng sau khi các gói dữ liệu
thô đã được ghi vào một file với tùy chọn –w.
-t: Không in tem thời gian trên mỗi dòng đầu ra.
-v: Cung cấp đầu ra dài hơn. Dài hơn nữa với -vv, vào
thậm chí còn cả -vvv.
-w filename: Ghi các gói dữ liệu thô vào một file nào đó
Các biểu thức
Tiện ích tcpdump cũng hỗ trợ các biểu thức dòng lệnh, vẫn
được sửdụngđể định nghĩa các nguyên tắc lọc để bạn có
được chính xác lưulượng muốn xem, bỏ qua các gói không
cần quan tâm đến. Các biểu thức gồm có một số các primitive
(mẫu), các thuật ngữ modifier (từ bổ nghĩa) và tùy chọn. Các
primitive và modifier không thiết lập một danh sách đầy đủ
nhưng chúng chính là những gì hữu dụng nhất.
Primitive (mẫu)
dst foo: Chỉ định một địa chỉ hoặc một hostname nhằm
hạn chế các gói được capture về mặt lưulượng gửi đến một
host nào đó.
host foo: Chỉ định một địa chỉ hoặc một hostname nhằm
hạn chế các gói đã được capture về mặt lưulượng đến và đi
đối với một host nào đó.
net foo: Chỉ định một mạng hoặc một đoạn mạng sử
dụng ghi chú CIDR để hạn chế sự capture gói.
proto foo: Chỉ định một giao thức nhằm hạn chế các gói
đã được capturre về mặt lưulượng mạng đang sửdụng giao
thứ đó.
src foo: Chỉ định một địa chỉ hoặc một hostname nhằm
hạn chế các gói được capture đối với lưulượng được gửi bởi
một host nào đó.
Modifiers (từ bổ nghĩa)
and: Sửdụng modifier này nhằm trói buộc các mẫu
cùng nhau khi bạn muốn hạn chế các gói đã được capture để
có được các yêu cầu cần thiết của các biểu thức trên cả hai
phía của and.
not: Sửdụng từ bổ nghĩa này trước một mẫu khi bạn
muốn hạn chế các gói đã được capturre để không có được các
yêu cầu của biểu thức theo sau.
or: Sửdụng nhằm nhằm trói buộc các mẫu cùng nhau
khi bạn muốn hạn chế các gói đã được capture để có được các
yêu cầu cần thiết của một hoặc nhiều biểu thức trên phía của
or.
Ví dụ
Tất cả các tùy chọn, primitive và modifier này, cùng với một
số tùy chọn khác được liệt kê trong trang chính của tcpdump
có thể được sửdụngđể xây dựng các lệnh rất cụ thể nhằm
cung cấp đầu ra chính xác.
tcpdump -c 50 dst foo cho bạn các thông tin có thể nhận
ra được nguồn của một lưulượng nặng gửi đến và rất có thể
làm quá tải máy chủ với hostname “foo”, kết xuất 50 gói đầu
tiên như đầu ra.
tcpdump -c 500 -w `date +"%Y%j%T"`.log kết xuất 500
gói vào một file có tên tem time/date hiện hành (nghĩa là
200820715:16:31.log) để chúng có thể được lọc sau theo các
thông tin mà bạn muốn xem. Chúng tôi có lệnh date +"%Y
%j%T"được lấy bí danh là stamp trong file rc của tiện ích,
chính vì vậy có thể viết ngắn lệnh giống như vậy thành
tcpdump -c 500 -w `stamp`.log, giảm việc phải nhớ tất cả các
tùy chọn định dạng cho lệnh date.
tcpdump proto ssh src or dst foo and src and dst not
bar làm cho hiển thị đầu ra đang được thực hiện hiển thị tất cả
các hoạt động SSH được khởi đầu từ hoặc nhắm đến host
“foo” trừ khi nó đang khởi đầu từ host “bar” hoặc nhắm đến
host “bar”. Nếu foo chỉ được cho là được truy cập thông qua
SSH bởi bar, thì lệnh này sẽ cho phép kiểm tra đang diễn ra
đối với lưulượng SSH chưa được thẩm định gửi đến và
từ foo. Thậm chí bạn còn có thể bắt đầu một số các quá trình
kiểm tra liên tục với tcpdump giống như vậy bên trong một
phiêntmux trên một máy chủ chuyên dụng.
Như những gì bạn thấy, các biểu thức của tcpdump gần như
tương đương với một ngôn ngữ lập trình ở phạm vi đơn giản,
tạo được sựdễ hiểu cho người dùng. Với khả năng mạnh và
sự linh động đó, bạn hoàn toàn có thể không cần đến các công
cụ khác cho các nhiệm vụ phân tíchlưulượng tổng quát.
. Sử dụng tcpdump để phân tích lưu lượng Chad Perrin Tcpdump là công cụ trụ cột trong việc gỡ rối và kiểm tra vấn đề kết. nào đó Các biểu thức Tiện ích tcpdump cũng hỗ trợ các biểu thức dòng lệnh, vẫn được sử dụng để định nghĩa các nguyên tắc lọc để bạn có được chính xác lưu lượng muốn xem, bỏ qua các gói không. chính của tcpdump có thể được sử dụng để xây dựng các lệnh rất cụ thể nhằm cung cấp đầu ra chính xác. tcpdump -c 50 dst foo cho bạn các thông tin có thể nhận ra được nguồn của một lưu lượng