2013-04-17 8 views
5

मैं अपने सर्वर से GET अनुरोध की गणना करने का प्रयास करता हूं।फ़ाइल में लिखने से पहले tshark परिणाम कैसे फ़िल्टर करें?

मैं tshark का उपयोग करता हूं।

/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"' 

जैसा कि आप देख मैं अधिकतम आकार 1G और नाम के साथ 1 फ़ाइल के लिए फ़िल्टर किए गए परिणाम स्टोर करने के लिए परिभाषित किया गया: samples.pcap

मैं चलाने आने वाले ट्रैफ़िक को फ़िल्टर और केवल GET अनुरोधों को लाने आदेश का पालन किया।

समस्या यह है, जब मैं PCAP फ़ाइल मैं देखता हूँ कि 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 

मैं वास्तव में बड़ी यातायात है, 10 मिनट मैं PCAP फ़ाइल आकार 950M मिल दौरान। और इसे पार्स करने में लगभग 4 मिनट लगते हैं।

दिलचस्प बात यह है कि जब मैं इसे चलाने के लिए कोशिश के बिना इसे स्थानीय फ़ाइल के लिए स्टोर करने के लिए (लेकिन/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 

यह काम करता है, लेकिन इस मामले में मैं नीचे/tmp कई अस्थायी फ़ाइलें विशाल आकार 1 जी + के साथ।

क्या मुझे कुछ याद आया?

धन्यवाद

======================================== samples.pcap भंडार सभी

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 

में सहायता नहीं मिलती है, फिर भी: ===============

संपादित

लार्स -f जोड़ने के लिए कहा यातायात:

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

आप '-f' विकल्प के लिए अपने कब्जा फिल्टर अभिव्यक्ति देने की कोशिश की है? –

+0

मैंने कोशिश की, अभी भी में सभी यातायात मिलता है। तुम कहाँ रखा '-f' करते हैं? –

+0

बस फिल्टर अभिव्यक्ति, यानी '-f 'टीसीपी ...' –

उत्तर

3

यह काम करने के लिए जब आप डब्ल्यू और बीपीएफ पैकेट फ़िल्टर गठबंधन करना चाहते हैं लगता है (यानी, क्या आप -f पर डाल):

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

(में tshark परिणामों के साथ प्रारंभिक tcpdump की जगह यह त्रुटि मेरे स्थानीय सिस्टम में: tshark: अपरिचित libpcap प्रारूप)

एक पठन-फ़िल्टर (-R) के परिणाम को सहेजने के बाद संस्करण 1.4.0 के बाद से समर्थित नहीं लगता है (या एक से पढ़ना कैप्चर करें) और परिणाम फिर से लिखना (देखें: http://ask.wireshark.org/questions/10397/read-filters-arent-supported-when-capturing-and-saving-the-captured-packets)। संभवतः पूर्व 1.4.0 संस्करण -b (उस परीक्षण नहीं किए गए) के साथ आउटपुट को सीमित करने और सीमित करने की अनुमति देंगे।

यदि आप केवल आरआर के पाठ आउटपुट चाहते हैं (जैसे कि कैप आउटपुट के विपरीत)। उपरोक्त आदेश आपका समाधान होगा जो मुझे लगता है।

अपने उत्पादन को सीमित करने के (यानी आप आप सिर्फ एक नमूना ले जाना चाहते हैं उल्लेख।) आप प्रसंस्करण पाइप लाइन में किसी भी बिंदु पर head -c <bytes> इस्तेमाल कर सकते हैं:

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

एक 1,024,000 बाइट पाठ उत्पादन बुलाया फ़ाइल बनाने के लिए उत्पादन।txt या

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

PCAP इनपुट के 102,400 बाइट्स कि टीसीपी पोर्ट 80 के लिए prefiltered था संसाधित करने के लिए, और

+0

देखते हैं, केवल "GET" पर कब्जा कर लिया जाएगा, और जहां रखा ? मैं temp फ़ाइलों को बनाने से रोकना चाहता हूं जो tshar/tmp के अंतर्गत करता है। कि मैं का उपयोग करने वाले ' –

+0

जहां तक ​​मैं अपने स्थानीय सिस्टम (मैक ओएस एक्स) इस विधि/tmp के तहत अस्थायी फ़ाइलों का उत्पादन नहीं करता है और केवल कब्जा निर्दिष्ट आउटपुट फ़ाइल के लिए अनुरोध" GET "पर देख सकते हैं -w'। –

+0

1 और 2 आदेशों आप काम पोस्ट, लेकिन मैं अभी भी 'मिल etherXXXX **' '/ tmp' फ़ोल्डर के अंतर्गत फ़ाइल। –

1

अच्छी तरह से output.txt नामक एक फ़ाइल में पाठ उत्पादन में कहें, डब्ल्यू का प्रयोग नहीं करते, यह कच्चे डेटा को सहेज लेगा, आपको गंतव्य निर्देशिका निर्दिष्ट करने के लिए रीडायरेक्ट ऑपरेटर ">" का उपयोग करना चाहिए।

संबंधित मुद्दे