Làm cách nào để chụp gói ack hoặc syn bằng Tcpdump?


48

Tôi muốn sử dụng quy tắc bộ lọc để chỉ chụp các gói ack hoặc syn. Làm thế nào để tôi làm điều này?


Cá nhân tôi sẽ không làm điều này. Tôi sẽ chụp tất cả các gói, sau đó lọc trên các cờ SYN và ACK sau. Nếu bạn đang khắc phục sự cố TCP, bạn hầu như luôn muốn xem toàn bộ cuộc hội thoại, không chỉ là một cái bắt tay hay ACK. Nếu bạn không quan tâm đến tải trọng dữ liệu thực tế, bạn có thể giới hạn kích thước gói tcpdump -s SIZE. Tiêu đề TCP có thể có độ dài thay đổi, do đó, việc chụp -s 128có thể sẽ nhận được tất cả các tiêu đề có thể và có thể là một ít dữ liệu.
suprjami

4
Có thể bạn không khắc phục sự cố TCP. Có thể bạn muốn xem chương trình trò chuyện như thế nào và bạn muốn đếm các kết nối ra bên ngoài của nó. Giống như tôi, bây giờ.
Dan Pritts

Câu trả lời:


81

Các cú pháp lọc pcap sử dụng cho tcpdump nên làm việc một cách chính xác theo cùng một cách trên bộ lọc chụp Wireshark.

Với tcpdump tôi sẽ sử dụng bộ lọc như thế này.

tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"

Kiểm tra trang man tcpdump và chú ý đến tcpflags.

Hãy nhớ kiểm tra các phần trong Wireshark Wiki về các bộ lọc chụp và hiển thị. Thật không may, hai loại bộ lọc sử dụng một cú pháp hoàn toàn khác nhau và các tên khác nhau cho cùng một thứ.

Nếu bạn muốn có một bộ lọc hiển thị thay vì bộ lọc chụp, có lẽ bạn sẽ cần xây dựng một biểu thức kết hợp tcp.flags.ack và tcp.flags.syn. Tôi quen thuộc hơn nhiều với các bộ lọc chụp, vì vậy bạn sẽ phải tự mình làm việc đó.


1
Tôi thích phản ứng của bạn tốt hơn. Có vẻ như bạn đã nỗ lực. Upvote cho bạn.
Ablue

4
Đây là một câu trả lời tuyệt vời với các tài liệu tham khảo tốt, nhưng xin lưu ý rằng cú pháp này sẽ nắm bắt bất kỳ gói nào có các cờ SYN hoặc ACK được đặt, ngay cả khi các cờ khác cũng được đặt. Điều này có thể hoặc không thể là những gì OP dự định. Vui lòng xem câu trả lời của tôi dưới đây để biết bộ lọc nghiêm ngặt hơn nếu chỉ các gói TCP SYN hoặc ACK được mong muốn. Chúc mừng.
JJC

14

Mặc dù câu trả lời của @ Zoredache rất hay và đầy đủ, lưu ý rằng cú pháp đó sẽ mang lại bất kỳ gói nào có cờ TCP TCP hoặc cờ TCP ACK, bao gồm các gói không hoàn toàn chỉ là các gói "TCP SYN" hoặc "TCP ACK" đơn giản, bởi vì chúng cũng có các cờ khác được thiết lập. Điều này có thể hoặc không thể là những gì bạn (hoặc độc giả tương lai) dự định. Ví dụ: cú pháp đó cũng sẽ ghi lại các gói TCP SYN-ACK, TCP FIN-ACK, v.v. Nếu bạn chỉ muốn các gói TCP SYN hoặc TCP ACK (tức là CHỈ một trong các cờ đó được đặt), cú pháp bộ lọc chụp phù hợp là:

'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'

Tương đương:

'tcp[13] == 2 or tcp[13] == 16'

Chúc mừng!


9

