tcpdump를 사용하여 HTTP 트래픽 모니터링


42

서버와 웹 서버 간의 HTTP 트래픽을 모니터링하기 위해 현재을 사용하고 tcpdump있습니다. 이것은 잘 작동하지만 출력에서 ​​불필요한 데이터를 제거하고 싶습니다 ( tcpflow및 알고 wireshark있지만 내 환경에서 쉽게 사용할 수는 없습니다).

로부터 tcpdump매뉴얼 페이지

포트 80과의 모든 IPv4 HTTP 패킷을 인쇄하려면, 예를 들어 SYN 및 FIN 패킷 및 ACK 전용 패킷이 아닌 데이터가 포함 된 패킷 만 인쇄합니다.

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

이 명령

sudo tcpdump -A 'src example.com 및 tcp 포트 80 및 (((ip [2 : 2]-((ip [0] & 0xf) << 2))-((tcp [12] & 0xf0) >> 2) )! = 0) '

다음과 같은 출력을 제공합니다.

19 : 44 : 03.529413 IP 192.0.32.10.http> 10.0.1.6.52369 : 플래그 [P.], seq 918827135 : 918827862, ack 351213824, win 4316, 옵션 [nop, nop, TS val 4093273405 ecr 869959372], 길이 727

E ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP / 1.1 200 OK Server : Apache / 2.2.3 (Red Hat) 컨텐츠 유형 : text / html; charset = UTF-8 날짜 : 2009 년 11 월 14 일 토요일 18:35:22 GMT 나이 : 7149
콘텐츠 길이 : 438

<HTML> <HEAD> <TITLE> 웹 페이지 예 </ TITLE> </ HEAD> <body>
<p>이 웹 페이지에 도달했습니다 ... </ p> </ BODY> </ HTML>

강조 표시된 부분을 제외하고는 거의 완벽합니다. 이것이 무엇입니까? 더 중요한 것은 제거하는 방법은 무엇입니까? 어쩌면 명령이 끝날 때 표현이 약간 조정 되었을까요?

답변:


39

tcpdump는 완전한 패킷을 인쇄합니다. "쓰레기"는 실제로 TCP 패키지 헤더입니다.

당신은 확실히 출력을 펄 스크립트로 마사지 할 수 있지만, 대신 wireshark의 텍스트 버전 인 tshark를 사용하지 않는 이유는 무엇입니까?

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

tcpdump (동일 라이브러리)와 동일한 인수를 취하지 만 분석기이기 때문에 심층 패킷 검사를 수행하여 필터를 더욱 세분화 할 수 있습니다.

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


1
감사합니다-모든 제안을 시도한 후, tshark는 작업에 가장 적합한 도구 인 것 같습니다. 현재 "tshark -d tcp.port == 8070, http -R 'http.request 또는 http.response'"를 사용하고 있습니다. 이제 wireshark와 같이 tshark가 "tcp 스트림을 따르도록"할 수 있다면 (이것은 많은 질문을 받았지만 여전히 답을 찾지 못했습니다). "-V"는 TCP 및 IP 패킷 등에 대한 정보를 표시하는데 관심이 없습니다. 그러나 스크립트를 사용하여 제거 할 수있을 것 같습니다.
otto.poellath

4
각 문자의 ASCII 값을 일치시켜 캡처 필터에서 "GET"을 검색 할 수도 있습니다 tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420. : 나는 당신이 문자열 일치 캡처 필터를 생성하는 데 도움이 Wireshark를 웹 사이트 잠시 뒤로 페이지 추가 wireshark.org/tools/string-cf.html
제럴드 빗

18

ngrep을 살펴보십시오 -그것은 당신을 위해 약간 유용 할 것입니다.

다른 사람에 대한 참조로 httpry [이제 서버가 다운 될 것으로 보인다하지만 난이 일시적으로 희망]와 tshark를 또한 수동적 인 프로토콜 분석에 유용합니다 - 단지 HTTP의 첫 번째를, 두 번째 - 더 이상.


2
ngrep의 경우 +1 매우 유용한 도구입니다.
tylerl

ngrep 및 httpry는 확실히 유용 해 보이지만 ngrep은 HTTP 및 AFAIK를 인식하지 못합니다. httpry는 HTTP 헤더에서만 작동하며 페이로드 데이터를 표시 할 수 없습니다.
otto.poellath

@sapporo-확실하다-ngrep는 프로토콜에 구애받지 않지만 pcap 필터 "port 80"을 추가하고 [대부분의 경우] http 트래픽 만 얻을 수 있습니다.
pQd

Imo, ngrep은 tcpdump보다 100000 배 더 좋습니다
Daniel W.

5

httpry 또는 justniffer 시도

Justniffer는 재전송 및 IP 조각화를 재정렬하는 TCP 패킷에서 잘 작동합니다.


1
감사! justniffer는 내가 찾던 것입니다 (매우 간단 하고 요청 기간을 측정 하는 것은 언급 된 유일한 도구라고 생각합니다 ).
gkop

1

포스트 프로세스를 위해 pcap 파일에 모든 것을 저장하는 멍청한 tcpdump 명령 줄을 사용하는 것이 좋습니다. 정확히 무엇을보고 있는지에 따라 tcpflow를 진단하면 통신을 일관된 방식으로 다시 분석 할 수 있습니다.

httpry의 일부 사용법을 포함한 다른 좋은 정보는 http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html 에서 확인할 수 있습니다.


0

사용중인 웹 서버가 로그를 생성하지 않습니까? HTTP 트래픽을 모니터링하는 훨씬 좋은 방법 일 것입니다. 데이터를 분석 할 수있는 다양한 도구가 있으며 유능한 웹 서버는 안정적인 로그를 생성해야합니다.


4
분명히. 그래도 그는 이미 그런 생각을했다. 때때로 점 A와 점 B 사이에 전송되는 실제 데이터를 모니터링하는 데 유용합니다
tylerl

0

HTTP 트래픽을 모니터링하기 위해 특별히 설계된 여러 도구가 시장에 있습니다. Fiddler2 ( http://www.fiddler2.org ) 및 HTTP Debugger Pro 가 이러한 도구의 예입니다.


4
제안 해 주셔서 감사합니다. 불행히도 두 도구는 모두 Windows에서만 작동하는 것 같습니다. 나는 그것을 언급하지 않았지만 Linux에서 작동하는 것을 찾고 있습니다.
otto.poellath
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.