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?
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âu trả lời:
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 đó.
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!
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
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 SYN
s hoặc RST
s, 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 URG
gói URGENT ( ) ...
tcpdump 'tcp[13] & 32 != 0'
Hiển thị cho tôi tất cả các ACK
gói ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] & 16 != 0'
Hiển thị cho tôi tất cả các PSH
gói PUSH ( ) ...
tcpdump 'tcp[13] & 8 != 0'
Hiển thị cho tôi tất cả các RST
gói RESET ( ) ...
tcpdump 'tcp[13] & 4 != 0'
Hiển thị cho tôi tất cả các SYN
gói SYNCHRONIZE ( ) ...
tcpdump 'tcp[13] & 2 != 0'
Hiển thị cho tôi tất cả các FIN
gó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à FIN
lá cờ được hiển thị trong kết quả lĩnh vực cờ tcpdump của. URG
s và ACK
s đượ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ờ]
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.
tcpdump -s SIZE
. Tiêu đề TCP có thể có độ dài thay đổi, do đó, việc chụp-s 128
có thể sẽ nhận được tất cả các tiêu đề có thể và có thể là một ít dữ liệu.