TCPDUMP là công cụ rất hữu ích đối với những ai sử dụng hệ điều hành Unix/Linux , bạn có thể sử dụng công cụ này để kiểm tra lưu lượng mạng và lưu lại những gói tin bắt được. Vậy TCPDUMP là gì? Để hiểu rõ hơn về thuật ngữ này, bạn hãy cùng Tino Group tìm hiểu qua bài viết dưới đây nhé!
TCPDUMP là gì?
Định nghĩa TCPDUMP
TCPDUMP thực chất là công cụ được phát triển nhằm mục đích nhận diện và phân tích các gói dữ liệu mạng theo dòng lệnh. TCPDUMP cho phép khách hàng chặn và hiển thị các gói tin được truyền đi hoặc được nhận trên một mạng có sự tham gia của máy tính.
Hiểu đơn giản, TCPDUMP là phần mềm bắt gói tin trong mạng làm việc trên hầu hết các phiên bản hệ điều hành Unix/Linux. TCPDUMP cho phép bắt và lưu lại những gói tin bắt được, từ đó chúng ta có thể sử dụng để phân tích.
TCPDUMP được xem là 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.
TCPDUMP tồn tại dưới hình thức nào?
TCPDUMP xuất ra màn hình nội dung các gói tin (chạy trên card mạng mà máy chủ đang lắng nghe) phù hợp với biểu thức logic chọn lọc mà khách hàng nhập vào. Với từng loại tùy chọn khác nhau khách hàng có thể xuất những mô tả về gói tin này ra một file “pcap” để phân tích sau, và có thể đọc nội dung của file “pcap” đó với option –r của lệnh TCPDUMP, hoặc sử dụng các phần mềm khác như là : Wireshark.
Trong trường hợp không có tùy chọn, lệnh TCPDUMP sẽ tiếp tục chạy cho đến khi nào nó nhận được một tín hiệu ngắt từ phía khách hàng. Sau khi kết thúc việc bắt các gói tin, TCPDUMP sẽ báo cáo các cột sau:
- Packet capture: số lượng gói tin bắt được và xử lý.
- Packet received by filter: số lượng gói tin được nhận bởi bộ lọc.
- Packet dropped by kernel: số lượng packet đã bị dropped bởi cơ chế bắt gói tin của hệ điều hành.
Những lợi ích khi sử dụng TCPDUMP
Như định nghĩa ở trên, TCPDUMP giúp bạn phân gói các dữ liệu mang theo dòng lệnh. Cụ thể TCPDUMP giúp bạn:
- Nhìn thấy được các bản tin DUMP trên terminal
- Bắt các bản tin và lưu vào định dạng PCAP (có thể đọc được bởi Wireshark)
- Tạo được các bộ lọc Filter để bắt các bản tin cần thiết, ví dụ: http, ftp, ssh, …
- Có thể nhìn được trực tiếp các bản tin điều khiển hệ thống Linux sử dụng wireshark
TCPDUMP là một công cụ vô cùng hữu ích đối với khả năng capturing packets khá mạnh mẽ. Nó hoạt động trên network layer và có thể capture tất cả các packets ra vào máy tính. Ngoài ra, có thể sử dụng TCPDUMP để capture và save các packets tới một file nào đó và phân tích sau.
Định dạng chung của một dòng giao thức TCPDUMP
Định dạng chung của một dòng giao thức tcmpdump cụ thể là: time-stamp src > dst: flags data-seqno ack window urgent options
Time-stamp: hiển thị thời gian gói tin được capture.
Src và dst: hiển thị địa IP của người gởi và người nhận.
Cờ (Flag) bao gồm các giá trị sau:
- S(SYN): Được sử dụng trong quá trình kết nối của giao thức TCP.
- .(ACK): Được sử dụng để thông báo cho bên gửi biết là gói tin đã nhận được dữ liệu thành công.
- F(FIN): Được sử dụng để đóng kết nối TCP.
- P(PUSH): Thường được đặt ở cuối để đánh dấu việc truyền dữ liệu.
- R(RST): Được sử dụng khi muốn thiết lập lại đường truyền.
Data-sqeno: Số sequence number của gói dữ liệu hiện tại.
ACK: Mô tả số sequence number tiếp theo của gói tin do bên gởi truyền (số sequence number mong muốn nhận được).
Window: Vùng nhớ đệm có sẵn theo hướng khác trên kết nối này.
Urgent: Cho biết có dữ liệu khẩn cấp trong gói tin
Định dạng đầu ra TCPDUMP
Định dạng bản ghi được sử dụng để ghi các gói mạng vào tệp đã trở thành một tiêu chuẩn được nhiều trình đánh giá gói tin và phân tích lưu lượng mới hơn áp dụng.
Tiêu chuẩn này khá phức tạp và được điều chỉnh cho từng giao thức. Định dạng được gọi là pcap, là tên của quá trình bắt gói được TCPDUMP sử dụng. Các tệp ở định dạng này thường có phần mở rộng .pcap.
Các thủ thuật sử dụng TCPDUMP
Một số tùy chọn thông dụng trong lệnh TCPDUMP
Lệnh TCPDUMP được theo sau bởi các tùy chọn, chúng được biểu thị bằng một dấu gạch nối theo sau là một chữ cái. Dưới đây là danh sách các tùy chọn:
- -i: Sử dụng tùy chọn này khi khách hàng muốn chụp các gói tin trên một interface được chỉ định.
- -D: Khi sử dụng tùy chọn này, TCPDUMP sẽ liệt kê ra tất cả các interface đang hiện hữu trên máy tính mà nó có thể capture được.
- -c N : khi sử dụng tùy chọn này, TCPDUMP sẽ dừng hoạt động sau khi capture N gói tin.
- -n: Khi sử dụng tùy chọn này, TCPDUMP sẽ không phân giải từ địa chỉ IP sang hostname.
- -nn: Tương tự như tùy chọn –n, tuy nhiên TCPDUMP sẽ không phân giải cả portname.
- -v:Tăng số lượng thông tin về gói tin mà bạn có thể nhận được, thậm chí có thể tăng thêm với option –vv hoặc –vvv.
- -s: Định nghĩa snaplength (kích thước) gói tin sẽ lưu lại, sử dụng 0 để mặc định.
- -q: Khi sử dụng tùy chọn này, TCPDUMP sẽ hiển thị ít thông tin hơn.
- -w filename: Khi sử dụng tùy chọn này, TCPDUMP sẽ capture các packet và lưu xuống file chỉ định.
- -r filename: Sử dụng kèm với tùy chọn –w, dùng để đọc nội dung file đã lưu từ trước.
- -x: Hiển thị dữ liệu của gói tin capture dưới dạng mã Hex.
- -xx: Tương tự tùy chọn –x tuy nhiên sẽ chuyển đổi cả ethernet header.
- -X: Hiển thị dữ liệu của gói tin capture dưới dạng mã Hex và ASCII
- -XX: Tương tự như tùy chọn –X tuy nhiên sẽ chuyển đổi luôn cả ethernet header.
- -A: Hiển thị các packet được capture dưới dạng mã ACSII.
- -S: Khi TCPDUMP capture packet, thì nó sẽ chuyển các số sequence number, ACK thành các relative sequense number, relative ACK. Nếu sử dụng option –Snày thì nó sẽ không chuyển mà sẽ để mặc định.
- -F filename: Dùng để filter các packet với các luật đã được định trước trong tập tin filename.
- -e: Khi sử dụng tùy chọn này, thay thì hiển thị địa chỉ IP của người gửi và người nhận, TCPDUMP sẽ thay thế các địa chỉ này bằng địa chỉ MAC.
- -t: Khi sử dụng tùy chọn này, TCPDUMP sẽ bỏ qua thời gian bắt được gói tin khi hiển thị cho khách hàng.
- -tt: Khi sử dụng tùy chọn này, thời gian hiển thị trên mỗi dòng lệnh sẽ không được format theo dạng chuẩn.
- -ttt: Khi sử dụng tùy chọn này, thời gian hiển thị chính là thời gian chênh lệnh giữa thời gian TCPDUMP bắt được gói tin của gói tin và gói tin đến trước nó.
- -tttt: Khi sử dụng tùy chọn này, sẽ hiển thị thêm ngày vào mỗi dòng lệnh.
- -ttttt: Khi sử dụng tùy chọn này, thời gian hiển thị trên mỗi dòng chính là thời gian chênh lệch giữa thời gian TCPDUMP bắt được gói tin của gói tin hiện tại và gói tin đầu tiên.
- -K: Với tùy chọn này, TCPDUMP sẽ bỏ qua việc checksum các gói tin.
- -N: Khi sử dụng tùy chọn này, TCPDUMP sẽ không in các quality domain name ra màn hình.
- -B size: Sử dụng tùy chọn này để cài đặt buffer_size.
- -L: Hiển thị danh sách các datalink type mà interface hỗ trợ.
- -y: Lựa chọn datalinktype khi bắt các gói tin.
Những thủ thuật thường dùng với TCPDUMP
- Hiển thị tất cả các interface trên máy tính mà TCPDUMP có thể lắng nghe được.
# tcpdump -D - Lọc các gói tin trên card mạng eth0, có địa chỉ đích là 192.168.1.0 hoặc địa chỉ nguồn là 192.168.1.0
# tcpdump –i eth0 host 192.168.1.0
# tcpdump –i eth0 src 192.168.1.0 or host 192.168.1.0 - Lọc các gói tin ARP chạy trên card mạng eth0, xuất phát từ dãy mạng 192.168.1.0/24
# tcpdump –i eth0 arp src net 192.168.1.0/24 - Lọc các gói tin ICMP chạy trên mạng eth0, đi đến máy đích có địa chỉ MAC là 00-23-14-43-E8-08. Khi xuất ra màn hình không cho phân giải tên miền, cũng như không sử dụng số relative sequence. Lưu output vào file test.cap. Khi đọc file đó lên: không hiển thị số sequence number, không phân giải hostname.
# tcpdump –i eth0 –w test.cap ether dst host 00:23:14:42:E8:08
# tcpdump –Snnr test.cap - Lọc gói tin ICMP request and reply: sử dụng option icmp[icmptype]
# tcpdump icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply - Lọc một số cờ TCP bằng tcpdump: sử dụng option tcp[tcpflags] && tcp-syn!=0. (Giá trị của các cờ TCP lần lượt là U (32) – A (16) – P (8) – R (4) – S (2) – F (1)).
- Lọc các gói tin TCP có cờ URG được bật:
# tcpdump tcp[13] & 2 != 0 hay #tcpdump tcp[tcpflags] & tcp-urg != 0 - Lọc các gói tin TCP có cờ ACK được bật:
# tcpdump tcp[13] & 16 != 0 hay #tcpdump tcp[tcpflags] & tcp-ack != 0 - Lọc các gói tin TCP có cờ PSH được bật:
# tcpdump tcp[13] & 8 != 0 hay #tcpdump tcp[tcpflags] & tcp-push != 0 - Lọc các gói tin TCP có cờ SYN/ACK được bật:
# tcpdump tcp[13]=18
Mặc dù nhìn có vẻ hơi phức tạp, nhưng nếu sử dụng thành thạo TCPDUMP, bạn sẽ thấy lệnh này rất tuyệt vời. Qua bài viết trên, hy vọng bạn sẽ nắm được những thông tin cơ bản về TCPDUMP và biết cách sử dụng lệnh này. Chúc các bạn thành công.
Những câu hỏi thường gặp về TCPDUMP
Làm sao để dừng lệnh TCPDUMP?
Bạn hãy sử dụng tổ hợp phím Ctrl + C để gửi tín hiệu ngắt và dừng lệnh. Sau khi bắt được các gói, TCPDUMP sẽ dừng lại. Khi không có giao diện nào được chỉ định, TCPDUMP sử dụng giao diện đầu tiên mà nó tìm thấy và kết xuất tất cả các gói đi qua giao diện đó.
TCPDUMP có miễn phí không?
TCPDUMP là phần mềm mã nguồn mở và bất kỳ ai cũng có thể đóng góp để phát triển. Phần mềm này được phân phối theo giấy phép BSD và hoàn toàn miễn phí.
Hệ điều hành Windows có sử dụng được TCPDUM không?
Có một phiên bản TCPDUMP trên Windows được gọi là Windump và dựa vào Wincap để chụp gói tương tự như TCPDUMP cho Linux
WinPcap thuộc sở hữu của Riverbed Technology, công ty này cũng là nhà tài trợ chính của Wireshark – một công cụ dò tìm gói tin nổi tiếng và được sử dụng rộng rãi nhất trên thế giới. Có một phiên bản không dây của WinPcap được gọi là AirPcap. Bạn có thể tải xuống WinDump, WinPcap và AirPcap miễn phí từ trang web WinPcap.
TCPDUMP có hỗ trợ cho an ninh mạng không?
TCPDUMP được xem là 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. Vì vậy, đây là một bổ sung quan trọng cho bất kỳ chuyên gia an ninh mạng nào.