Làm thế nào để tìm các luồng tcp mà không có chuỗi ack / fin cuối cùng trong một tệp chụp gói lớn


2

Tôi có một tệp pcap lớn chứa một số lượng lớn các luồng tcp riêng lẻ. Nhưng trong số này, có một số luồng không hợp lệ không có chuỗi fin / ack cuối cùng. Có cách nào tôi có thể tìm thấy những luồng này bằng cách sử dụng wireshark không? Có công cụ nào khác cho phép tôi tìm kiếm pcaps theo cách này không?

Bất kỳ trợ giúp sẽ được đánh giá cao.


Có phải tất cả đều chắc chắn không hợp lệ? Bạn có thể nhận được các phiên không được tiết lộ thông qua hành vi bình thường, khi mọi người tham gia ít nhất.
Paul

ít nhất trong kịch bản của tôi họ không hợp lệ. Tôi đang làm việc với một thiết bị IPS xử lý các chuỗi chính xác này. Tôi cần pin chỉ các luồng cụ thể.
woodstok

1
Tôi sẽ làm điều này ngược lại và sử dụng tcpdump để xác định bất kỳ luồng nào FIN-ACKed, sau đó sử dụng grep để lọc các luồng này từ đầu ra tcpdump, sau đó tìm kiếm phần còn lại cho các SYN-ACK. Nhưng có thể có một cách tốt hơn, vì vậy tôi sẽ chờ những gợi ý khác.
Paul

Câu trả lời:


0

Lệnh sau in mỗi nửa kết nối không hoàn chỉnh.

tcpdump -r pcap-file 'tcp[tcpflags] & (tcp-syn|tcp-fin) > 0' | 
sed -r 's/^.*IP (.*) > (.*):.*$/\1 \2/'|sort|uniq -u

Cách tiếp cận giả định rằng mỗi cặp ổ cắm chỉ được sử dụng một lần trong toàn bộ dấu vết.

Giải trình

Để kết nối giữa

IP_A:PORT_A <--> IP_B:PORT_B

một tcpdump chứa một nửa

IP_A:PORT_A > IP_B:PORT_B, and
IP_B:PORT_B > IP_A:PORT_A

Đối với mỗi nửa, bãi chứa phải chứa hai phân đoạn mang cờ SYN hoặc FIN. Vì vậy, những gì comand làm là:

  1. Thu thập các phân đoạn mang cờ SYN hoặc FIN

    tcpdump -r pcap-file 'tcp[tcpflags] & (tcp-syn|tcp-fin) > 0

  2. Tổng hợp kết quả bằng một nửa kết nối, bất kể cờ thực tế (SYN hoặc FIN)

    2.1. Sắp xếp theo nửa kết nối

    sed -r 's/^.*IP (.*) > (.*):.*$/\1 \2/'|sort

    2.2. Đếm các phân đoạn liên quan đến mỗi nửa kết nối và lọc ra tất cả các nửa kết nối liên quan chính xác đến hai phân đoạn

    uniq -u


0

Đây là một cách khác để làm điều đó bằng cách sử dụng tshark. Ý tưởng giống như câu trả lời từ @artistoex - sự khác biệt là nó không xem xét từng nửa kết nối và đầu ra là số luồng TCP (từ Wireshark / tshark) có thể dễ dàng hoạt động hơn khi bạn muốn mở luồng đó trong Wireshark và tiếp tục đăng quá trình ở đó.

tshark -r pcap_file.pcap -R "tcp.flags & 0x03" -Tfields -etcp.stream | 
sort -n | uniq -c | awk -F ' ' '{ if ($1<4) print $1," ", $2 }'

Bộ lọc hiển thị thực hiện giống như bộ lọc chụp từ câu trả lời khác, nó sử dụng thực tế là các bit SYN và FIN là hai trong số các bit có trọng số thấp nhất trong trường cờ TCP, vì vậy nếu cả hai được đặt 0b11 hoặc là 0x3. VÀ-ing tcp.flags lĩnh vực với 0x3 sẽ cung cấp các giá trị khác không nếu một trong hai cờ được đặt.

tshark xuất số luồng TCP cho mỗi gói ở đây. Chúng tôi sắp xếp chúng và đếm các số duy nhất. Bước cuối cùng chỉ in các dòng trong đó số lượng gói cho luồng này nhỏ hơn 4 (1 SYN và 1 FIN cho mỗi nửa hướng).

Sau đó, bạn có thể mở Wireshark với

wireshark -r pcap-file -R "tcp.stream eq 1234"

1234 là từ lệnh trước.

Đẹp? Tôi đoán là không. Nhanh? Không...

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.