Tôi đã tạo một kịch bản để xem các "đồng bộ" hàng đầu. Đối với điều đó, tôi chỉ xem xét gói syn ban đầu (gói đầu tiên trong ba gói bắt tay). Đó là, syn = 1, ack = 0

while :; do
  date; 
  tcpdump -i eth1 -n -c 100 \
  'tcp[tcpflags] & (tcp-syn) != 0' and 
  'tcp[tcpflags] & (tcp-ack) == 0' 2> /dev/null \
  | awk '{ print $3}' \
  | sort | uniq -c | sort | tail -5;
  echo;
  sleep 1
done

5
Đó là một ví dụ hay. Bạn có thể đơn giản hóa bộ lọc chụp tcpdump của mình hơn nữa bằng cách thay thế "'tcp [tcpflags] & (tcp-syn)! = 0' và 'tcp [tcpflags] & (tcp-ack) == 0'" chỉ bằng 'tcp-ack) ] == tcp-syn '. Điều đó sẽ tự động loại trừ các gói với bộ ACK. Chúc mừng!
JJC

9
tcpdump 'tcp[13] = 3'

http://danielmiessler.com/study/tcpdump/

Nâng cao

Bạn cũng có thể lọc dựa trên các phần cụ thể của gói, cũng như kết hợp nhiều điều kiện thành các nhóm. Cái trước rất hữu ích khi chỉ tìm kiếm SYNs hoặc RSTs, và cái sau để cách ly giao thông tiên tiến hơn.

RSAP UAP

[Gợi ý: Đảo chữ cái cho các cờ TCP: Kẻ tấn công không có kỹ năng Pester Real Security Dân gian]

ghi nhớ của bạn: ...

Hiển thị cho tôi tất cả các URGgói URGENT ( ) ...

tcpdump 'tcp[13] & 32 != 0'

Hiển thị cho tôi tất cả các ACKgói ACKNOWLEDGE ( ) ...

tcpdump 'tcp[13] & 16 != 0'

Hiển thị cho tôi tất cả các PSHgói PUSH ( ) ...

tcpdump 'tcp[13] & 8 != 0'

Hiển thị cho tôi tất cả các RSTgói RESET ( ) ...

tcpdump 'tcp[13] & 4 != 0'

Hiển thị cho tôi tất cả các SYNgói SYNCHRONIZE ( ) ...

tcpdump 'tcp[13] & 2 != 0'

Hiển thị cho tôi tất cả các FINgói FINISH ( ) ...

tcpdump 'tcp[13] & 1 != 0'

Hiển thị cho tôi tất cả các gói SYNCHRONIZE / ACKNOWLEDGE ( SYNACK) ...

tcpdump 'tcp[13] = 18'

[ Lưu ý: Chỉ có PSH, RST, SYN, và FINlá cờ được hiển thị trong kết quả lĩnh vực cờ tcpdump của. URGs và ACKs được hiển thị, nhưng chúng được hiển thị ở nơi khác trong đầu ra chứ không phải trong trường cờ]


2
Plagarism không cho phép trên Stack Exchange . Vui lòng chỉnh sửa bài đăng này để làm rõ rằng bạn đã sao chép nội dung từ trang web được liên kết. Cảm ơn bạn.
Chris S

4

Tôi chỉ muốn nhận các gói SYN, tôi đã sử dụng lệnh sau:

tcpdump -i eth7 'tcp[13] & 2 != 0'

Điều này sẽ làm việc cho bạn ngay lập tức.


3
Điều này sẽ nắm bắt bất kỳ gói tin nào với bộ cờ SYN, bao gồm cả SYN, SYN-ACK, v.v. Nếu bạn chỉ muốn các gói SYN, hãy sử dụng 'tcp [13] == 2'. Chúc mừng!
JJC

1

nó sẽ hiển thị chúng mà không có bất kỳ bộ lọc hoặc đối số.


Câu trả lời của bạn là đúng về mặt kỹ thuật, nhưng OP có lẽ bao gồm từ "chỉ" trong câu hỏi của anh ấy. ;-) Chúc mừng!
JJC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.