2013-04-17 21 views
5

Tôi cố gắng tính toán GET Yêu cầu từ máy chủ của tôi.Làm cách nào để lọc kết quả tshark trước khi ghi vào tệp?

Tôi sử dụng tshark.

tôi chạy theo lệnh để lọc dữ liệu đến và lấy chỉ GET yêu cầu:

/usr/sbin/tshark -b filesize:1024000 -b files:1 \ 
'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' \ 
-w samples.pcap -R 'http.request.method == "GET"' 

Như bạn thấy tôi xác định để lưu trữ kết quả lọc đến 1 tập tin với kích thước tối đa 1G ​​và tên: samples.pcap.

Vấn đề là, khi tôi cố gắng để mở tập tin pcap tôi thấy rằng tshark stored all traffic there:

3245 172.692247 1.1.1.1 -> 2.2.2.2 HTTP [TCP Retransmission] Continuation or non-HTTP traffic 
3246 172.730928 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3247 172.731944 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3248 172.791934 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/client.php?cnc=13 HTTP/1.1 
3249 172.825303 1.1.1.1 -> 2.2.2.2 HTTP HTTP/1.1 200 OK [Unreassembled Packet [incorrect TCP checksum]] 
3250 172.826329 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3251 172.826341 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3252 172.826347 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3253 172.826354 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3254 172.826359 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 

Tôi có giao thông thực sự lớn, trong thời gian 10 phút tôi nhận được kích thước tập tin pcap 950M. Và phải mất khoảng 4 phút để phân tích nó.

Điều thú vị là khi tôi cố gắng chạy nó mà không để lưu trữ tập tin địa phương (nhưng dưới/tmp):

/usr/sbin/tshark \ 
'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' \ 
-R 'http.request.method == "GET"': 

3.776587 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/client.php?cnc=13 HTTP/1.1 
4.775624 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/clsWebClient.php HTTP/1.1 
8.804702 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/client.php?cnc=13 HTTP/1.1 

Nó hoạt động, nhưng trong trường hợp này tôi có theo/tmp vài file tạm với kích thước lớn 1G +.

Tôi có bỏ lỡ điều gì đó không?

Cảm ơn bạn

==================== ==================== ===============

Sửa

Lars yêu cầu thêm -f:

sudo /usr/sbin/tshark -T fields -e 'http.request.uri contains "cnc=13"' \ 
     -b filesize:1024000 -b files:1 \ 
     -f 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' \ 
     -w samples.pcap 

không giúp đỡ, vẫn cửa hàng samples.pcap tất cả giao thông:

74 6.908388 172.20.0.23 -> 89.78.170.96 HTTP Continuation or non-HTTP traffic 
75 6.908394 172.20.0.23 -> 89.78.170.96 HTTP Continuation or non-HTTP traffic 
+0

Bạn đã thử đưa biểu thức bộ lọc chụp vào tùy chọn '-f' chưa? –

+0

Tôi đã thử, vẫn nhận được tất cả lưu lượng truy cập. Bạn đặt '-f' ở đâu? –

+0

Chỉ ở phía trước biểu thức lọc, tức là '-f 'tcp ...' –

Trả lời

3

Điều này dường như làm việc khi bạn muốn kết hợp các bộ lọc gói -w và BPF (tức là, những gì bạn đưa vào -f):

tcpdump -nli en1 -w - 'tcp port 80' | tshark -i - -R'http.request.method == "GET"' 

(thay thế tcpdump ban đầu với kết quả tshark trong lỗi này trong hệ thống cục bộ của tôi: tshark: Định dạng libpcap không được công nhận)

Lưu kết quả của bộ lọc đọc (-R) dường như không được hỗ trợ nữa kể từ phiên bản 1.4.0 khi chụp (hoặc đọc từ một chụp) và viết lại kết quả (xem: http://ask.wireshark.org/questions/10397/read-filters-arent-supported-when-capturing-and-saving-the-captured-packets). Có lẽ các phiên bản trước 1.4.0 sẽ cho phép ghi vào pcap và giới hạn đầu ra với -b (chưa kiểm tra).

Nếu bạn chỉ muốn đầu ra văn bản của -R (trái ngược với đầu ra pcap). Lệnh trên sẽ là giải pháp của bạn mà tôi nghĩ.

Để hạn chế đầu ra của bạn (ví dụ bạn đề cập đến bạn chỉ muốn lấy một mẫu.), Bạn có thể sử dụng head -c <bytes> tại bất kỳ điểm nào trong các đường ống xử lý:

tcpdump -nli en1 -w - 'tcp port 80' | \ 
    tshark -i - -R'http.request.method == "GET"' | \ 
    head -c 1024000 > output.txt 

để tạo ra một tập tin văn bản đầu ra 1.024.000 byte gọi đầu ra.txt hoặc

tcpdump -nli en1 -w - 'tcp port 80' | \ 
    head -c 1024000 | \ 
    tshark -i - -R'http.request.method == "GET"' > output.txt 

để xử lý 102.400 byte đầu vào pcap đã được prefiltered cho TCP cổng 80, và đưa ra văn bản vào một tập tin gọi là output.txt

+0

Vì vậy, trong ví dụ của bạn nếu tôi có lưu lượng 100M mỗi phút, chỉ "GET" sẽ được ghi lại và ? Tôi muốn ngăn chặn tạo tập tin tạm thời những gì tshar làm dưới/tmp. Tôi sử dụng '-w' –

+0

Theo như tôi thấy trên hệ thống cục bộ của mình (Mac OS X), phương thức này không tạo ra các tệp tạm thời trong/tmp và chỉ ghi lại các yêu cầu" GET "vào tệp đầu ra được chỉ định. –

+0

Lệnh 1 và 2 bạn đã đăng, nhưng tôi vẫn nhận được tệp 'etherXXXX **' trong thư mục '/ tmp'. –

1

tốt, không sử dụng -w, nó sẽ lưu dữ liệu thô, bạn nên sử dụng toán tử chuyển hướng ">" để chỉ định thư mục đích.

Các vấn đề liên quan