2013-04-17 3 views
5

내 서버에서 GET 요청을 계산하려고합니다.파일에 쓰기 전에 tshark 결과를 필터링하는 방법은 무엇입니까?

나는 tshark을 사용합니다. samples.pcap : 당신은 내가 최대 크기를 1G와 이름을 가진 한 파일을 필터링 된 결과를 저장하기 위해 정의시피

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

: 나는 실행

들어오는 트래픽을 필터링 만 GET 요청을 가져 오기 명령을 따랐다. 내가 PCAP 파일 크기 950M를 얻을 10 분 동안,

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 

내가 정말 큰 트래픽이 : 내가 tshark stored all traffic there 볼 PCAP 파일을 열려고하면

문제이다. 그리고 그것을 분석하는 데 약 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를 여러 임시 파일에서이 거대한 크기의 1G +.

나는 무엇인가 놓쳤는가?

은 ======================================== 당신에게

감사 모든 여전히 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 'tcp ...' –

답변

3

이것은 당신이 -w와 BPF 패킷 필터를 결합 싶어 할 때 작동하는 것 같다 (즉, 당신은 -f에 무엇을 넣어) :

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

(에 tshark를 결과로 초기 tcpdump를 교체 내 로컬 시스템의이 오류 : tshark : 인식 할 수없는 libpcap 형식)

캡쳐 할 때 버전 1.4.0부터 읽기 필터 (-R)의 결과 저장이 더 이상 지원되지 않는 것 같습니다. 캡처)하고 결과를 다시 작성하십시오 (http://ask.wireshark.org/questions/10397/read-filters-arent-supported-when-capturing-and-saving-the-captured-packets 참조). 아마도 1.4.0 이전 버전은 pcap에 쓰기를하고 -b으로 출력을 제한 할 수 있습니다 (테스트하지 않았습니다).

-R의 텍스트 출력 만 원할 경우 (pcap 출력과 반대). 위의 명령은 내가 생각하는 해결책 일 것입니다.

는 출력을 제한하려면 (즉, 당신은 단지 샘플을 채취 할 언급.) 당신이 처리 파이프 라인의 어느 지점에서 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 

은 -w 사용하지 않는, 그것을 TCP 포트 80에 대한 미리 여과 된 PCAP 입력의 102,400 바이트를 처리하고

+0

예를 들어, 분당 100M 트래픽이 있으면 "GET"만 캡처되고 ? tshar가/tmp에서 수행하는 임시 파일 생성을 막고 싶습니다. 이를 위해 나는'-w'를 사용한다. –

+0

로컬 시스템 (Mac OS X)에서 볼 수있는 한이 방법은/tmp 아래에 임시 파일을 생성하지 않고 지정된 출력 파일에만 "GET"요청을 캡처한다. –

+0

당신이 올린 첫 번째와 두 번째 명령은 여전히'/ tmp' 폴더 아래에'etherXXXX **'파일을 가지고 있습니다. –

1

과 Output.txt라는 파일에 텍스트 출력을 넣어 원시 데이터를 저장하므로 대상 디렉토리를 지정하려면 리디렉션 연산자 ">"를 사용해야합니다.

관련 문제