TCPDUMP và các thủ thuật sử dụng

Với bài viết này, VinaHost sẽ giới thiệu đến bạn TCPDUMP và các thủ thuật sử dụng TCPDUMP. Đây là công cụ được phát triển nhằm mục đích phân tích các gói dữ liệu mạng theo dòng lệnh. Nó 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 mà máy tính có tham gia.
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.
1. Định dạng chung của một dòng giao thức tcpdump 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 thì bao gồm các giá trị sau:
  • S(SYN):  Được sử dụng trong quá trình bắt tay 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.
2. Một số tùy chọn thông dụng trong lệnh Tcpdump:
  • -i: Sử dụng option 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 option 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 option này, tcpdump sẽ dừng hoạt động sau khi capture N gói tin.
  • -n: Khi sử dụng option này, tcpdump sẽ không phân giải từ địa chỉ IP sang hostname.
  • -nn: Tương tự như option –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 option này thì lệnh tcpdump sẽ hiển thị ít thông tin hơn.
  • -w filename: Khi sử dụng option 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 option –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ự option –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ư option –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 option 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 option 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 option 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 option 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 option này, sẽ hiển thị thêm ngày vào mỗi dòng lệnh.
  • -ttttt: Khi sử dụng option 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 option này tcpdump sẽ bỏ qua việc checksum các gói tin.
  • -N: Khi sử dụng option này tcpdump sẽ không in các quality domain name ra màn hình.
  • -B size: Sử dụng option 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.
3. Một số bộ lọc cơ bản:
  • dst A: Khi sử dụng option này, tcpdump sẽ chỉ capture các gói tin có địa chỉ đích là “A”, có thể sử dụng kèm với từ khóa net để chỉ định một dãy mạng cụ thể. Ví dụ: tcpdump dst net 192.168.1.0/24.
  • src A: Tương tự như option dst, nhưng thay vì capture các gói tin có địa chỉ đích cụ thể thì nó sẽ capture các gói tin có địa chỉ nguồn như quy định.
  • host A: Khi sử dụng option này, tcpdump sẽ chỉ capture các gói tin có địa chỉ nguồn hoặc địa chỉ đích là “A”.
  • port / port range: Khi sử dụng option này, tcpdump sẽ chỉ capture các gói tin có địa chỉ port được chỉ định rõ, hoặc nằm trong khoảng range định trước. Có thể sử dụng kèm với option dst hoặc src.
  • less: Khi sử dụng từ khóa này, tcpdump sẽ lọc (filter) các gói tin có dung lượng nhỏ hơn giá trị chỉ định.
  • greater: Khi sử dụng từ khóa này, tcpdump sẽ lọc (filter) các gói tin có dung lượng  cao hơn giá trị chỉ định.
  • (ether | ip) broadcast: Capture các gói tin ip broadcast hoặc ethernet broadcast.
  • (ether | ip | ip6) multicast: Capture các gói tin ethernet, ip , ipv6 multicast.
  • Ngoài ra, tcpdump còn có thể capture các gói tin theo các protocol như : udp, tcp, icmp, ipv6  (chỉ cần gõ trực tiếp các từ khóa vào là được). Ví dụ: tcpdump icmp
Một số kết hợp trong tcpdump:
  • AND: Sử dụng từ khóa and hoặc &&.
  • OR: Sử dụng từ khóa or hoặc ||.
  • EXCEPT: sử dụng từ khóa not hoặc !.
  • Ngoài ra để gom nhóm các điều kiện ta có thể dùng cặp từ khóa ‘’.  Ví dụ: tcpdump –i eth0 ‘dst host 192.168.1.1 or 192.168.1.10 or 192.168.1.11’
4. Một số ví dụ của 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
 Chúc bạn thành công!

Powered by WHMCompleteSolution