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ố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ích lưu lượ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ưu lượ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ưu lượ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ưu lượ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ưu lượ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ưu lượ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ưu lượ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ưu lượ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ên tmux 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ích lưu lượng tổng quát.

Thứ Hai, 28/07/2008 09:30
31 👨 10.281
0 Bình luận
Sắp xếp theo